Update OpenWnn based on ICS.
- Support multi screen size
- Common UI with Android IME
- Feature improvements
- Hardware keybord support
- etc.
Change-Id: Iec1dff5be9d62b8338a32e6ae3444a7cc8613c4b
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2ce1ae6..f79c324 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,5 +1,5 @@
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/ChangeLog.txt b/ChangeLog.txt
new file mode 100644
index 0000000..73d6b3c
--- /dev/null
+++ b/ChangeLog.txt
@@ -0,0 +1,98 @@
+------------------------------------------------------------------------------
+ [OpenWnn ChangeLog]
+
+ (C) Copyright OMRON SOFTWARE Co., Ltd. 2008-2012 All Rights Reserved.
+------------------------------------------------------------------------------
+
+[Version 1.3.6 release] Apr 12, 2012
+------------------------------------
+ Update features:
+ * Android 4.0 (ICS) support.
+ * Improving Large Qwerty.
+ - Display style of the candidates view is changed.
+ * Improving usability.
+ - Focus in the candidate list can move arround using keyboard operation.
+ - Layout of soft keyboard is changed.
+ - Layout of symbol list is changed.
+ - Layout of emoticon list is changed.
+ - Support for H/W12key
+ - Support for Bluetooth Keyboard
+
+ Bug fix:
+ * If the ICS, bug when displaying the user dictionary, Exception occurs.
+ * Corresponding vulnerability of DB files
+
+[Version 1.3.5 release] Dec 25, 2009
+------------------------------------
+ Update features:
+ * Importing some improvement from iWnn IME.
+
+ Bug fix:
+ * Bug of Romaji-to-Kana conversion on phonetic text field is fixed.
+ * Some minor bugs are fixed.
+
+[Version 1.3.4 release] Oct 29, 2009
+------------------------------------
+ Bug fix:
+ * User Dictionary's bug on WVGA is fixed.
+ * Hardware keyboard support on Android 2.0 (eclair)
+
+[Version 1.3.3 release] Sep 30, 2009
+------------------------------------
+ Update features:
+ * Android 2.0 (eclair) support.
+
+[Version 1.3.2 internal version] Sep 25, 2009
+---------------------------------------------
+ Update features:
+ * Android 1.6 (donut) support.
+ * Adding images for 240dpi display.
+ * Japanese input on E-mail address field is allowed.
+
+[Version 1.3.1 release] Jun 12, 2009
+------------------------------------
+ Update features:
+ * Emoji is disabled.
+ * Improving display size compatibility.
+
+[Version 1.3 release] May 14, 2009
+------------------------------------
+ Update features:
+ * Improving usability.
+ - Layout of software keyboards are changed.
+ - Display style of the candidates view is changed.
+ - Simple tutorial is added.
+ * Improving speed of registering to the learning dictionary.
+
+ Bug fix:
+ * Some minor bugs are fixed.
+
+[Version 1.2 release] Mar 27, 2009
+------------------------------------
+ The first release implemented following features:
+ * (Simplified) Chinese input method
+
+ Update features:
+ * Switcher of "Auto Capitalization" to the setting menu is added.
+ * Changer of the keyboard image to the setting menu is added.
+ * User dictionary manager's user interface is changed.
+ * Changes for improving usability.
+
+ Bug fix:
+ * Some minor bugs are fixed.
+
+------------------------------------------------------------------------------
+[Version 1.1 release] Feb. 23, 2009
+-------------------------------------
+ The first release implemented following features:
+ * Japanese input method
+ * English input method
+
+------------------------------------------------------------------------------
+[Version 1.0 release] Dec 04, 2008
+-------------------------------------
+ The first release implemented following features:
+ * Dictionary search library
+ * English dictionary
+
+------------------------------------------------------------------------------
diff --git a/README.txt b/README.txt
index 3b0ac1d..af4ace3 100644
--- a/README.txt
+++ b/README.txt
@@ -1,9 +1,9 @@
-------------------------------------------------------------------------------
OpenWnn Japnese README
- Version 1.3.5
-
- (C) Copyright OMRON SOFTWARE Co., Ltd. 2008,2009 All Rights Reserved.
+ Version 1.3.6
+
+ (C) Copyright OMRON SOFTWARE Co., Ltd. 2008-2012 All Rights Reserved.
-------------------------------------------------------------------------------
1. About OpenWnn
@@ -83,18 +83,38 @@
*.png |
drawable-ja/ |
*.png |
+ drawable-xlarge/ |
+ *.xml |
+ *.png |
+ drawable-xlarge-hdpi/ |
+ *.xml |
+ *.png |
+ drawable-xlarge-land-hdpi/ |
+ *.png |
layout/ |
*.xml |
+ layout-xlarge/ |
+ *.xml |
raw/ |
type.ogg |
values/ |
*.xml |
values-ja/ |
*.xml |
+ values-land/ |
+ *.xml |
+ values-xlarge/ |
+ *.xml |
+ values-xlarge-land/ |
+ *.xml |
values-zh-rCN |
*.xml |
xml/ |
*.xml |
+ xml-land/ |
+ *.xml |
+ xml-xlarge/ |
+ *.xml |
src/ IME source code (Java)
jp/ |
diff --git a/libs/libwnnDictionary/Android.mk b/libs/libwnnDictionary/Android.mk
index e14069f..b7b88b2 100644
--- a/libs/libwnnDictionary/Android.mk
+++ b/libs/libwnnDictionary/Android.mk
@@ -30,6 +30,4 @@
LOCAL_CFLAGS += \
-O
-
-
include $(BUILD_SHARED_LIBRARY)
diff --git a/libs/libwnnDictionary/OpenWnnDictionaryImplJni.c b/libs/libwnnDictionary/OpenWnnDictionaryImplJni.c
index 133888d..b112baa 100644
--- a/libs/libwnnDictionary/OpenWnnDictionaryImplJni.c
+++ b/libs/libwnnDictionary/OpenWnnDictionaryImplJni.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/OpenWnnJni.h b/libs/libwnnDictionary/OpenWnnJni.h
index 360d558..bd35999 100644
--- a/libs/libwnnDictionary/OpenWnnJni.h
+++ b/libs/libwnnDictionary/OpenWnnJni.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndapi.c b/libs/libwnnDictionary/engine/ndapi.c
index a41cdab..55971c6 100644
--- a/libs/libwnnDictionary/engine/ndapi.c
+++ b/libs/libwnnDictionary/engine/ndapi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndbdic.c b/libs/libwnnDictionary/engine/ndbdic.c
index fbb387f..6cf73da 100644
--- a/libs/libwnnDictionary/engine/ndbdic.c
+++ b/libs/libwnnDictionary/engine/ndbdic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndcommon.c b/libs/libwnnDictionary/engine/ndcommon.c
index d3d493f..fc1c25a 100644
--- a/libs/libwnnDictionary/engine/ndcommon.c
+++ b/libs/libwnnDictionary/engine/ndcommon.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndfdic.c b/libs/libwnnDictionary/engine/ndfdic.c
index a737943..65a842e 100644
--- a/libs/libwnnDictionary/engine/ndfdic.c
+++ b/libs/libwnnDictionary/engine/ndfdic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndldic.c b/libs/libwnnDictionary/engine/ndldic.c
index f7658d2..d140ea2 100644
--- a/libs/libwnnDictionary/engine/ndldic.c
+++ b/libs/libwnnDictionary/engine/ndldic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/ndrdic.c b/libs/libwnnDictionary/engine/ndrdic.c
index 15c5712..b8fe634 100644
--- a/libs/libwnnDictionary/engine/ndrdic.c
+++ b/libs/libwnnDictionary/engine/ndrdic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/neapi.c b/libs/libwnnDictionary/engine/neapi.c
index 49d5aed..4b59aac 100644
--- a/libs/libwnnDictionary/engine/neapi.c
+++ b/libs/libwnnDictionary/engine/neapi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/necode.c b/libs/libwnnDictionary/engine/necode.c
index 9bab3fa..ca33186 100644
--- a/libs/libwnnDictionary/engine/necode.c
+++ b/libs/libwnnDictionary/engine/necode.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/engine/nj_str.c b/libs/libwnnDictionary/engine/nj_str.c
index d450e85..1892458 100644
--- a/libs/libwnnDictionary/engine/nj_str.c
+++ b/libs/libwnnDictionary/engine/nj_str.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/nj_dic.h b/libs/libwnnDictionary/include/nj_dic.h
index c2c4b98..47b54ac 100644
--- a/libs/libwnnDictionary/include/nj_dic.h
+++ b/libs/libwnnDictionary/include/nj_dic.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/nj_err.h b/libs/libwnnDictionary/include/nj_err.h
index 4f7a214..3b4010c 100644
--- a/libs/libwnnDictionary/include/nj_err.h
+++ b/libs/libwnnDictionary/include/nj_err.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/nj_ext.h b/libs/libwnnDictionary/include/nj_ext.h
index 1a08bbf..c2e7356 100644
--- a/libs/libwnnDictionary/include/nj_ext.h
+++ b/libs/libwnnDictionary/include/nj_ext.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/nj_lib.h b/libs/libwnnDictionary/include/nj_lib.h
index 3a89200..d4dae0d 100644
--- a/libs/libwnnDictionary/include/nj_lib.h
+++ b/libs/libwnnDictionary/include/nj_lib.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/njd.h b/libs/libwnnDictionary/include/njd.h
index ae3b338..937a009 100644
--- a/libs/libwnnDictionary/include/njd.h
+++ b/libs/libwnnDictionary/include/njd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/include/njx_lib.h b/libs/libwnnDictionary/include/njx_lib.h
index 8ff6b03..91755e7 100644
--- a/libs/libwnnDictionary/include/njx_lib.h
+++ b/libs/libwnnDictionary/include/njx_lib.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni.h b/libs/libwnnDictionary/jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni.h
index 45700bf..bf5f7df 100644
--- a/libs/libwnnDictionary/jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni.h
+++ b/libs/libwnnDictionary/jp_co_omronsoft_openwnn_OpenWnnDictionaryImplJni.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnDictionary/predef_table.h b/libs/libwnnDictionary/predef_table.h
index 703777d..34b6b66 100644
--- a/libs/libwnnDictionary/predef_table.h
+++ b/libs/libwnnDictionary/predef_table.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnEngDic/Android.mk b/libs/libwnnEngDic/Android.mk
index a71c82e..85d452a 100644
--- a/libs/libwnnEngDic/Android.mk
+++ b/libs/libwnnEngDic/Android.mk
@@ -20,6 +20,4 @@
LOCAL_CFLAGS += \
-O
-
-
include $(BUILD_SHARED_LIBRARY)
diff --git a/libs/libwnnEngDic/WnnEngDic.c b/libs/libwnnEngDic/WnnEngDic.c
index 4b92fac..9b19411 100644
--- a/libs/libwnnEngDic/WnnEngDic.c
+++ b/libs/libwnnEngDic/WnnEngDic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/libs/libwnnJpnDic/Android.mk b/libs/libwnnJpnDic/Android.mk
index c2310d6..0ba69c6 100644
--- a/libs/libwnnJpnDic/Android.mk
+++ b/libs/libwnnJpnDic/Android.mk
@@ -20,6 +20,4 @@
LOCAL_CFLAGS += \
-O
-
-
include $(BUILD_SHARED_LIBRARY)
diff --git a/libs/libwnnJpnDic/WnnJpnDic.c b/libs/libwnnJpnDic/WnnJpnDic.c
index c019d30..d392959 100644
--- a/libs/libwnnJpnDic/WnnJpnDic.c
+++ b/libs/libwnnJpnDic/WnnJpnDic.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/res/drawable-hdpi/btn_close.xml b/res/drawable-hdpi/btn_close.xml
new file mode 100644
index 0000000..5af18f3
--- /dev/null
+++ b/res/drawable-hdpi/btn_close.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item android:state_pressed="false"
+ android:drawable="@drawable/btn_close_normal" />
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_close_pressed" />
+
+</selector>
diff --git a/res/drawable-hdpi/btn_close_normal.png b/res/drawable-hdpi/btn_close_normal.png
new file mode 100644
index 0000000..ecc4dde
--- /dev/null
+++ b/res/drawable-hdpi/btn_close_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_close_pressed.png b/res/drawable-hdpi/btn_close_pressed.png
new file mode 100644
index 0000000..49223c5
--- /dev/null
+++ b/res/drawable-hdpi/btn_close_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key.xml b/res/drawable-hdpi/btn_keyboard_key.xml
new file mode 100644
index 0000000..5b3b4b1
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal" />
+
+</selector>
diff --git a/res/drawable-hdpi/btn_keyboard_key_2nd.xml b/res/drawable-hdpi/btn_keyboard_key_2nd.xml
new file mode 100644
index 0000000..991634f
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_2nd.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <item android:state_checkable="true" android:state_checked="true"
+ android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_on_2nd" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/btn_keyboard_key_normal_on_2nd" />
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_2nd" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal_2nd" />
+
+</selector>
diff --git a/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..9fed21e
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..e6a1dce
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal.9.png b/res/drawable-hdpi/btn_keyboard_key_normal.9.png
new file mode 100644
index 0000000..32168a3
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal_2nd.9.png b/res/drawable-hdpi/btn_keyboard_key_normal_2nd.9.png
new file mode 100644
index 0000000..0f43c2e
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_normal_2nd.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal_on_2nd.9.png b/res/drawable-hdpi/btn_keyboard_key_normal_on_2nd.9.png
new file mode 100644
index 0000000..fe125f3
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_normal_on_2nd.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed.9.png b/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
new file mode 100644
index 0000000..5e52bb2
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed_2nd.9.png b/res/drawable-hdpi/btn_keyboard_key_pressed_2nd.9.png
new file mode 100644
index 0000000..9a79706
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_pressed_2nd.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed_on_2nd.9.png b/res/drawable-hdpi/btn_keyboard_key_pressed_on_2nd.9.png
new file mode 100644
index 0000000..0e12b9f
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_pressed_on_2nd.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std.xml b/res/drawable-hdpi/btn_keyboard_key_std.xml
new file mode 100644
index 0000000..b30ba33
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <item android:state_checkable="true" android:state_checked="true"
+ android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_std_pressed_on" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_std_pressed_off" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/btn_keyboard_key_std_normal_on" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/btn_keyboard_key_std_normal_off" />
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_std_pressed" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_std_normal" />
+
+</selector>
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_normal.9.png b/res/drawable-hdpi/btn_keyboard_key_std_normal.9.png
new file mode 100644
index 0000000..42c7c14
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_normal_off.9.png b/res/drawable-hdpi/btn_keyboard_key_std_normal_off.9.png
new file mode 100644
index 0000000..01e2506
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_normal_off.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_normal_on.9.png b/res/drawable-hdpi/btn_keyboard_key_std_normal_on.9.png
new file mode 100644
index 0000000..83c6eb3
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_normal_on.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_pressed.9.png b/res/drawable-hdpi/btn_keyboard_key_std_pressed.9.png
new file mode 100644
index 0000000..e047eaf
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_pressed_off.9.png b/res/drawable-hdpi/btn_keyboard_key_std_pressed_off.9.png
new file mode 100644
index 0000000..218a2d2
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_pressed_off.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_std_pressed_on.9.png b/res/drawable-hdpi/btn_keyboard_key_std_pressed_on.9.png
new file mode 100644
index 0000000..afe4951
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_std_pressed_on.9.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_back.xml b/res/drawable-hdpi/cand_back.xml
new file mode 100644
index 0000000..7033505
--- /dev/null
+++ b/res/drawable-hdpi/cand_back.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/cand_back_pressed" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/cand_back_focused" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/cand_back_normal" />
+</selector>
diff --git a/res/drawable-hdpi/cand_back_1line.xml b/res/drawable-hdpi/cand_back_1line.xml
new file mode 100644
index 0000000..018eddb
--- /dev/null
+++ b/res/drawable-hdpi/cand_back_1line.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/cand_back_pressed" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/cand_back_focused" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/cand_back_normal_1line" />
+</selector>
diff --git a/res/drawable-hdpi/cand_back_focuse.xml b/res/drawable-hdpi/cand_back_focuse.xml
new file mode 100644
index 0000000..9f48c62
--- /dev/null
+++ b/res/drawable-hdpi/cand_back_focuse.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/cand_back_pressed" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/cand_back_focused" />
+</selector>
diff --git a/res/drawable-hdpi/cand_back_focused.9.png b/res/drawable-hdpi/cand_back_focused.9.png
new file mode 100644
index 0000000..0803b70
--- /dev/null
+++ b/res/drawable-hdpi/cand_back_focused.9.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_back_normal.9.png b/res/drawable-hdpi/cand_back_normal.9.png
index c5c8d04..6b829f5 100644
--- a/res/drawable-hdpi/cand_back_normal.9.png
+++ b/res/drawable-hdpi/cand_back_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_back_normal_1line.9.png b/res/drawable-hdpi/cand_back_normal_1line.9.png
new file mode 100644
index 0000000..523e905
--- /dev/null
+++ b/res/drawable-hdpi/cand_back_normal_1line.9.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_down.png b/res/drawable-hdpi/cand_down.png
index 4122bdf..3a8e2e9 100644
--- a/res/drawable-hdpi/cand_down.png
+++ b/res/drawable-hdpi/cand_down.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_down_press.png b/res/drawable-hdpi/cand_down_press.png
index 4d38c28..1a61074 100644
--- a/res/drawable-hdpi/cand_down_press.png
+++ b/res/drawable-hdpi/cand_down_press.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_left.png b/res/drawable-hdpi/cand_left.png
new file mode 100644
index 0000000..e375f26
--- /dev/null
+++ b/res/drawable-hdpi/cand_left.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_right.png b/res/drawable-hdpi/cand_right.png
new file mode 100644
index 0000000..d38ae75
--- /dev/null
+++ b/res/drawable-hdpi/cand_right.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_tab.xml b/res/drawable-hdpi/cand_tab.xml
new file mode 100644
index 0000000..aed0a42
--- /dev/null
+++ b/res/drawable-hdpi/cand_tab.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/tab_press" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/tab_select" />
+</selector>
diff --git a/res/drawable-hdpi/cand_tab_noselect.xml b/res/drawable-hdpi/cand_tab_noselect.xml
new file mode 100644
index 0000000..761da6e
--- /dev/null
+++ b/res/drawable-hdpi/cand_tab_noselect.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/tab_press" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/tab_no_select" />
+</selector>
diff --git a/res/drawable-hdpi/cand_up.png b/res/drawable-hdpi/cand_up.png
index ce8b563..5774597 100644
--- a/res/drawable-hdpi/cand_up.png
+++ b/res/drawable-hdpi/cand_up.png
Binary files differ
diff --git a/res/drawable-hdpi/cand_up_press.png b/res/drawable-hdpi/cand_up_press.png
index cedbc9f..34a7979 100644
--- a/res/drawable-hdpi/cand_up_press.png
+++ b/res/drawable-hdpi/cand_up_press.png
Binary files differ
diff --git a/res/drawable-hdpi/candidate.png b/res/drawable-hdpi/candidate.png
new file mode 100644
index 0000000..e8f8f3f
--- /dev/null
+++ b/res/drawable-hdpi/candidate.png
Binary files differ
diff --git a/res/drawable-hdpi/candidate_top.9.png b/res/drawable-hdpi/candidate_top.9.png
new file mode 100644
index 0000000..fb6018f
--- /dev/null
+++ b/res/drawable-hdpi/candidate_top.9.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha0.png b/res/drawable-hdpi/key_12key_alpha0.png
index e3360d7..6b93bd0 100644
--- a/res/drawable-hdpi/key_12key_alpha0.png
+++ b/res/drawable-hdpi/key_12key_alpha0.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha0_b.png b/res/drawable-hdpi/key_12key_alpha0_b.png
index 2392459..2b0032f 100644
--- a/res/drawable-hdpi/key_12key_alpha0_b.png
+++ b/res/drawable-hdpi/key_12key_alpha0_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha1.png b/res/drawable-hdpi/key_12key_alpha1.png
index 559a0d5..1e3a2a4 100644
--- a/res/drawable-hdpi/key_12key_alpha1.png
+++ b/res/drawable-hdpi/key_12key_alpha1.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha1_b.png b/res/drawable-hdpi/key_12key_alpha1_b.png
index af2466e..4ac7bd3 100644
--- a/res/drawable-hdpi/key_12key_alpha1_b.png
+++ b/res/drawable-hdpi/key_12key_alpha1_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha2.png b/res/drawable-hdpi/key_12key_alpha2.png
index 970c4e4..3e37d05 100644
--- a/res/drawable-hdpi/key_12key_alpha2.png
+++ b/res/drawable-hdpi/key_12key_alpha2.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha2_b.png b/res/drawable-hdpi/key_12key_alpha2_b.png
index 2dd2897..2a23205 100644
--- a/res/drawable-hdpi/key_12key_alpha2_b.png
+++ b/res/drawable-hdpi/key_12key_alpha2_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha3.png b/res/drawable-hdpi/key_12key_alpha3.png
index c4c031f..e6212f0 100644
--- a/res/drawable-hdpi/key_12key_alpha3.png
+++ b/res/drawable-hdpi/key_12key_alpha3.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha3_b.png b/res/drawable-hdpi/key_12key_alpha3_b.png
index 2c12a40..51eefdf 100644
--- a/res/drawable-hdpi/key_12key_alpha3_b.png
+++ b/res/drawable-hdpi/key_12key_alpha3_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha4.png b/res/drawable-hdpi/key_12key_alpha4.png
index cd4d00c..60faf68 100644
--- a/res/drawable-hdpi/key_12key_alpha4.png
+++ b/res/drawable-hdpi/key_12key_alpha4.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha4_b.png b/res/drawable-hdpi/key_12key_alpha4_b.png
index 5b98435..b125b17 100644
--- a/res/drawable-hdpi/key_12key_alpha4_b.png
+++ b/res/drawable-hdpi/key_12key_alpha4_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha5.png b/res/drawable-hdpi/key_12key_alpha5.png
index 9f0e92b..3a597ca 100644
--- a/res/drawable-hdpi/key_12key_alpha5.png
+++ b/res/drawable-hdpi/key_12key_alpha5.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha5_b.png b/res/drawable-hdpi/key_12key_alpha5_b.png
index f214550..27d1bd9 100644
--- a/res/drawable-hdpi/key_12key_alpha5_b.png
+++ b/res/drawable-hdpi/key_12key_alpha5_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha6.png b/res/drawable-hdpi/key_12key_alpha6.png
index 10d970b..65cb606 100644
--- a/res/drawable-hdpi/key_12key_alpha6.png
+++ b/res/drawable-hdpi/key_12key_alpha6.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha6_b.png b/res/drawable-hdpi/key_12key_alpha6_b.png
index d3beae0..8a9b47f 100644
--- a/res/drawable-hdpi/key_12key_alpha6_b.png
+++ b/res/drawable-hdpi/key_12key_alpha6_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha7.png b/res/drawable-hdpi/key_12key_alpha7.png
index cbe3cc1..50eed41 100644
--- a/res/drawable-hdpi/key_12key_alpha7.png
+++ b/res/drawable-hdpi/key_12key_alpha7.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha7_b.png b/res/drawable-hdpi/key_12key_alpha7_b.png
index 6584b60..2de0fc3 100644
--- a/res/drawable-hdpi/key_12key_alpha7_b.png
+++ b/res/drawable-hdpi/key_12key_alpha7_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha8.png b/res/drawable-hdpi/key_12key_alpha8.png
index 793c005..a953908 100644
--- a/res/drawable-hdpi/key_12key_alpha8.png
+++ b/res/drawable-hdpi/key_12key_alpha8.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha8_b.png b/res/drawable-hdpi/key_12key_alpha8_b.png
index f8eed53..357c51d 100644
--- a/res/drawable-hdpi/key_12key_alpha8_b.png
+++ b/res/drawable-hdpi/key_12key_alpha8_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha9.png b/res/drawable-hdpi/key_12key_alpha9.png
index afb0d92..dd680c5 100644
--- a/res/drawable-hdpi/key_12key_alpha9.png
+++ b/res/drawable-hdpi/key_12key_alpha9.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_alpha9_b.png b/res/drawable-hdpi/key_12key_alpha9_b.png
index 7bdf491..1bdc3bc 100644
--- a/res/drawable-hdpi/key_12key_alpha9_b.png
+++ b/res/drawable-hdpi/key_12key_alpha9_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_caps.png b/res/drawable-hdpi/key_12key_caps.png
index a4f2885..1072b52 100644
--- a/res/drawable-hdpi/key_12key_caps.png
+++ b/res/drawable-hdpi/key_12key_caps.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_caps_b.png b/res/drawable-hdpi/key_12key_caps_b.png
index a4922e5..1072b52 100644
--- a/res/drawable-hdpi/key_12key_caps_b.png
+++ b/res/drawable-hdpi/key_12key_caps_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_dakuten.png b/res/drawable-hdpi/key_12key_dakuten.png
index 6bbf010..03d71da 100644
--- a/res/drawable-hdpi/key_12key_dakuten.png
+++ b/res/drawable-hdpi/key_12key_dakuten.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_dakuten_b.png b/res/drawable-hdpi/key_12key_dakuten_b.png
index d6e7505..dbc5224 100644
--- a/res/drawable-hdpi/key_12key_dakuten_b.png
+++ b/res/drawable-hdpi/key_12key_dakuten_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_del.png b/res/drawable-hdpi/key_12key_del.png
deleted file mode 100644
index fda82fa..0000000
--- a/res/drawable-hdpi/key_12key_del.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_del_b.png b/res/drawable-hdpi/key_12key_del_b.png
deleted file mode 100644
index e93f2e0..0000000
--- a/res/drawable-hdpi/key_12key_del_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_del_b_landscape.png b/res/drawable-hdpi/key_12key_del_b_landscape.png
deleted file mode 100644
index e183c93..0000000
--- a/res/drawable-hdpi/key_12key_del_b_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_del_landscape.png b/res/drawable-hdpi/key_12key_del_landscape.png
deleted file mode 100644
index b227fd4..0000000
--- a/res/drawable-hdpi/key_12key_del_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_eisukana.png b/res/drawable-hdpi/key_12key_eisukana.png
index 0cb9637..a025bcf 100644
--- a/res/drawable-hdpi/key_12key_eisukana.png
+++ b/res/drawable-hdpi/key_12key_eisukana.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_eisukana_b.png b/res/drawable-hdpi/key_12key_eisukana_b.png
index d6d8d30..5e84935 100644
--- a/res/drawable-hdpi/key_12key_eisukana_b.png
+++ b/res/drawable-hdpi/key_12key_eisukana_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter.png b/res/drawable-hdpi/key_12key_enter.png
deleted file mode 100644
index 4dae5b6..0000000
--- a/res/drawable-hdpi/key_12key_enter.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_b.png b/res/drawable-hdpi/key_12key_enter_b.png
deleted file mode 100644
index 6899036..0000000
--- a/res/drawable-hdpi/key_12key_enter_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_jp.png b/res/drawable-hdpi/key_12key_enter_jp.png
deleted file mode 100644
index 59ccc07..0000000
--- a/res/drawable-hdpi/key_12key_enter_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_jp_b.png b/res/drawable-hdpi/key_12key_enter_jp_b.png
deleted file mode 100644
index 3bb83f4..0000000
--- a/res/drawable-hdpi/key_12key_enter_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_landscape.png b/res/drawable-hdpi/key_12key_enter_landscape.png
deleted file mode 100644
index 9bf47ab..0000000
--- a/res/drawable-hdpi/key_12key_enter_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_landscape_b.png b/res/drawable-hdpi/key_12key_enter_landscape_b.png
deleted file mode 100644
index 98b2d99..0000000
--- a/res/drawable-hdpi/key_12key_enter_landscape_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_landscape_jp.png b/res/drawable-hdpi/key_12key_enter_landscape_jp.png
deleted file mode 100644
index fd98c6b..0000000
--- a/res/drawable-hdpi/key_12key_enter_landscape_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_enter_landscape_jp_b.png b/res/drawable-hdpi/key_12key_enter_landscape_jp_b.png
deleted file mode 100644
index af60064..0000000
--- a/res/drawable-hdpi/key_12key_enter_landscape_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana0.png b/res/drawable-hdpi/key_12key_hiragana0.png
index eb25b1c..ee91793 100644
--- a/res/drawable-hdpi/key_12key_hiragana0.png
+++ b/res/drawable-hdpi/key_12key_hiragana0.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana0_b.png b/res/drawable-hdpi/key_12key_hiragana0_b.png
index 2144788..87d2d46 100644
--- a/res/drawable-hdpi/key_12key_hiragana0_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana0_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana1.png b/res/drawable-hdpi/key_12key_hiragana1.png
index 32b51fa..c9dc92a 100644
--- a/res/drawable-hdpi/key_12key_hiragana1.png
+++ b/res/drawable-hdpi/key_12key_hiragana1.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana1_b.png b/res/drawable-hdpi/key_12key_hiragana1_b.png
index f5f21f0..8e4ed36 100644
--- a/res/drawable-hdpi/key_12key_hiragana1_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana1_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana2.png b/res/drawable-hdpi/key_12key_hiragana2.png
index f9ba3c6..ef4d7b6 100644
--- a/res/drawable-hdpi/key_12key_hiragana2.png
+++ b/res/drawable-hdpi/key_12key_hiragana2.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana2_b.png b/res/drawable-hdpi/key_12key_hiragana2_b.png
index d12cb7c..ba9713c 100644
--- a/res/drawable-hdpi/key_12key_hiragana2_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana2_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana3.png b/res/drawable-hdpi/key_12key_hiragana3.png
index 0b68d99..ae65c10 100644
--- a/res/drawable-hdpi/key_12key_hiragana3.png
+++ b/res/drawable-hdpi/key_12key_hiragana3.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana3_b.png b/res/drawable-hdpi/key_12key_hiragana3_b.png
index 13f7c56..bc212fc 100644
--- a/res/drawable-hdpi/key_12key_hiragana3_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana3_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana4.png b/res/drawable-hdpi/key_12key_hiragana4.png
index 5e8a855..c745d54 100644
--- a/res/drawable-hdpi/key_12key_hiragana4.png
+++ b/res/drawable-hdpi/key_12key_hiragana4.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana4_b.png b/res/drawable-hdpi/key_12key_hiragana4_b.png
index 3b9e352..b448f65 100644
--- a/res/drawable-hdpi/key_12key_hiragana4_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana4_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana5.png b/res/drawable-hdpi/key_12key_hiragana5.png
index 8c9361e..05d944b 100644
--- a/res/drawable-hdpi/key_12key_hiragana5.png
+++ b/res/drawable-hdpi/key_12key_hiragana5.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana5_b.png b/res/drawable-hdpi/key_12key_hiragana5_b.png
index 616b43d..118c56c 100644
--- a/res/drawable-hdpi/key_12key_hiragana5_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana5_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana6.png b/res/drawable-hdpi/key_12key_hiragana6.png
index 4912b4f..4447e2b 100644
--- a/res/drawable-hdpi/key_12key_hiragana6.png
+++ b/res/drawable-hdpi/key_12key_hiragana6.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana6_b.png b/res/drawable-hdpi/key_12key_hiragana6_b.png
index e92957a..5fcdfc2 100644
--- a/res/drawable-hdpi/key_12key_hiragana6_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana6_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana7.png b/res/drawable-hdpi/key_12key_hiragana7.png
index dbc5bc3..bc8d5e9 100644
--- a/res/drawable-hdpi/key_12key_hiragana7.png
+++ b/res/drawable-hdpi/key_12key_hiragana7.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana7_b.png b/res/drawable-hdpi/key_12key_hiragana7_b.png
index 2eab3f6..fff76cb 100644
--- a/res/drawable-hdpi/key_12key_hiragana7_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana7_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana8.png b/res/drawable-hdpi/key_12key_hiragana8.png
index 63e02c9..52c9e3b 100644
--- a/res/drawable-hdpi/key_12key_hiragana8.png
+++ b/res/drawable-hdpi/key_12key_hiragana8.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana8_b.png b/res/drawable-hdpi/key_12key_hiragana8_b.png
index 9389ced..1da4c2e 100644
--- a/res/drawable-hdpi/key_12key_hiragana8_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana8_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana9.png b/res/drawable-hdpi/key_12key_hiragana9.png
index 76fcf40..307509d 100644
--- a/res/drawable-hdpi/key_12key_hiragana9.png
+++ b/res/drawable-hdpi/key_12key_hiragana9.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_hiragana9_b.png b/res/drawable-hdpi/key_12key_hiragana9_b.png
index 15471e6..a09572a 100644
--- a/res/drawable-hdpi/key_12key_hiragana9_b.png
+++ b/res/drawable-hdpi/key_12key_hiragana9_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_left.png b/res/drawable-hdpi/key_12key_left.png
index 8adfc19..b04d095 100644
--- a/res/drawable-hdpi/key_12key_left.png
+++ b/res/drawable-hdpi/key_12key_left.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_left_b.png b/res/drawable-hdpi/key_12key_left_b.png
index 767f2d4..4df6446 100644
--- a/res/drawable-hdpi/key_12key_left_b.png
+++ b/res/drawable-hdpi/key_12key_left_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_alpha.png b/res/drawable-hdpi/key_12key_mode_full_alpha.png
deleted file mode 100644
index c875bf5..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_alpha_landscape.png b/res/drawable-hdpi/key_12key_mode_full_alpha_landscape.png
deleted file mode 100644
index 927d56b..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_alpha_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_kata.png b/res/drawable-hdpi/key_12key_mode_full_kata.png
deleted file mode 100644
index 6786f1c..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_kata_landscape.png b/res/drawable-hdpi/key_12key_mode_full_kata_landscape.png
deleted file mode 100644
index edd502c..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_kata_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_num.png b/res/drawable-hdpi/key_12key_mode_full_num.png
deleted file mode 100644
index d0699b5..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_full_num_landscape.png b/res/drawable-hdpi/key_12key_mode_full_num_landscape.png
deleted file mode 100644
index 7e286c5..0000000
--- a/res/drawable-hdpi/key_12key_mode_full_num_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_alpha.png b/res/drawable-hdpi/key_12key_mode_half_alpha.png
deleted file mode 100644
index 3f6d081..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_alpha_landscape.png b/res/drawable-hdpi/key_12key_mode_half_alpha_landscape.png
deleted file mode 100644
index c6f5245..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_alpha_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_kata.png b/res/drawable-hdpi/key_12key_mode_half_kata.png
deleted file mode 100644
index 296731a..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_kata_landscape.png b/res/drawable-hdpi/key_12key_mode_half_kata_landscape.png
deleted file mode 100644
index c8acb6d..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_kata_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_num.png b/res/drawable-hdpi/key_12key_mode_half_num.png
deleted file mode 100644
index 6172775..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_half_num_landscape.png b/res/drawable-hdpi/key_12key_mode_half_num_landscape.png
deleted file mode 100644
index fb2f61a..0000000
--- a/res/drawable-hdpi/key_12key_mode_half_num_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_hira.png b/res/drawable-hdpi/key_12key_mode_hira.png
deleted file mode 100644
index ea62e79..0000000
--- a/res/drawable-hdpi/key_12key_mode_hira.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_mode_hira_landscape.png b/res/drawable-hdpi/key_12key_mode_hira_landscape.png
deleted file mode 100644
index 9fd9d08..0000000
--- a/res/drawable-hdpi/key_12key_mode_hira_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_period_comma.png b/res/drawable-hdpi/key_12key_period_comma.png
index 8a4c7fc..71c2edc 100644
--- a/res/drawable-hdpi/key_12key_period_comma.png
+++ b/res/drawable-hdpi/key_12key_period_comma.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_period_comma_b.png b/res/drawable-hdpi/key_12key_period_comma_b.png
index 29fc223..ae0b110 100644
--- a/res/drawable-hdpi/key_12key_period_comma_b.png
+++ b/res/drawable-hdpi/key_12key_period_comma_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_pict_sym.png b/res/drawable-hdpi/key_12key_pict_sym.png
index 1121b98..a3f8105 100644
--- a/res/drawable-hdpi/key_12key_pict_sym.png
+++ b/res/drawable-hdpi/key_12key_pict_sym.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_reverse.png b/res/drawable-hdpi/key_12key_reverse.png
index f1e18c3..27d4635 100644
--- a/res/drawable-hdpi/key_12key_reverse.png
+++ b/res/drawable-hdpi/key_12key_reverse.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_reverse_b.png b/res/drawable-hdpi/key_12key_reverse_b.png
index 184c694..06bc8e9 100644
--- a/res/drawable-hdpi/key_12key_reverse_b.png
+++ b/res/drawable-hdpi/key_12key_reverse_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_right.png b/res/drawable-hdpi/key_12key_right.png
index 8cb8ee9..fdbb7d8 100644
--- a/res/drawable-hdpi/key_12key_right.png
+++ b/res/drawable-hdpi/key_12key_right.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_right_b.png b/res/drawable-hdpi/key_12key_right_b.png
index 61402c5..d0b2c75 100644
--- a/res/drawable-hdpi/key_12key_right_b.png
+++ b/res/drawable-hdpi/key_12key_right_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_space.png b/res/drawable-hdpi/key_12key_space.png
index 5ddbc1e..d1fd1b4 100644
--- a/res/drawable-hdpi/key_12key_space.png
+++ b/res/drawable-hdpi/key_12key_space.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_space_b.png b/res/drawable-hdpi/key_12key_space_b.png
index d51f357..729f558 100644
--- a/res/drawable-hdpi/key_12key_space_b.png
+++ b/res/drawable-hdpi/key_12key_space_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_space_jp.png b/res/drawable-hdpi/key_12key_space_jp.png
index 22932e5..cd05723 100644
--- a/res/drawable-hdpi/key_12key_space_jp.png
+++ b/res/drawable-hdpi/key_12key_space_jp.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_space_jp_b.png b/res/drawable-hdpi/key_12key_space_jp_b.png
index 54e8b19..95ed7ab 100644
--- a/res/drawable-hdpi/key_12key_space_jp_b.png
+++ b/res/drawable-hdpi/key_12key_space_jp_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_ten.png b/res/drawable-hdpi/key_12key_ten.png
index 62f6fc4..947686f 100644
--- a/res/drawable-hdpi/key_12key_ten.png
+++ b/res/drawable-hdpi/key_12key_ten.png
Binary files differ
diff --git a/res/drawable-hdpi/key_12key_ten_b.png b/res/drawable-hdpi/key_12key_ten_b.png
index a6a4d37..c8c2e0c 100644
--- a/res/drawable-hdpi/key_12key_ten_b.png
+++ b/res/drawable-hdpi/key_12key_ten_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_del.png b/res/drawable-hdpi/key_del.png
new file mode 100644
index 0000000..0b1bdf6
--- /dev/null
+++ b/res/drawable-hdpi/key_del.png
Binary files differ
diff --git a/res/drawable-hdpi/key_del_b.png b/res/drawable-hdpi/key_del_b.png
new file mode 100644
index 0000000..efa0204
--- /dev/null
+++ b/res/drawable-hdpi/key_del_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_enter.png b/res/drawable-hdpi/key_enter.png
new file mode 100644
index 0000000..87f37c5
--- /dev/null
+++ b/res/drawable-hdpi/key_enter.png
Binary files differ
diff --git a/res/drawable-hdpi/key_enter_b.png b/res/drawable-hdpi/key_enter_b.png
new file mode 100644
index 0000000..37b6b01
--- /dev/null
+++ b/res/drawable-hdpi/key_enter_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_change_b.png b/res/drawable-hdpi/key_mode_change_b.png
index 24abfd4..f8dda2a 100644
--- a/res/drawable-hdpi/key_mode_change_b.png
+++ b/res/drawable-hdpi/key_mode_change_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_full_alpha.png b/res/drawable-hdpi/key_mode_full_alpha.png
new file mode 100644
index 0000000..cf263ef
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_full_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_full_kata.png b/res/drawable-hdpi/key_mode_full_kata.png
new file mode 100644
index 0000000..400e2ca
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_full_kata.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_full_num.png b/res/drawable-hdpi/key_mode_full_num.png
new file mode 100644
index 0000000..8e97c4b
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_full_num.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_half_alpha.png b/res/drawable-hdpi/key_mode_half_alpha.png
new file mode 100644
index 0000000..440a9d3
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_half_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_half_kata.png b/res/drawable-hdpi/key_mode_half_kata.png
new file mode 100644
index 0000000..8cff2db
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_half_kata.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_half_num.png b/res/drawable-hdpi/key_mode_half_num.png
new file mode 100644
index 0000000..2e34935
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_half_num.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_hira.png b/res/drawable-hdpi/key_mode_hira.png
new file mode 100644
index 0000000..3de2cf2
--- /dev/null
+++ b/res/drawable-hdpi/key_mode_hira.png
Binary files differ
diff --git a/res/drawable-hdpi/key_mode_panel_kbd_12key_b.png b/res/drawable-hdpi/key_mode_panel_kbd_12key_b.png
index 7b0f7f0..2ed8f3d 100644
--- a/res/drawable-hdpi/key_mode_panel_kbd_12key_b.png
+++ b/res/drawable-hdpi/key_mode_panel_kbd_12key_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_pict_sym_b.png b/res/drawable-hdpi/key_pict_sym_b.png
new file mode 100644
index 0000000..e528ef9
--- /dev/null
+++ b/res/drawable-hdpi/key_pict_sym_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_del.png b/res/drawable-hdpi/key_qwerty_del.png
deleted file mode 100644
index c02e66c..0000000
--- a/res/drawable-hdpi/key_qwerty_del.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_del_b.png b/res/drawable-hdpi/key_qwerty_del_b.png
deleted file mode 100644
index df084c1..0000000
--- a/res/drawable-hdpi/key_qwerty_del_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_del_b_landscape.png b/res/drawable-hdpi/key_qwerty_del_b_landscape.png
deleted file mode 100644
index db71256..0000000
--- a/res/drawable-hdpi/key_qwerty_del_b_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_del_landscape.png b/res/drawable-hdpi/key_qwerty_del_landscape.png
deleted file mode 100644
index 2855634..0000000
--- a/res/drawable-hdpi/key_qwerty_del_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter.png b/res/drawable-hdpi/key_qwerty_enter.png
deleted file mode 100644
index 6243499..0000000
--- a/res/drawable-hdpi/key_qwerty_enter.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_b.png b/res/drawable-hdpi/key_qwerty_enter_b.png
deleted file mode 100644
index 2d38865..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_jp.png b/res/drawable-hdpi/key_qwerty_enter_jp.png
deleted file mode 100644
index 54c82b5..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_jp_b.png b/res/drawable-hdpi/key_qwerty_enter_jp_b.png
deleted file mode 100644
index b2fad3e..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_landscape.png b/res/drawable-hdpi/key_qwerty_enter_landscape.png
deleted file mode 100644
index fd0231c..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_landscape_b.png b/res/drawable-hdpi/key_qwerty_enter_landscape_b.png
deleted file mode 100644
index 574c896..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_landscape_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_landscape_jp.png b/res/drawable-hdpi/key_qwerty_enter_landscape_jp.png
deleted file mode 100644
index bb9d835..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_landscape_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_enter_landscape_jp_b.png b/res/drawable-hdpi/key_qwerty_enter_landscape_jp_b.png
deleted file mode 100644
index a43e717..0000000
--- a/res/drawable-hdpi/key_qwerty_enter_landscape_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_left.png b/res/drawable-hdpi/key_qwerty_left.png
new file mode 100644
index 0000000..1e6de0e
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_left.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_left_b.png b/res/drawable-hdpi/key_qwerty_left_b.png
new file mode 100644
index 0000000..1ef2ff4
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_left_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_alpha.png b/res/drawable-hdpi/key_qwerty_mode_full_alpha.png
deleted file mode 100644
index 004cd36..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_alpha_landscape.png b/res/drawable-hdpi/key_qwerty_mode_full_alpha_landscape.png
deleted file mode 100644
index a7152ad..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_alpha_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_kata.png b/res/drawable-hdpi/key_qwerty_mode_full_kata.png
deleted file mode 100644
index 1a37099..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_kata_landscape.png b/res/drawable-hdpi/key_qwerty_mode_full_kata_landscape.png
deleted file mode 100644
index d3a537e..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_kata_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_num.png b/res/drawable-hdpi/key_qwerty_mode_full_num.png
deleted file mode 100644
index 442b93d..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_full_num_landscape.png b/res/drawable-hdpi/key_qwerty_mode_full_num_landscape.png
deleted file mode 100644
index b0e530e..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_full_num_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_alpha.png b/res/drawable-hdpi/key_qwerty_mode_half_alpha.png
deleted file mode 100644
index 7d58689..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_alpha_landscape.png b/res/drawable-hdpi/key_qwerty_mode_half_alpha_landscape.png
deleted file mode 100644
index f87d42b..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_alpha_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_kata.png b/res/drawable-hdpi/key_qwerty_mode_half_kata.png
deleted file mode 100644
index 4c219a3..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_kata_landscape.png b/res/drawable-hdpi/key_qwerty_mode_half_kata_landscape.png
deleted file mode 100644
index 05eee0a..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_kata_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_num.png b/res/drawable-hdpi/key_qwerty_mode_half_num.png
deleted file mode 100644
index a181e33..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_half_num_landscape.png b/res/drawable-hdpi/key_qwerty_mode_half_num_landscape.png
deleted file mode 100644
index 2aec40b..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_half_num_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_hira.png b/res/drawable-hdpi/key_qwerty_mode_hira.png
deleted file mode 100644
index 077d7da..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_hira.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_mode_hira_landscape.png b/res/drawable-hdpi/key_qwerty_mode_hira_landscape.png
deleted file mode 100644
index 5d3fd29..0000000
--- a/res/drawable-hdpi/key_qwerty_mode_hira_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_pict_sym.png b/res/drawable-hdpi/key_qwerty_pict_sym.png
index 276fc9d..befaecb 100644
--- a/res/drawable-hdpi/key_qwerty_pict_sym.png
+++ b/res/drawable-hdpi/key_qwerty_pict_sym.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_pict_sym_b.png b/res/drawable-hdpi/key_qwerty_pict_sym_b.png
deleted file mode 100644
index 43472f2..0000000
--- a/res/drawable-hdpi/key_qwerty_pict_sym_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_return.png b/res/drawable-hdpi/key_qwerty_return.png
new file mode 100644
index 0000000..99fa13c
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_return.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_right.png b/res/drawable-hdpi/key_qwerty_right.png
new file mode 100644
index 0000000..0bf054c
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_right.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_right_b.png b/res/drawable-hdpi/key_qwerty_right_b.png
new file mode 100644
index 0000000..2a9d807
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_right_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_shift_b.png b/res/drawable-hdpi/key_qwerty_shift_b.png
index 73cbec8..8d9d8ed 100644
--- a/res/drawable-hdpi/key_qwerty_shift_b.png
+++ b/res/drawable-hdpi/key_qwerty_shift_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_shift_locked.png b/res/drawable-hdpi/key_qwerty_shift_locked.png
new file mode 100644
index 0000000..930a799
--- /dev/null
+++ b/res/drawable-hdpi/key_qwerty_shift_locked.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_space.png b/res/drawable-hdpi/key_qwerty_space.png
index a9bbdbe..74c4f3d 100644
--- a/res/drawable-hdpi/key_qwerty_space.png
+++ b/res/drawable-hdpi/key_qwerty_space.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_space_b.png b/res/drawable-hdpi/key_qwerty_space_b.png
index 0cbaf57..b0b9acf 100644
--- a/res/drawable-hdpi/key_qwerty_space_b.png
+++ b/res/drawable-hdpi/key_qwerty_space_b.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_space_conv.png b/res/drawable-hdpi/key_qwerty_space_conv.png
index e120c85..e66a564 100644
--- a/res/drawable-hdpi/key_qwerty_space_conv.png
+++ b/res/drawable-hdpi/key_qwerty_space_conv.png
Binary files differ
diff --git a/res/drawable-hdpi/key_qwerty_space_conv_b.png b/res/drawable-hdpi/key_qwerty_space_conv_b.png
index f79e545..30f65f0 100644
--- a/res/drawable-hdpi/key_qwerty_space_conv_b.png
+++ b/res/drawable-hdpi/key_qwerty_space_conv_b.png
Binary files differ
diff --git a/res/drawable-hdpi/keybg_ice_bg.png b/res/drawable-hdpi/keybg_ice_bg.png
new file mode 100644
index 0000000..3b5f87a
--- /dev/null
+++ b/res/drawable-hdpi/keybg_ice_bg.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_background.png b/res/drawable-hdpi/keyboard_background.png
new file mode 100644
index 0000000..8b8bb8c
--- /dev/null
+++ b/res/drawable-hdpi/keyboard_background.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_key_feedback_background.9.png b/res/drawable-hdpi/keyboard_key_feedback_background.9.png
new file mode 100644
index 0000000..af33c73
--- /dev/null
+++ b/res/drawable-hdpi/keyboard_key_feedback_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png b/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png
new file mode 100644
index 0000000..428fa90
--- /dev/null
+++ b/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_popup_panel_background.9.png b/res/drawable-hdpi/keyboard_popup_panel_background.9.png
new file mode 100644
index 0000000..36d75df
--- /dev/null
+++ b/res/drawable-hdpi/keyboard_popup_panel_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/tab_no_select.9.png b/res/drawable-hdpi/tab_no_select.9.png
new file mode 100644
index 0000000..d5f4ba4
--- /dev/null
+++ b/res/drawable-hdpi/tab_no_select.9.png
Binary files differ
diff --git a/res/drawable-hdpi/tab_press.9.png b/res/drawable-hdpi/tab_press.9.png
new file mode 100644
index 0000000..4eeda4d
--- /dev/null
+++ b/res/drawable-hdpi/tab_press.9.png
Binary files differ
diff --git a/res/drawable-hdpi/tab_select.9.png b/res/drawable-hdpi/tab_select.9.png
new file mode 100644
index 0000000..20f9b5f
--- /dev/null
+++ b/res/drawable-hdpi/tab_select.9.png
Binary files differ
diff --git a/res/drawable-hdpi/tutorial_12key_enter.png b/res/drawable-hdpi/tutorial_12key_enter.png
index 283883f..a30a8f3 100644
--- a/res/drawable-hdpi/tutorial_12key_enter.png
+++ b/res/drawable-hdpi/tutorial_12key_enter.png
Binary files differ
diff --git a/res/drawable-hdpi/tutorial_12key_mode.png b/res/drawable-hdpi/tutorial_12key_mode.png
index 05066f9..d5cb55a 100644
--- a/res/drawable-hdpi/tutorial_12key_mode.png
+++ b/res/drawable-hdpi/tutorial_12key_mode.png
Binary files differ
diff --git a/res/drawable-ja/tutorial_12key_mode.png b/res/drawable-ja/tutorial_12key_mode.png
index d287c13..15d9a4c 100644
--- a/res/drawable-ja/tutorial_12key_mode.png
+++ b/res/drawable-ja/tutorial_12key_mode.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/cand_tab.xml b/res/drawable-sw768dp-hdpi/cand_tab.xml
new file mode 100644
index 0000000..aed0a42
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/cand_tab.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/tab_press" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/tab_select" />
+</selector>
diff --git a/res/drawable-sw768dp-hdpi/cand_tab_noselect.xml b/res/drawable-sw768dp-hdpi/cand_tab_noselect.xml
new file mode 100644
index 0000000..761da6e
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/cand_tab_noselect.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/tab_press" />
+ <item android:state_pressed="false"
+ android:drawable="@drawable/tab_no_select" />
+</selector>
diff --git a/res/drawable-sw768dp-hdpi/key_del.png b/res/drawable-sw768dp-hdpi/key_del.png
new file mode 100644
index 0000000..7c12f79
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/key_del.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/key_qwerty_shift.png b/res/drawable-sw768dp-hdpi/key_qwerty_shift.png
new file mode 100644
index 0000000..ade2134
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/key_qwerty_shift.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/key_qwerty_shift_locked.png b/res/drawable-sw768dp-hdpi/key_qwerty_shift_locked.png
new file mode 100644
index 0000000..9e9b999
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/key_qwerty_shift_locked.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/tab_no_select.9.png b/res/drawable-sw768dp-hdpi/tab_no_select.9.png
new file mode 100644
index 0000000..d1179e4
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/tab_no_select.9.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/tab_press.9.png b/res/drawable-sw768dp-hdpi/tab_press.9.png
new file mode 100644
index 0000000..2f491b1
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/tab_press.9.png
Binary files differ
diff --git a/res/drawable-sw768dp-hdpi/tab_select.9.png b/res/drawable-sw768dp-hdpi/tab_select.9.png
new file mode 100644
index 0000000..de538cc
--- /dev/null
+++ b/res/drawable-sw768dp-hdpi/tab_select.9.png
Binary files differ
diff --git a/res/drawable-sw768dp-land-hdpi/key_qwerty_shift.png b/res/drawable-sw768dp-land-hdpi/key_qwerty_shift.png
new file mode 100644
index 0000000..906b713
--- /dev/null
+++ b/res/drawable-sw768dp-land-hdpi/key_qwerty_shift.png
Binary files differ
diff --git a/res/drawable-sw768dp-land-hdpi/key_qwerty_shift_locked.png b/res/drawable-sw768dp-land-hdpi/key_qwerty_shift_locked.png
new file mode 100644
index 0000000..376f584
--- /dev/null
+++ b/res/drawable-sw768dp-land-hdpi/key_qwerty_shift_locked.png
Binary files differ
diff --git a/res/drawable-sw768dp/btn_keyboard_key.xml b/res/drawable-sw768dp/btn_keyboard_key.xml
new file mode 100644
index 0000000..2708442
--- /dev/null
+++ b/res/drawable-sw768dp/btn_keyboard_key.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_light_pressed_holo" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal" />
+
+</selector>
diff --git a/res/drawable-sw768dp/btn_keyboard_key_2nd.xml b/res/drawable-sw768dp/btn_keyboard_key_2nd.xml
new file mode 100644
index 0000000..e9b116e
--- /dev/null
+++ b/res/drawable-sw768dp/btn_keyboard_key_2nd.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <item android:state_checkable="true" android:state_checked="true"
+ android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_dark_pressed_holo" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/btn_keyboard_key_normal_on_2nd" />
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_dark_pressed_holo" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal_2nd" />
+
+</selector>
diff --git a/res/drawable-sw768dp/btn_keyboard_key_normal.9.png b/res/drawable-sw768dp/btn_keyboard_key_normal.9.png
new file mode 100644
index 0000000..cae8062
--- /dev/null
+++ b/res/drawable-sw768dp/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-sw768dp/cand_back_normal.9.png b/res/drawable-sw768dp/cand_back_normal.9.png
new file mode 100644
index 0000000..523e905
--- /dev/null
+++ b/res/drawable-sw768dp/cand_back_normal.9.png
Binary files differ
diff --git a/res/drawable-sw768dp/cand_back_pressed.9.png b/res/drawable-sw768dp/cand_back_pressed.9.png
new file mode 100644
index 0000000..2c4f82c
--- /dev/null
+++ b/res/drawable-sw768dp/cand_back_pressed.9.png
Binary files differ
diff --git a/res/drawable-sw768dp/key_mode_full_num.png b/res/drawable-sw768dp/key_mode_full_num.png
new file mode 100644
index 0000000..4f7125b
--- /dev/null
+++ b/res/drawable-sw768dp/key_mode_full_num.png
Binary files differ
diff --git a/res/drawable-sw768dp/key_mode_half_alpha.png b/res/drawable-sw768dp/key_mode_half_alpha.png
new file mode 100644
index 0000000..c035b55
--- /dev/null
+++ b/res/drawable-sw768dp/key_mode_half_alpha.png
Binary files differ
diff --git a/res/drawable-sw768dp/key_mode_half_num.png b/res/drawable-sw768dp/key_mode_half_num.png
new file mode 100644
index 0000000..b709eed
--- /dev/null
+++ b/res/drawable-sw768dp/key_mode_half_num.png
Binary files differ
diff --git a/res/drawable-sw768dp/key_mode_hira.png b/res/drawable-sw768dp/key_mode_hira.png
new file mode 100644
index 0000000..7c9442f
--- /dev/null
+++ b/res/drawable-sw768dp/key_mode_hira.png
Binary files differ
diff --git a/res/drawable-sw768dp/keyboard_background.png b/res/drawable-sw768dp/keyboard_background.png
new file mode 100644
index 0000000..250d1e9
--- /dev/null
+++ b/res/drawable-sw768dp/keyboard_background.png
Binary files differ
diff --git a/res/drawable/btn_close.xml b/res/drawable/btn_close.xml
new file mode 100644
index 0000000..5af18f3
--- /dev/null
+++ b/res/drawable/btn_close.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item android:state_pressed="false"
+ android:drawable="@drawable/btn_close_normal" />
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_close_pressed" />
+
+</selector>
diff --git a/res/drawable/btn_close_normal.png b/res/drawable/btn_close_normal.png
new file mode 100644
index 0000000..06639c4
--- /dev/null
+++ b/res/drawable/btn_close_normal.png
Binary files differ
diff --git a/res/drawable/btn_close_pressed.png b/res/drawable/btn_close_pressed.png
new file mode 100644
index 0000000..3791da4
--- /dev/null
+++ b/res/drawable/btn_close_pressed.png
Binary files differ
diff --git a/res/drawable/btn_keyboard_key.xml b/res/drawable/btn_keyboard_key.xml
new file mode 100644
index 0000000..5b3b4b1
--- /dev/null
+++ b/res/drawable/btn_keyboard_key.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal" />
+
+</selector>
diff --git a/res/drawable/btn_keyboard_key_2nd.xml b/res/drawable/btn_keyboard_key_2nd.xml
new file mode 100644
index 0000000..8f3ff83
--- /dev/null
+++ b/res/drawable/btn_keyboard_key_2nd.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+
+ <item android:state_checkable="true" android:state_checked="true"
+ android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_on_2nd" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/btn_keyboard_key_normal_on_2nd" />
+
+ <!-- Normal keys -->
+
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_2nd" />
+ <item
+ android:drawable="@drawable/btn_keyboard_key_normal_2nd" />
+
+</selector>
diff --git a/res/drawable/cand_back.xml b/res/drawable/cand_back.xml
index a06d2b3..1049d58 100644
--- a/res/drawable/cand_back.xml
+++ b/res/drawable/cand_back.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,10 +14,11 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/cand_back_pressed" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/cand_back_focused" />
<item android:state_pressed="false"
android:drawable="@drawable/cand_back_normal" />
</selector>
diff --git a/res/drawable/cand_back_normal.9.png b/res/drawable/cand_back_normal.9.png
index 4ed524b..6b829f5 100644
--- a/res/drawable/cand_back_normal.9.png
+++ b/res/drawable/cand_back_normal.9.png
Binary files differ
diff --git a/res/drawable/cand_down.png b/res/drawable/cand_down.png
deleted file mode 100644
index e73aad2..0000000
--- a/res/drawable/cand_down.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/cand_down_press.png b/res/drawable/cand_down_press.png
deleted file mode 100644
index cb72e57..0000000
--- a/res/drawable/cand_down_press.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/cand_up.png b/res/drawable/cand_up.png
deleted file mode 100644
index 17b59f4..0000000
--- a/res/drawable/cand_up.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/cand_up_press.png b/res/drawable/cand_up_press.png
deleted file mode 100644
index e89d647..0000000
--- a/res/drawable/cand_up_press.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/candidate.png b/res/drawable/candidate.png
index e8f8f3f..a08b624 100644
--- a/res/drawable/candidate.png
+++ b/res/drawable/candidate.png
Binary files differ
diff --git a/res/drawable/candidate_top.9.png b/res/drawable/candidate_top.9.png
new file mode 100644
index 0000000..fb6018f
--- /dev/null
+++ b/res/drawable/candidate_top.9.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha0.png b/res/drawable/key_12key_alpha0.png
index af50aae..b410229 100644
--- a/res/drawable/key_12key_alpha0.png
+++ b/res/drawable/key_12key_alpha0.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha0_b.png b/res/drawable/key_12key_alpha0_b.png
index ee99d6c..412be11 100644
--- a/res/drawable/key_12key_alpha0_b.png
+++ b/res/drawable/key_12key_alpha0_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha1.png b/res/drawable/key_12key_alpha1.png
index ede30b2..a7f5a15 100644
--- a/res/drawable/key_12key_alpha1.png
+++ b/res/drawable/key_12key_alpha1.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha1_b.png b/res/drawable/key_12key_alpha1_b.png
index 430bec9..6ff54c6 100644
--- a/res/drawable/key_12key_alpha1_b.png
+++ b/res/drawable/key_12key_alpha1_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha2.png b/res/drawable/key_12key_alpha2.png
index 6c549fc..a26b135 100644
--- a/res/drawable/key_12key_alpha2.png
+++ b/res/drawable/key_12key_alpha2.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha2_b.png b/res/drawable/key_12key_alpha2_b.png
index 83f5924..914b3a3 100644
--- a/res/drawable/key_12key_alpha2_b.png
+++ b/res/drawable/key_12key_alpha2_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha3.png b/res/drawable/key_12key_alpha3.png
index 2690655..4f35c42 100644
--- a/res/drawable/key_12key_alpha3.png
+++ b/res/drawable/key_12key_alpha3.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha3_b.png b/res/drawable/key_12key_alpha3_b.png
index 7bd55a8..d1c0221 100644
--- a/res/drawable/key_12key_alpha3_b.png
+++ b/res/drawable/key_12key_alpha3_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha4.png b/res/drawable/key_12key_alpha4.png
index 6f0cfb8..296d379 100644
--- a/res/drawable/key_12key_alpha4.png
+++ b/res/drawable/key_12key_alpha4.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha4_b.png b/res/drawable/key_12key_alpha4_b.png
index 2c5a17c..b77e854 100644
--- a/res/drawable/key_12key_alpha4_b.png
+++ b/res/drawable/key_12key_alpha4_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha5.png b/res/drawable/key_12key_alpha5.png
index 232f4a4..375c2ad 100644
--- a/res/drawable/key_12key_alpha5.png
+++ b/res/drawable/key_12key_alpha5.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha5_b.png b/res/drawable/key_12key_alpha5_b.png
index 231b56a..d700050 100644
--- a/res/drawable/key_12key_alpha5_b.png
+++ b/res/drawable/key_12key_alpha5_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha6.png b/res/drawable/key_12key_alpha6.png
index 0455f97..e0112a7 100644
--- a/res/drawable/key_12key_alpha6.png
+++ b/res/drawable/key_12key_alpha6.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha6_b.png b/res/drawable/key_12key_alpha6_b.png
index 51fa129..7953ec9 100644
--- a/res/drawable/key_12key_alpha6_b.png
+++ b/res/drawable/key_12key_alpha6_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha7.png b/res/drawable/key_12key_alpha7.png
index 4409532..ed2bbff 100644
--- a/res/drawable/key_12key_alpha7.png
+++ b/res/drawable/key_12key_alpha7.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha7_b.png b/res/drawable/key_12key_alpha7_b.png
index 1d5d1e3..621a06e 100644
--- a/res/drawable/key_12key_alpha7_b.png
+++ b/res/drawable/key_12key_alpha7_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha8.png b/res/drawable/key_12key_alpha8.png
index 6cffeab..997dbc8 100644
--- a/res/drawable/key_12key_alpha8.png
+++ b/res/drawable/key_12key_alpha8.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha8_b.png b/res/drawable/key_12key_alpha8_b.png
index d077856..e565042 100644
--- a/res/drawable/key_12key_alpha8_b.png
+++ b/res/drawable/key_12key_alpha8_b.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha9.png b/res/drawable/key_12key_alpha9.png
index 7dd05f9..d87b8b8 100644
--- a/res/drawable/key_12key_alpha9.png
+++ b/res/drawable/key_12key_alpha9.png
Binary files differ
diff --git a/res/drawable/key_12key_alpha9_b.png b/res/drawable/key_12key_alpha9_b.png
index 1f7a23e..705d7a5 100644
--- a/res/drawable/key_12key_alpha9_b.png
+++ b/res/drawable/key_12key_alpha9_b.png
Binary files differ
diff --git a/res/drawable/key_12key_caps.png b/res/drawable/key_12key_caps.png
index d0c52c2..8ea679d 100644
--- a/res/drawable/key_12key_caps.png
+++ b/res/drawable/key_12key_caps.png
Binary files differ
diff --git a/res/drawable/key_12key_caps_b.png b/res/drawable/key_12key_caps_b.png
index 19b8d2d..8ea679d 100644
--- a/res/drawable/key_12key_caps_b.png
+++ b/res/drawable/key_12key_caps_b.png
Binary files differ
diff --git a/res/drawable/key_12key_dakuten.png b/res/drawable/key_12key_dakuten.png
index 8e979cc..74f0006 100644
--- a/res/drawable/key_12key_dakuten.png
+++ b/res/drawable/key_12key_dakuten.png
Binary files differ
diff --git a/res/drawable/key_12key_dakuten_b.png b/res/drawable/key_12key_dakuten_b.png
index 5b850bf..3f5888c 100644
--- a/res/drawable/key_12key_dakuten_b.png
+++ b/res/drawable/key_12key_dakuten_b.png
Binary files differ
diff --git a/res/drawable/key_12key_del.png b/res/drawable/key_12key_del.png
deleted file mode 100644
index 4aab087..0000000
--- a/res/drawable/key_12key_del.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_del_b.png b/res/drawable/key_12key_del_b.png
deleted file mode 100644
index ecc2dba..0000000
--- a/res/drawable/key_12key_del_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_eisukana.png b/res/drawable/key_12key_eisukana.png
index b28c9cd..ce46f19 100644
--- a/res/drawable/key_12key_eisukana.png
+++ b/res/drawable/key_12key_eisukana.png
Binary files differ
diff --git a/res/drawable/key_12key_eisukana_b.png b/res/drawable/key_12key_eisukana_b.png
index 805c5ea..ce46f19 100644
--- a/res/drawable/key_12key_eisukana_b.png
+++ b/res/drawable/key_12key_eisukana_b.png
Binary files differ
diff --git a/res/drawable/key_12key_enter.png b/res/drawable/key_12key_enter.png
deleted file mode 100644
index b2e729b..0000000
--- a/res/drawable/key_12key_enter.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_enter_b.png b/res/drawable/key_12key_enter_b.png
deleted file mode 100644
index d26baa6..0000000
--- a/res/drawable/key_12key_enter_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_enter_jp.png b/res/drawable/key_12key_enter_jp.png
deleted file mode 100644
index aeb461b..0000000
--- a/res/drawable/key_12key_enter_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_enter_jp_b.png b/res/drawable/key_12key_enter_jp_b.png
deleted file mode 100644
index 784a7e9..0000000
--- a/res/drawable/key_12key_enter_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_hiragana0.png b/res/drawable/key_12key_hiragana0.png
index 6c039d0..b704165 100644
--- a/res/drawable/key_12key_hiragana0.png
+++ b/res/drawable/key_12key_hiragana0.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana0_b.png b/res/drawable/key_12key_hiragana0_b.png
index 9baf830..4e96294 100644
--- a/res/drawable/key_12key_hiragana0_b.png
+++ b/res/drawable/key_12key_hiragana0_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana1.png b/res/drawable/key_12key_hiragana1.png
index ff33fd5..253f43f 100644
--- a/res/drawable/key_12key_hiragana1.png
+++ b/res/drawable/key_12key_hiragana1.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana1_b.png b/res/drawable/key_12key_hiragana1_b.png
index 5415e4b..918d282 100644
--- a/res/drawable/key_12key_hiragana1_b.png
+++ b/res/drawable/key_12key_hiragana1_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana2.png b/res/drawable/key_12key_hiragana2.png
index 2338b39..d4551b1 100644
--- a/res/drawable/key_12key_hiragana2.png
+++ b/res/drawable/key_12key_hiragana2.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana2_b.png b/res/drawable/key_12key_hiragana2_b.png
index 81b3c0b..e945c7f 100644
--- a/res/drawable/key_12key_hiragana2_b.png
+++ b/res/drawable/key_12key_hiragana2_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana3.png b/res/drawable/key_12key_hiragana3.png
index 6508763..0a3ee62 100644
--- a/res/drawable/key_12key_hiragana3.png
+++ b/res/drawable/key_12key_hiragana3.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana3_b.png b/res/drawable/key_12key_hiragana3_b.png
index 7b0173f..1fba929 100644
--- a/res/drawable/key_12key_hiragana3_b.png
+++ b/res/drawable/key_12key_hiragana3_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana4.png b/res/drawable/key_12key_hiragana4.png
index 79d9a03..d544396 100644
--- a/res/drawable/key_12key_hiragana4.png
+++ b/res/drawable/key_12key_hiragana4.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana4_b.png b/res/drawable/key_12key_hiragana4_b.png
index d34f52d..3faa527 100644
--- a/res/drawable/key_12key_hiragana4_b.png
+++ b/res/drawable/key_12key_hiragana4_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana5.png b/res/drawable/key_12key_hiragana5.png
index 62769a2..e9f101f 100644
--- a/res/drawable/key_12key_hiragana5.png
+++ b/res/drawable/key_12key_hiragana5.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana5_b.png b/res/drawable/key_12key_hiragana5_b.png
index c5bbc38..0613ceb 100644
--- a/res/drawable/key_12key_hiragana5_b.png
+++ b/res/drawable/key_12key_hiragana5_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana6.png b/res/drawable/key_12key_hiragana6.png
index a130fb8..64c0121 100644
--- a/res/drawable/key_12key_hiragana6.png
+++ b/res/drawable/key_12key_hiragana6.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana6_b.png b/res/drawable/key_12key_hiragana6_b.png
index f2d1246..61497dc 100644
--- a/res/drawable/key_12key_hiragana6_b.png
+++ b/res/drawable/key_12key_hiragana6_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana7.png b/res/drawable/key_12key_hiragana7.png
index f74e52a..6755d26 100644
--- a/res/drawable/key_12key_hiragana7.png
+++ b/res/drawable/key_12key_hiragana7.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana7_b.png b/res/drawable/key_12key_hiragana7_b.png
index 8246602..70f147e 100644
--- a/res/drawable/key_12key_hiragana7_b.png
+++ b/res/drawable/key_12key_hiragana7_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana8.png b/res/drawable/key_12key_hiragana8.png
index f2a3fdb..fd64e15 100644
--- a/res/drawable/key_12key_hiragana8.png
+++ b/res/drawable/key_12key_hiragana8.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana8_b.png b/res/drawable/key_12key_hiragana8_b.png
index 8ddf7b4..478c68b 100644
--- a/res/drawable/key_12key_hiragana8_b.png
+++ b/res/drawable/key_12key_hiragana8_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana9.png b/res/drawable/key_12key_hiragana9.png
index 35a2129..d34d476 100644
--- a/res/drawable/key_12key_hiragana9.png
+++ b/res/drawable/key_12key_hiragana9.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana9_b.png b/res/drawable/key_12key_hiragana9_b.png
index 516f847..b79d5e0 100644
--- a/res/drawable/key_12key_hiragana9_b.png
+++ b/res/drawable/key_12key_hiragana9_b.png
Binary files differ
diff --git a/res/drawable/key_12key_left.png b/res/drawable/key_12key_left.png
index d604272..f177aad 100644
--- a/res/drawable/key_12key_left.png
+++ b/res/drawable/key_12key_left.png
Binary files differ
diff --git a/res/drawable/key_12key_left_b.png b/res/drawable/key_12key_left_b.png
index 02fc93b..f177aad 100644
--- a/res/drawable/key_12key_left_b.png
+++ b/res/drawable/key_12key_left_b.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_alpha.png b/res/drawable/key_12key_mode_full_alpha.png
deleted file mode 100644
index fd4f880..0000000
--- a/res/drawable/key_12key_mode_full_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_kata.png b/res/drawable/key_12key_mode_full_kata.png
deleted file mode 100644
index 81b66e2..0000000
--- a/res/drawable/key_12key_mode_full_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_num.png b/res/drawable/key_12key_mode_full_num.png
deleted file mode 100644
index dc929a1..0000000
--- a/res/drawable/key_12key_mode_full_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_alpha.png b/res/drawable/key_12key_mode_half_alpha.png
deleted file mode 100644
index 4bf6f99..0000000
--- a/res/drawable/key_12key_mode_half_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_kata.png b/res/drawable/key_12key_mode_half_kata.png
deleted file mode 100644
index 322341a..0000000
--- a/res/drawable/key_12key_mode_half_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_num.png b/res/drawable/key_12key_mode_half_num.png
deleted file mode 100644
index 68a8760..0000000
--- a/res/drawable/key_12key_mode_half_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_mode_hira.png b/res/drawable/key_12key_mode_hira.png
deleted file mode 100644
index 9eb8584..0000000
--- a/res/drawable/key_12key_mode_hira.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_period_comma.png b/res/drawable/key_12key_period_comma.png
index d0fdb93..4ed6144 100644
--- a/res/drawable/key_12key_period_comma.png
+++ b/res/drawable/key_12key_period_comma.png
Binary files differ
diff --git a/res/drawable/key_12key_period_comma_b.png b/res/drawable/key_12key_period_comma_b.png
index aa9ad02..d971689 100644
--- a/res/drawable/key_12key_period_comma_b.png
+++ b/res/drawable/key_12key_period_comma_b.png
Binary files differ
diff --git a/res/drawable/key_12key_pict_sym.png b/res/drawable/key_12key_pict_sym.png
index a4845e5..6b7c365 100644
--- a/res/drawable/key_12key_pict_sym.png
+++ b/res/drawable/key_12key_pict_sym.png
Binary files differ
diff --git a/res/drawable/key_12key_reverse.png b/res/drawable/key_12key_reverse.png
index dd40bd9..ace5fb5 100644
--- a/res/drawable/key_12key_reverse.png
+++ b/res/drawable/key_12key_reverse.png
Binary files differ
diff --git a/res/drawable/key_12key_reverse_b.png b/res/drawable/key_12key_reverse_b.png
index 6d96fa3..ace5fb5 100644
--- a/res/drawable/key_12key_reverse_b.png
+++ b/res/drawable/key_12key_reverse_b.png
Binary files differ
diff --git a/res/drawable/key_12key_right.png b/res/drawable/key_12key_right.png
index 94a288b..a9863ff 100644
--- a/res/drawable/key_12key_right.png
+++ b/res/drawable/key_12key_right.png
Binary files differ
diff --git a/res/drawable/key_12key_right_b.png b/res/drawable/key_12key_right_b.png
index 06e21d0..a9863ff 100644
--- a/res/drawable/key_12key_right_b.png
+++ b/res/drawable/key_12key_right_b.png
Binary files differ
diff --git a/res/drawable/key_12key_space.png b/res/drawable/key_12key_space.png
index d67c898..14826ca 100644
--- a/res/drawable/key_12key_space.png
+++ b/res/drawable/key_12key_space.png
Binary files differ
diff --git a/res/drawable/key_12key_space_b.png b/res/drawable/key_12key_space_b.png
index 35d1b19..14826ca 100644
--- a/res/drawable/key_12key_space_b.png
+++ b/res/drawable/key_12key_space_b.png
Binary files differ
diff --git a/res/drawable/key_12key_space_jp.png b/res/drawable/key_12key_space_jp.png
index 4735e01..ec76075 100644
--- a/res/drawable/key_12key_space_jp.png
+++ b/res/drawable/key_12key_space_jp.png
Binary files differ
diff --git a/res/drawable/key_12key_space_jp_b.png b/res/drawable/key_12key_space_jp_b.png
index 0dc5206..ec76075 100644
--- a/res/drawable/key_12key_space_jp_b.png
+++ b/res/drawable/key_12key_space_jp_b.png
Binary files differ
diff --git a/res/drawable/key_12key_ten.png b/res/drawable/key_12key_ten.png
index 7d93f4f..08e68a0 100644
--- a/res/drawable/key_12key_ten.png
+++ b/res/drawable/key_12key_ten.png
Binary files differ
diff --git a/res/drawable/key_12key_ten_b.png b/res/drawable/key_12key_ten_b.png
index f65bb2e..e5b2d11 100644
--- a/res/drawable/key_12key_ten_b.png
+++ b/res/drawable/key_12key_ten_b.png
Binary files differ
diff --git a/res/drawable/key_del.png b/res/drawable/key_del.png
new file mode 100644
index 0000000..3a8792a
--- /dev/null
+++ b/res/drawable/key_del.png
Binary files differ
diff --git a/res/drawable/key_del_b.png b/res/drawable/key_del_b.png
new file mode 100644
index 0000000..3a8792a
--- /dev/null
+++ b/res/drawable/key_del_b.png
Binary files differ
diff --git a/res/drawable/key_enter.png b/res/drawable/key_enter.png
new file mode 100644
index 0000000..0e2d072
--- /dev/null
+++ b/res/drawable/key_enter.png
Binary files differ
diff --git a/res/drawable/key_enter_b.png b/res/drawable/key_enter_b.png
new file mode 100644
index 0000000..0e2d072
--- /dev/null
+++ b/res/drawable/key_enter_b.png
Binary files differ
diff --git a/res/drawable/key_mode_change_b.png b/res/drawable/key_mode_change_b.png
index 58159d9..e18517c 100644
--- a/res/drawable/key_mode_change_b.png
+++ b/res/drawable/key_mode_change_b.png
Binary files differ
diff --git a/res/drawable/key_mode_full_alpha.png b/res/drawable/key_mode_full_alpha.png
new file mode 100644
index 0000000..3c2a0eb
--- /dev/null
+++ b/res/drawable/key_mode_full_alpha.png
Binary files differ
diff --git a/res/drawable/key_mode_full_kata.png b/res/drawable/key_mode_full_kata.png
new file mode 100644
index 0000000..899a546
--- /dev/null
+++ b/res/drawable/key_mode_full_kata.png
Binary files differ
diff --git a/res/drawable/key_mode_full_num.png b/res/drawable/key_mode_full_num.png
new file mode 100644
index 0000000..dcd3637
--- /dev/null
+++ b/res/drawable/key_mode_full_num.png
Binary files differ
diff --git a/res/drawable/key_mode_half_alpha.png b/res/drawable/key_mode_half_alpha.png
new file mode 100644
index 0000000..f620a1a
--- /dev/null
+++ b/res/drawable/key_mode_half_alpha.png
Binary files differ
diff --git a/res/drawable/key_mode_half_kata.png b/res/drawable/key_mode_half_kata.png
new file mode 100644
index 0000000..f0682fb
--- /dev/null
+++ b/res/drawable/key_mode_half_kata.png
Binary files differ
diff --git a/res/drawable/key_mode_half_num.png b/res/drawable/key_mode_half_num.png
new file mode 100644
index 0000000..913c5c5
--- /dev/null
+++ b/res/drawable/key_mode_half_num.png
Binary files differ
diff --git a/res/drawable/key_mode_hira.png b/res/drawable/key_mode_hira.png
new file mode 100644
index 0000000..494035f
--- /dev/null
+++ b/res/drawable/key_mode_hira.png
Binary files differ
diff --git a/res/drawable/key_mode_panel_kbd_12key_b.png b/res/drawable/key_mode_panel_kbd_12key_b.png
index eda8c03..a3fe255 100644
--- a/res/drawable/key_mode_panel_kbd_12key_b.png
+++ b/res/drawable/key_mode_panel_kbd_12key_b.png
Binary files differ
diff --git a/res/drawable/key_pict_sym_b.png b/res/drawable/key_pict_sym_b.png
new file mode 100644
index 0000000..19df062
--- /dev/null
+++ b/res/drawable/key_pict_sym_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_del.png b/res/drawable/key_qwerty_del.png
deleted file mode 100644
index 4aab087..0000000
--- a/res/drawable/key_qwerty_del.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_del_b.png b/res/drawable/key_qwerty_del_b.png
deleted file mode 100644
index ecc2dba..0000000
--- a/res/drawable/key_qwerty_del_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_enter.png b/res/drawable/key_qwerty_enter.png
deleted file mode 100644
index 35a3fb0..0000000
--- a/res/drawable/key_qwerty_enter.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_b.png b/res/drawable/key_qwerty_enter_b.png
deleted file mode 100644
index 1a4cbfd..0000000
--- a/res/drawable/key_qwerty_enter_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_jp.png b/res/drawable/key_qwerty_enter_jp.png
deleted file mode 100644
index 7f002e6..0000000
--- a/res/drawable/key_qwerty_enter_jp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_jp_b.png b/res/drawable/key_qwerty_enter_jp_b.png
deleted file mode 100644
index a77c39f..0000000
--- a/res/drawable/key_qwerty_enter_jp_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_left.png b/res/drawable/key_qwerty_left.png
new file mode 100644
index 0000000..f177aad
--- /dev/null
+++ b/res/drawable/key_qwerty_left.png
Binary files differ
diff --git a/res/drawable/key_qwerty_left_b.png b/res/drawable/key_qwerty_left_b.png
new file mode 100644
index 0000000..f177aad
--- /dev/null
+++ b/res/drawable/key_qwerty_left_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_alpha.png b/res/drawable/key_qwerty_mode_full_alpha.png
deleted file mode 100644
index fd4f880..0000000
--- a/res/drawable/key_qwerty_mode_full_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_kata.png b/res/drawable/key_qwerty_mode_full_kata.png
deleted file mode 100644
index 81b66e2..0000000
--- a/res/drawable/key_qwerty_mode_full_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_num.png b/res/drawable/key_qwerty_mode_full_num.png
deleted file mode 100644
index dc929a1..0000000
--- a/res/drawable/key_qwerty_mode_full_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_alpha.png b/res/drawable/key_qwerty_mode_half_alpha.png
deleted file mode 100644
index 4bf6f99..0000000
--- a/res/drawable/key_qwerty_mode_half_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_kata.png b/res/drawable/key_qwerty_mode_half_kata.png
deleted file mode 100644
index 322341a..0000000
--- a/res/drawable/key_qwerty_mode_half_kata.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_num.png b/res/drawable/key_qwerty_mode_half_num.png
deleted file mode 100644
index 68a8760..0000000
--- a/res/drawable/key_qwerty_mode_half_num.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_hira.png b/res/drawable/key_qwerty_mode_hira.png
deleted file mode 100644
index 9eb8584..0000000
--- a/res/drawable/key_qwerty_mode_hira.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_pict_sym.png b/res/drawable/key_qwerty_pict_sym.png
index ad89c49..d40ec42 100644
--- a/res/drawable/key_qwerty_pict_sym.png
+++ b/res/drawable/key_qwerty_pict_sym.png
Binary files differ
diff --git a/res/drawable/key_qwerty_pict_sym_b.png b/res/drawable/key_qwerty_pict_sym_b.png
deleted file mode 100644
index 43225a8..0000000
--- a/res/drawable/key_qwerty_pict_sym_b.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_right.png b/res/drawable/key_qwerty_right.png
new file mode 100644
index 0000000..a9863ff
--- /dev/null
+++ b/res/drawable/key_qwerty_right.png
Binary files differ
diff --git a/res/drawable/key_qwerty_right_b.png b/res/drawable/key_qwerty_right_b.png
new file mode 100644
index 0000000..a9863ff
--- /dev/null
+++ b/res/drawable/key_qwerty_right_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_shift_b.png b/res/drawable/key_qwerty_shift_b.png
index bb6fe59..8c2f859 100644
--- a/res/drawable/key_qwerty_shift_b.png
+++ b/res/drawable/key_qwerty_shift_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_shift_locked.png b/res/drawable/key_qwerty_shift_locked.png
new file mode 100644
index 0000000..36b20c7
--- /dev/null
+++ b/res/drawable/key_qwerty_shift_locked.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space.png b/res/drawable/key_qwerty_space.png
index 5ffcab5..f4ede08 100644
--- a/res/drawable/key_qwerty_space.png
+++ b/res/drawable/key_qwerty_space.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_b.png b/res/drawable/key_qwerty_space_b.png
index a9390e2..f4ede08 100644
--- a/res/drawable/key_qwerty_space_b.png
+++ b/res/drawable/key_qwerty_space_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_conv.png b/res/drawable/key_qwerty_space_conv.png
index 654bc2d..ec76075 100644
--- a/res/drawable/key_qwerty_space_conv.png
+++ b/res/drawable/key_qwerty_space_conv.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_conv_b.png b/res/drawable/key_qwerty_space_conv_b.png
index 07bd232..ec76075 100644
--- a/res/drawable/key_qwerty_space_conv_b.png
+++ b/res/drawable/key_qwerty_space_conv_b.png
Binary files differ
diff --git a/res/drawable/keybg_classic.9.png b/res/drawable/keybg_classic.9.png
new file mode 100644
index 0000000..ba57b14
--- /dev/null
+++ b/res/drawable/keybg_classic.9.png
Binary files differ
diff --git a/res/drawable/keybg_classic_bg.png b/res/drawable/keybg_classic_bg.png
new file mode 100644
index 0000000..6ec5225
--- /dev/null
+++ b/res/drawable/keybg_classic_bg.png
Binary files differ
diff --git a/res/drawable/keybg_classic_def.xml b/res/drawable/keybg_classic_def.xml
new file mode 100644
index 0000000..2260a9d
--- /dev/null
+++ b/res/drawable/keybg_classic_def.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_classic_psfton" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/keybg_classic_sfton" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_classic_psftoff" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/keybg_classic_sftoff" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/keybg_classic_p" />
+ <item android:drawable="@drawable/keybg_classic" />
+</selector>
diff --git a/res/drawable/keybg_classic_p.9.png b/res/drawable/keybg_classic_p.9.png
new file mode 100644
index 0000000..4020b40
--- /dev/null
+++ b/res/drawable/keybg_classic_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_classic_psftoff.9.png b/res/drawable/keybg_classic_psftoff.9.png
new file mode 100644
index 0000000..51c1778
--- /dev/null
+++ b/res/drawable/keybg_classic_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_classic_psfton.9.png b/res/drawable/keybg_classic_psfton.9.png
new file mode 100644
index 0000000..273e3fe
--- /dev/null
+++ b/res/drawable/keybg_classic_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_classic_sftoff.9.png b/res/drawable/keybg_classic_sftoff.9.png
new file mode 100644
index 0000000..358e6a4
--- /dev/null
+++ b/res/drawable/keybg_classic_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_classic_sfton.9.png b/res/drawable/keybg_classic_sfton.9.png
new file mode 100644
index 0000000..fcf74e7
--- /dev/null
+++ b/res/drawable/keybg_classic_sfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice.9.png b/res/drawable/keybg_ice.9.png
new file mode 100644
index 0000000..b22dd6d
--- /dev/null
+++ b/res/drawable/keybg_ice.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice_bg.png b/res/drawable/keybg_ice_bg.png
new file mode 100644
index 0000000..d26d8ae
--- /dev/null
+++ b/res/drawable/keybg_ice_bg.png
Binary files differ
diff --git a/res/drawable/keybg_ice_def.xml b/res/drawable/keybg_ice_def.xml
new file mode 100644
index 0000000..1336765
--- /dev/null
+++ b/res/drawable/keybg_ice_def.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_ice_psfton" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/keybg_ice_sfton" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_ice_psftoff" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/keybg_ice_sftoff" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/keybg_ice_p" />
+ <item android:drawable="@drawable/keybg_ice" />
+</selector>
diff --git a/res/drawable/keybg_ice_p.9.png b/res/drawable/keybg_ice_p.9.png
new file mode 100644
index 0000000..4984234
--- /dev/null
+++ b/res/drawable/keybg_ice_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice_psftoff.9.png b/res/drawable/keybg_ice_psftoff.9.png
new file mode 100644
index 0000000..7b8662b
--- /dev/null
+++ b/res/drawable/keybg_ice_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice_psfton.9.png b/res/drawable/keybg_ice_psfton.9.png
new file mode 100644
index 0000000..5748d92
--- /dev/null
+++ b/res/drawable/keybg_ice_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice_sftoff.9.png b/res/drawable/keybg_ice_sftoff.9.png
new file mode 100644
index 0000000..d82a1c7
--- /dev/null
+++ b/res/drawable/keybg_ice_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_ice_sfton.9.png b/res/drawable/keybg_ice_sfton.9.png
new file mode 100644
index 0000000..657b357
--- /dev/null
+++ b/res/drawable/keybg_ice_sfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto.9.png b/res/drawable/keybg_kyoto.9.png
new file mode 100644
index 0000000..d4a02da
--- /dev/null
+++ b/res/drawable/keybg_kyoto.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_bg.png b/res/drawable/keybg_kyoto_bg.png
new file mode 100644
index 0000000..6f94b70
--- /dev/null
+++ b/res/drawable/keybg_kyoto_bg.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_def.xml b/res/drawable/keybg_kyoto_def.xml
new file mode 100644
index 0000000..a54f059
--- /dev/null
+++ b/res/drawable/keybg_kyoto_def.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_kyoto_psfton" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/keybg_kyoto_sfton" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_kyoto_psftoff" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/keybg_kyoto_sftoff" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/keybg_kyoto_p" />
+ <item android:drawable="@drawable/keybg_kyoto" />
+</selector>
diff --git a/res/drawable/keybg_kyoto_p.9.png b/res/drawable/keybg_kyoto_p.9.png
new file mode 100644
index 0000000..19127f1
--- /dev/null
+++ b/res/drawable/keybg_kyoto_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_psftoff.9.png b/res/drawable/keybg_kyoto_psftoff.9.png
new file mode 100644
index 0000000..273b479
--- /dev/null
+++ b/res/drawable/keybg_kyoto_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_psfton.9.png b/res/drawable/keybg_kyoto_psfton.9.png
new file mode 100644
index 0000000..e32b35d
--- /dev/null
+++ b/res/drawable/keybg_kyoto_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_sftoff.9.png b/res/drawable/keybg_kyoto_sftoff.9.png
new file mode 100644
index 0000000..96fb094
--- /dev/null
+++ b/res/drawable/keybg_kyoto_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_kyoto_sfton.9.png b/res/drawable/keybg_kyoto_sfton.9.png
new file mode 100644
index 0000000..f4fc3dc
--- /dev/null
+++ b/res/drawable/keybg_kyoto_sfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_light.9.png b/res/drawable/keybg_light.9.png
new file mode 100644
index 0000000..2b4aa98
--- /dev/null
+++ b/res/drawable/keybg_light.9.png
Binary files differ
diff --git a/res/drawable/keybg_light_def.xml b/res/drawable/keybg_light_def.xml
new file mode 100644
index 0000000..da38f22
--- /dev/null
+++ b/res/drawable/keybg_light_def.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_light_psfton" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/keybg_light_sfton" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_light_psftoff" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/keybg_light_sftoff" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/keybg_light_p" />
+ <item android:drawable="@drawable/keybg_light" />
+</selector>
diff --git a/res/drawable/keybg_light_p.9.png b/res/drawable/keybg_light_p.9.png
new file mode 100644
index 0000000..c1c1e1c
--- /dev/null
+++ b/res/drawable/keybg_light_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_light_psftoff.9.png b/res/drawable/keybg_light_psftoff.9.png
new file mode 100644
index 0000000..edaf5ac
--- /dev/null
+++ b/res/drawable/keybg_light_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_light_psfton.9.png b/res/drawable/keybg_light_psfton.9.png
new file mode 100644
index 0000000..d39565a
--- /dev/null
+++ b/res/drawable/keybg_light_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_light_sftoff.9.png b/res/drawable/keybg_light_sftoff.9.png
new file mode 100644
index 0000000..f26bfb5
--- /dev/null
+++ b/res/drawable/keybg_light_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_light_sfton.9.png b/res/drawable/keybg_light_sfton.9.png
new file mode 100644
index 0000000..65087be
--- /dev/null
+++ b/res/drawable/keybg_light_sfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_metal_def.xml b/res/drawable/keybg_metal_def.xml
index 963fe11..d4989f8 100644
--- a/res/drawable/keybg_metal_def.xml
+++ b/res/drawable/keybg_metal_def.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/drawable/keybg_simple_def.xml b/res/drawable/keybg_simple_def.xml
index 322ce8c..77114b0 100644
--- a/res/drawable/keybg_simple_def.xml
+++ b/res/drawable/keybg_simple_def.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/drawable/keybg_wood.9.png b/res/drawable/keybg_wood.9.png
new file mode 100644
index 0000000..e588ed6
--- /dev/null
+++ b/res/drawable/keybg_wood.9.png
Binary files differ
diff --git a/res/drawable/keybg_wood_bg.png b/res/drawable/keybg_wood_bg.png
new file mode 100644
index 0000000..2dc9f8a
--- /dev/null
+++ b/res/drawable/keybg_wood_bg.png
Binary files differ
diff --git a/res/drawable/keybg_wood_def.xml b/res/drawable/keybg_wood_def.xml
new file mode 100644
index 0000000..cba026a
--- /dev/null
+++ b/res/drawable/keybg_wood_def.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_wood_psfton" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/keybg_wood_sfton" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/keybg_wood_psftoff" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/keybg_wood_sftoff" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/keybg_wood_p" />
+ <item android:drawable="@drawable/keybg_wood" />
+</selector>
diff --git a/res/drawable/keybg_wood_p.9.png b/res/drawable/keybg_wood_p.9.png
new file mode 100644
index 0000000..aa6c810
--- /dev/null
+++ b/res/drawable/keybg_wood_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_wood_psftoff.9.png b/res/drawable/keybg_wood_psftoff.9.png
new file mode 100644
index 0000000..fba919e
--- /dev/null
+++ b/res/drawable/keybg_wood_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_wood_psfton.9.png b/res/drawable/keybg_wood_psfton.9.png
new file mode 100644
index 0000000..6887e7d
--- /dev/null
+++ b/res/drawable/keybg_wood_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_wood_sftoff.9.png b/res/drawable/keybg_wood_sftoff.9.png
new file mode 100644
index 0000000..4622de4
--- /dev/null
+++ b/res/drawable/keybg_wood_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_wood_sfton.9.png b/res/drawable/keybg_wood_sfton.9.png
new file mode 100644
index 0000000..3b4e8f7
--- /dev/null
+++ b/res/drawable/keybg_wood_sfton.9.png
Binary files differ
diff --git a/res/drawable/keyboard_background.png b/res/drawable/keyboard_background.png
new file mode 100644
index 0000000..956456e
--- /dev/null
+++ b/res/drawable/keyboard_background.png
Binary files differ
diff --git a/res/drawable/keyboard_key_feedback.xml b/res/drawable/keyboard_key_feedback.xml
new file mode 100644
index 0000000..c483b76
--- /dev/null
+++ b/res/drawable/keyboard_key_feedback.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_long_pressable="true"
+ android:drawable="@drawable/keyboard_key_feedback_more_background" />
+
+ <item android:drawable="@drawable/keyboard_key_feedback_background" />
+</selector>
diff --git a/res/drawable/tutorial_12key_enter.png b/res/drawable/tutorial_12key_enter.png
index 61abffc..9f8921b 100644
--- a/res/drawable/tutorial_12key_enter.png
+++ b/res/drawable/tutorial_12key_enter.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_mode.png b/res/drawable/tutorial_12key_mode.png
index 42b939f..c9b2d60 100644
--- a/res/drawable/tutorial_12key_mode.png
+++ b/res/drawable/tutorial_12key_mode.png
Binary files differ
diff --git a/res/layout-sw768dp/keyboard_android_default.xml b/res/layout-sw768dp/keyboard_android_default.xml
new file mode 100644
index 0000000..420281f
--- /dev/null
+++ b/res/layout-sw768dp/keyboard_android_default.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<jp.co.omronsoft.openwnn.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:labelTextSize="@dimen/key_label_text_size"
+ android:keyTextSize="@dimen/key_text_size"
+ android:keyBackground="@drawable/btn_keyboard_key"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:background="@drawable/keyboard_background"
+ android:keyTextColor="@color/key_text_color"
+ android:paddingTop="10dip"
+ pj:keyBackground2nd="@drawable/btn_keyboard_key_2nd"
+ pj:keyTextColor2nd="@color/key_text_color_2nd"
+ />
+
diff --git a/res/layout-sw768dp/keyboard_metal.xml b/res/layout-sw768dp/keyboard_metal.xml
new file mode 100644
index 0000000..2d94a38
--- /dev/null
+++ b/res/layout-sw768dp/keyboard_metal.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<jp.co.omronsoft.openwnn.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:labelTextSize="@dimen/key_label_text_size"
+ android:keyTextSize="@dimen/key_text_size"
+ android:keyBackground="@drawable/keybg_metal_def"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:background="@drawable/keyboard_background"
+ android:keyTextColor="@color/key_text_color"
+ pj:keyBackground2nd="@drawable/keybg_metal_def"
+ pj:keyTextColor2nd="@color/key_text_color"
+/>
diff --git a/res/layout-sw768dp/keyboard_simple.xml b/res/layout-sw768dp/keyboard_simple.xml
new file mode 100644
index 0000000..dc7187e
--- /dev/null
+++ b/res/layout-sw768dp/keyboard_simple.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<jp.co.omronsoft.openwnn.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:labelTextSize="@dimen/key_label_text_size"
+ android:keyTextSize="@dimen/key_text_size"
+ android:keyBackground="@drawable/keybg_simple_def"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:background="@drawable/keybg_simple_bg"
+ android:keyTextColor="@color/key_text_color"
+ pj:keyBackground2nd="@drawable/keybg_simple_def"
+ pj:keyTextColor2nd="@color/key_text_color_2nd"
+/>
diff --git a/res/layout/bubble_text.xml b/res/layout/bubble_text.xml
index d754467..64b0a01 100644
--- a/res/layout/bubble_text.xml
+++ b/res/layout/bubble_text.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/layout/candidate_longpress_dialog.xml b/res/layout/candidate_longpress_dialog.xml
new file mode 100644
index 0000000..a0b4da2
--- /dev/null
+++ b/res/layout/candidate_longpress_dialog.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!-- candidate list -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ >
+ <TextView
+ android:id="@+id/candidate_longpress_dialog_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="@dimen/candidate_longpress_dialog_candidate_word_size"
+ android:textColor="@color/candidate_longpress_dialog_text"
+ android:gravity="center"
+ />
+ <HorizontalScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ >
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ >
+ <Button
+ android:id="@+id/candidate_longpress_dialog_cancel"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/dialog_button_cancel"
+ android:textSize="@dimen/candidate_longpress_dialog_button_word_size"
+ android:soundEffectsEnabled="false"
+ />
+ <Button
+ android:id="@+id/candidate_longpress_dialog_select"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/button_candidate_select"
+ android:textSize="@dimen/candidate_longpress_dialog_button_word_size"
+ android:soundEffectsEnabled="false"
+ />
+ <Button
+ android:id="@+id/candidate_longpress_dialog_delete"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:text="@string/button_candidate_delete"
+ android:textSize="@dimen/candidate_longpress_dialog_button_word_size"
+ android:visibility="gone"
+ android:soundEffectsEnabled="false"
+ />
+ </LinearLayout>
+ </HorizontalScrollView>
+</LinearLayout>
diff --git a/res/layout/candidate_scale_up.xml b/res/layout/candidate_scale_up.xml
deleted file mode 100644
index e1d52a1..0000000
--- a/res/layout/candidate_scale_up.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
-
- 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.
--->
-<!-- candidate list -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:background="@color/candidate_back"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- >
- <TextView
- android:id="@+id/candidate_scale_up_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/candidate_back"
- android:textSize="@dimen/candidate_delete_word_size"
- android:textColor="@color/candidate_text"
- android:gravity="center"
- />
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
- <jp.co.omronsoft.openwnn.CandidateViewButton
- android:id="@+id/candidate_select"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/button_candidate_select"
- />
- <jp.co.omronsoft.openwnn.CandidateViewButton
- android:id="@+id/candidate_delete"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/button_candidate_delete"
- android:visibility="gone"
- />
- <jp.co.omronsoft.openwnn.CandidateViewButton
- android:id="@+id/candidate_cancel"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:text="@string/button_candidate_cancel"
- />
- </LinearLayout>
-</LinearLayout>
diff --git a/res/layout/candidates.xml b/res/layout/candidates.xml
index dc26030..09246a2 100644
--- a/res/layout/candidates.xml
+++ b/res/layout/candidates.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -21,19 +21,66 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ >
+
+ <LinearLayout
+ android:id="@+id/candview_tab"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ >
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/candidate_tab_back"
+ >
+ <TextView
+ android:id="@+id/candview_symbol"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@drawable/cand_tab"
+ android:singleLine="true"
+ android:gravity="center"
+ android:text="@string/cand_tab_symbol_txt"
+ android:textColor="@color/tab_textcolor_no_select"
+ android:textSize="@dimen/tab_text_size"
+ android:soundEffectsEnabled="false"
+ />
+ <TextView
+ android:id="@+id/candview_emoticon"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@drawable/cand_tab"
+ android:singleLine="true"
+ android:gravity="center"
+ android:text="@string/cand_tab_emoticon_txt"
+ android:textColor="@color/tab_textcolor_no_select"
+ android:textSize="@dimen/tab_text_size"
+ android:soundEffectsEnabled="false"
+ />
+ </LinearLayout>
+ </LinearLayout>
+
<ScrollView
android:id="@+id/candview_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadingEdgeLength="0dip"
android:scrollbars="vertical"
+ android:background="@color/candidate_back"
>
<LinearLayout
android:id="@+id/candview_base"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/candidate_back"
>
<!--View
android:layout_height="wrap_content"
@@ -45,17 +92,15 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/candidate_back"
/>
<AbsoluteLayout
android:id="@+id/candidates_2nd_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/candidate_back"
/>
</LinearLayout>
</ScrollView>
-
+ </LinearLayout>
<LinearLayout
android:id="@+id/read_more"
android:layout_width="match_parent"
@@ -65,9 +110,11 @@
android:gravity="right"
>
<ImageView
- android:id="@+id/read_more_text"
+ android:id="@+id/read_more_button"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
+ android:layout_width="wrap_content"
+ android:paddingRight="2dip"
+ android:soundEffectsEnabled="false"
/>
</LinearLayout>
</FrameLayout>
diff --git a/res/layout/candidates_1line.xml b/res/layout/candidates_1line.xml
new file mode 100644
index 0000000..962486f
--- /dev/null
+++ b/res/layout/candidates_1line.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!-- candidate list -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/candidate_layout_height"
+ >
+
+ <LinearLayout
+ android:id="@+id/left_more"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/candidate_layout_height"
+ android:orientation="horizontal"
+ android:background="@drawable/cand_back_1line"
+ >
+ <ImageView
+ android:id="@+id/left_more_imageview"
+ android:src="@drawable/cand_left"
+ android:layout_width="@dimen/candidate_layout_width"
+ android:layout_height="match_parent"
+ android:clickable="true"
+ android:background="@color/candidate_back_1line"
+ android:soundEffectsEnabled="false"
+ />
+ </LinearLayout>
+
+ <HorizontalScrollView
+ android:id="@+id/candview_scroll_1line"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/candidate_layout_height"
+ android:scrollbars="none"
+ android:layout_weight="1"
+ android:fadingEdge="horizontal"
+ android:background="@color/candidate_back_1line"
+ >
+ <LinearLayout
+ android:id="@+id/candidates_view_1line"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/candidate_layout_height"
+ android:background="@color/candidate_back_1line"
+ />
+ </HorizontalScrollView>
+
+ <LinearLayout
+ android:id="@+id/right_more"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/candidate_layout_height"
+ android:orientation="horizontal"
+ android:background="@drawable/cand_back_1line"
+ >
+ <ImageView
+ android:id="@+id/right_more_imageview"
+ android:src="@drawable/cand_right"
+ android:layout_width="@dimen/candidate_layout_width"
+ android:layout_height="match_parent"
+ android:clickable="true"
+ android:background="@color/candidate_back_1line"
+ android:soundEffectsEnabled="false"
+ />
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/debug_tool_engine.xml b/res/layout/debug_tool_engine.xml
new file mode 100644
index 0000000..134f5d2
--- /dev/null
+++ b/res/layout/debug_tool_engine.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/openwnn_engine_label"
+ />
+
+ <RadioGroup android:id="@+id/radio_group"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <RadioButton android:id="@+id/radio_en"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_openwnn_engine_en"
+ android:textSize="11sp"
+ />
+ </RadioGroup>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <Button android:id="@+id/execButton2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="3dip"
+ android:text="@string/execButton2"
+ android:textSize="11sp"
+ />
+
+ <TextView android:id="@+id/editText2"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textSize="11sp"
+ />
+ </LinearLayout>
+
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#000000">
+
+ <LinearLayout android:id="@+id/engine_scroll"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ </LinearLayout>
+ </ScrollView>
+</LinearLayout>
diff --git a/res/layout/debug_tool_onevent.xml b/res/layout/debug_tool_onevent.xml
new file mode 100644
index 0000000..9d82de0
--- /dev/null
+++ b/res/layout/debug_tool_onevent.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/app_openwnn_test"
+ />
+
+ <EditText android:id="@+id/editText"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+
+ <Button android:id="@+id/execButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="3dip"
+ android:text="@string/execButton"/>
+
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#000000">
+ <TextView android:id="@+id/textView"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textSize="5pt"
+ />
+ </ScrollView>
+</LinearLayout>
diff --git a/res/layout/debug_tool_text.xml b/res/layout/debug_tool_text.xml
new file mode 100644
index 0000000..680fbff
--- /dev/null
+++ b/res/layout/debug_tool_text.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_anything"
+ />
+
+ <EditText
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_integer"
+ />
+
+ <EditText
+ android:numeric="integer"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_signed"
+ />
+
+ <EditText
+ android:numeric="signed"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_demical"
+ />
+
+ <EditText
+ android:numeric="decimal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_password"
+ />
+
+ <EditText
+ android:password="true"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_phone"
+ />
+
+ <EditText
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:phoneNumber="true"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/debug_texttype_singleLine"
+ />
+
+ <EditText
+ android:id="@+id/singleLine"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ />
+ </LinearLayout>
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/keyboard_android_default.xml b/res/layout/keyboard_android_default.xml
index 3fd8738..3a0550b 100644
--- a/res/layout/keyboard_android_default.xml
+++ b/res/layout/keyboard_android_default.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,11 +14,26 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<android.inputmethodservice.KeyboardView
+<jp.co.omronsoft.openwnn.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:id="@+id/keyboard"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@drawable/keyboard_background"
+ android:keyBackground="@drawable/btn_keyboard_key"
+ android:verticalCorrection="-10dip"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:keyPreviewOffset="-12dip"
+ android:keyPreviewHeight="80dip"
+ android:keyTextSize="22dip"
+ android:keyTextColor="@color/key_text_color"
+ android:labelTextSize="@dimen/key_label_text_size"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:shadowColor="#BB000000"
+ android:shadowRadius="0.5"
+ pj:keyBackground2nd="@drawable/btn_keyboard_key_2nd"
+ pj:keyTextColor2nd="@color/key_text_color_2nd"
/>
diff --git a/res/layout/keyboard_classic.xml b/res/layout/keyboard_classic.xml
new file mode 100644
index 0000000..bcb1c6f
--- /dev/null
+++ b/res/layout/keyboard_classic.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<android.inputmethodservice.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/keybg_classic_def"
+ android:background="@drawable/keybg_classic_bg"
+/>
diff --git a/res/layout/keyboard_default_main.xml b/res/layout/keyboard_default_main.xml
index f93b7e8..c01e02c 100644
--- a/res/layout/keyboard_default_main.xml
+++ b/res/layout/keyboard_default_main.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fadingEdge="vertical"
- android:fadingEdgeLength="5dip"
- >
-</LinearLayout>
+
+<jp.co.omronsoft.openwnn.BaseInputView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:requiresFadingEdge="vertical"
+ android:fadingEdgeLength="5dip"/>
diff --git a/res/layout/keyboard_default_sub.xml b/res/layout/keyboard_default_sub.xml
index 2be1552..6ec3fab 100644
--- a/res/layout/keyboard_default_sub.xml
+++ b/res/layout/keyboard_default_sub.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/layout/keyboard_ice.xml b/res/layout/keyboard_ice.xml
new file mode 100644
index 0000000..f0722d9
--- /dev/null
+++ b/res/layout/keyboard_ice.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<android.inputmethodservice.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/keybg_ice_def"
+ android:background="@drawable/keybg_ice_bg"
+/>
diff --git a/res/layout/keyboard_key_preview.xml b/res/layout/keyboard_key_preview.xml
new file mode 100644
index 0000000..7fe375a
--- /dev/null
+++ b/res/layout/keyboard_key_preview.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="80dip"
+ android:textSize="40dip"
+ android:textColor="@color/key_text_color"
+ android:minWidth="32dip"
+ android:gravity="center"
+ android:background="@drawable/keyboard_key_feedback"
+ />
diff --git a/res/layout/keyboard_kyoto.xml b/res/layout/keyboard_kyoto.xml
new file mode 100644
index 0000000..c313f3b
--- /dev/null
+++ b/res/layout/keyboard_kyoto.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<android.inputmethodservice.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/keybg_kyoto_def"
+ android:background="@drawable/keybg_kyoto_bg"
+/>
diff --git a/res/layout/keyboard_light.xml b/res/layout/keyboard_light.xml
new file mode 100644
index 0000000..2ffbc0f
--- /dev/null
+++ b/res/layout/keyboard_light.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<android.inputmethodservice.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/keybg_light_def"
+/>
diff --git a/res/layout/keyboard_metal.xml b/res/layout/keyboard_metal.xml
index 9acfa2c..9c5656b 100644
--- a/res/layout/keyboard_metal.xml
+++ b/res/layout/keyboard_metal.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,11 +14,18 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<android.inputmethodservice.KeyboardView
+<jp.co.omronsoft.openwnn.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:id="@+id/keyboard"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:keyBackground="@drawable/keybg_metal_def"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:background="@drawable/keyboard_background"
+ android:keyTextColor="@color/key_text_color"
+ pj:keyBackground2nd="@drawable/keybg_metal_def"
+ pj:keyTextColor2nd="@color/key_text_color"
/>
diff --git a/res/layout/keyboard_popup_keyboard.xml b/res/layout/keyboard_popup_keyboard.xml
new file mode 100644
index 0000000..0215cfe
--- /dev/null
+++ b/res/layout/keyboard_popup_keyboard.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="@drawable/keyboard_popup_panel_background"
+ >
+
+ <jp.co.omronsoft.openwnn.KeyboardView
+ android:id="@+id/keyboardView"
+ android:background="@android:color/transparent"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/btn_keyboard_key_std"
+ android:verticalCorrection="-10dip"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:keyPreviewOffset="-12dip"
+ android:keyPreviewHeight="80dip"
+ android:keyTextSize="22dip"
+ android:keyTextColor="@color/key_text_color_std"
+ android:labelTextSize="14dip"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
+ android:shadowColor="#BB000000"
+ android:shadowRadius="0.5"
+ />
+ <ImageButton android:id="@+id/closeButton"
+ android:background="@android:color/transparent"
+ android:src="@drawable/btn_close"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginLeft="8dp"
+ android:clickable="true"
+ />
+</LinearLayout>
diff --git a/res/layout/keyboard_simple.xml b/res/layout/keyboard_simple.xml
index befe34f..3eed320 100644
--- a/res/layout/keyboard_simple.xml
+++ b/res/layout/keyboard_simple.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,12 +14,18 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<android.inputmethodservice.KeyboardView
+<jp.co.omronsoft.openwnn.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:id="@+id/keyboard"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:keyBackground="@drawable/keybg_simple_def"
+ android:keyPreviewLayout="@layout/keyboard_key_preview"
+ android:popupLayout="@layout/keyboard_popup_keyboard"
android:background="@drawable/keybg_simple_bg"
+ android:keyTextColor="@color/key_text_color"
+ pj:keyBackground2nd="@drawable/keybg_simple_def"
+ pj:keyTextColor2nd="@color/key_text_color_2nd"
/>
diff --git a/res/layout/keyboard_wood.xml b/res/layout/keyboard_wood.xml
new file mode 100644
index 0000000..81c136c
--- /dev/null
+++ b/res/layout/keyboard_wood.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<android.inputmethodservice.KeyboardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyboard"
+ android:layout_alignParentBottom="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:keyBackground="@drawable/keybg_wood_def"
+ android:background="@drawable/keybg_wood_bg"
+/>
diff --git a/res/layout/user_dictionary_tools_edit.xml b/res/layout/user_dictionary_tools_edit.xml
index 5886857..39a074a 100644
--- a/res/layout/user_dictionary_tools_edit.xml
+++ b/res/layout/user_dictionary_tools_edit.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -46,22 +46,22 @@
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_marginTop="1dip"
android:background="@android:drawable/bottom_bar">
- <Button android:id="@+id/addButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:text="@string/user_dictionary_add"
- android:minWidth="120dip"
- android:minHeight="48dip"/>
-
<Button android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
+ android:layout_alignParentLeft="true"
android:text="@string/dialog_button_cancel"
android:minWidth="120dip"
android:minHeight="48dip"/>
+
+ <Button android:id="@+id/addButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_alignParentRight="true"
+ android:text="@string/user_dictionary_add"
+ android:minWidth="120dip"
+ android:minHeight="48dip"/>
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout/user_dictionary_tools_edit_header.xml b/res/layout/user_dictionary_tools_edit_header.xml
index 5e4c5d6..f074cfc 100644
--- a/res/layout/user_dictionary_tools_edit_header.xml
+++ b/res/layout/user_dictionary_tools_edit_header.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/layout/user_dictionary_tools_list.xml b/res/layout/user_dictionary_tools_list.xml
index 4ebfbd8..3fa8888 100644
--- a/res/layout/user_dictionary_tools_list.xml
+++ b/res/layout/user_dictionary_tools_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,6 +19,13 @@
android:paddingTop="5sp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/user_dictionary_tools_list_title_words_count"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:gravity="right"
+ android:textColor="?android:attr/textColorPrimary"/>
<LinearLayout
android:orientation="horizontal"
android:gravity="center"
diff --git a/res/layout/user_dictionary_tools_list_header.xml b/res/layout/user_dictionary_tools_list_header.xml
deleted file mode 100644
index 3e5159c..0000000
--- a/res/layout/user_dictionary_tools_list_header.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
-
- 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.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
- android:layout_alignParentLeft="true"
- android:text="@string/user_dictionary_list_words_en"
- android:textColor="?android:attr/textColorPrimary"/>
- <TextView
- android:id="@+id/user_dictionary_tools_list_title_words_count"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
- android:layout_alignParentRight="true"
- android:textColor="?android:attr/textColorPrimary"/>
-</RelativeLayout>
diff --git a/res/layout/user_dictionary_tools_list_header_ja.xml b/res/layout/user_dictionary_tools_list_header_ja.xml
deleted file mode 100644
index 0db6f27..0000000
--- a/res/layout/user_dictionary_tools_list_header_ja.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
-
- 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.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
- android:layout_alignParentLeft="true"
- android:text="@string/user_dictionary_list_words_ja"
- android:textColor="?android:attr/textColorPrimary"/>
- <TextView
- android:id="@+id/user_dictionary_tools_list_title_words_count"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
- android:layout_alignParentRight="true"
- android:textColor="?android:attr/textColorPrimary"/>
-</RelativeLayout>
diff --git a/res/values-ja/string.xml b/res/values-ja/string.xml
index 296da5a..3699a0d 100644
--- a/res/values-ja/string.xml
+++ b/res/values-ja/string.xml
@@ -1,6 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--
+ Copyright (C) 2008-2011 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -40,15 +55,18 @@
<string name="preference_keyboard_simple">シンプル</string>
<string name="preference_keyboard_metal">メタリック</string>
- <string name="preference_conversion_menu">変換設定</string>
+ <string name="preference_conversion_menu_ja">日本語変換設定</string>
+ <string name="preference_conversion_menu_en">英語変換設定</string>
- <string name="preference_prediction_title">予測変換</string>
+ <string name="preference_prediction_title_ja">日本語予測変換</string>
+ <string name="preference_prediction_title_en">英語予測変換</string>
<string name="preference_prediction_summary">文字を入力すると変換候補を表示する</string>
- <string name="preference_correct_spell_title">入力ミス補正</string>
+ <string name="preference_correct_spell_title_en">英語入力ミス補正</string>
<string name="preference_correct_spell_summary">入力間違いの修正候補を表示する</string>
- <string name="preference_input_learning_title">候補学習</string>
+ <string name="preference_input_learning_title_ja">日本語候補学習</string>
+ <string name="preference_input_learning_title_en">英語候補学習</string>
<string name="preference_input_learning_summary">変換で確定した語句を学習する</string>
<string name="preference_aboutime_menu">IMEについて</string>
@@ -84,9 +102,6 @@
<!-- user dictionary -->
<string name="user_dictionary_list_words">単語一覧</string>
- <string name="user_dictionary_list_words_en">英語ユーザー辞書 単語一覧</string>
- <string name="user_dictionary_list_words_ja">日本語ユーザー辞書 単語一覧</string>
- <string name="user_dictionary_list_words_zhcn">中国語ユーザー辞書 単語一覧</string>
<string name="user_dictionary_edit_words">単語編集</string>
<string name="user_dictionary_title_read">読み</string>
<string name="user_dictionary_title_candidate">表記</string>
@@ -103,18 +118,28 @@
<!-- IME dependency -->
<!-- OpenWnn English -->
- <string name="openwnn_english_copyright">Ver.1.3.5\nオムロン ソフトウェア(株)</string>
+ <string name="openwnn_english_copyright">Ver.1.3.6\nオムロン ソフトウェア(株)</string>
<!-- OpenWnn Japanese -->
- <string name="openwnn_japanese_copyright">Ver.1.3.5\nオムロン ソフトウェア(株)</string>
+ <string name="openwnn_japanese_copyright">Ver.1.3.6\nオムロン ソフトウェア(株)</string>
<!-- OpenWnn Chinese -->
- <string name="openwnn_china_copyright">Ver.1.3.5\nオムロン ソフトウェア(株)</string>
+ <string name="openwnn_china_copyright">Ver.1.3.6\nオムロン ソフトウェア(株)</string>
- <!-- Candidate Delete -->
- <string name="button_candidate_select">選 択</string>
- <string name="button_candidate_delete">学習削除</string>
- <string name="button_candidate_cancel">閉じる</string>
+ <!-- Candidate Delete -->
+ <string name="button_candidate_select">選 択</string>
+ <string name="button_candidate_delete">学習削除</string>
+
+ <!-- Candidate -->
+ <string name="cand_tab_symbol_txt">記号</string>
+ <string name="cand_tab_emoticon_txt">顔文字</string>
+
+ <!-- Symbol -->
+ <string name="half_symbol_txt">記号(半角)</string>
+ <string name="full_symbol_txt">記号(全角)</string>
+
+ <!-- Symbol keyboard -->
+ <string name="key_symbol_mode">戻る</string>
<!-- Tutorial -->
<string name="touch_to_continue">次へ >></string>
@@ -132,5 +157,15 @@
<string name="tip_to_step5"><b>入力が完了したら、携帯の\n「戻る」キー(←)を押して\nキーボードを閉じます。</b></string>
<string name="tip_to_step6"><b>これでチュートリアルは終わりです。</b></string>
+ <string name="ti_input_mode_full_hirakana_title_txt">ひらがな漢字</string>
+ <string name="ti_input_mode_full_katakana_title_txt">全角カタカナ</string>
+ <string name="ti_input_mode_half_katakana_title_txt">半角カタカナ</string>
+ <string name="ti_input_mode_full_alphabet_title_txt">全角英字</string>
+ <string name="ti_input_mode_half_alphabet_title_txt">半角英字</string>
+ <string name="ti_input_mode_full_number_title_txt">全角数字</string>
+ <string name="ti_input_mode_half_number_title_txt">半角数字</string>
+
+ <string name="ti_long_press_dialog_input_mode_txt">入力モード切替</string>
+
</resources>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
new file mode 100644
index 0000000..f5606b4
--- /dev/null
+++ b/res/values-land/dimens.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <!-- key_height x 4 = keyboard_height -->
+ <!-- key_height = symbol_keyboard_height -->
+ <dimen name="key_height">40dip</dimen>
+ <dimen name="key_height_voice">80dip</dimen>
+ <dimen name="key_height_4">40dip</dimen>
+ <dimen name="key_height_5">36dip</dimen>
+ <dimen name="key_height_5_bottom">68dip</dimen>
+ <dimen name="key_height_adjustment">4dip</dimen>
+ <dimen name="key_height_4key">46dip</dimen>
+ <dimen name="candidate_delete_word_size">18dip</dimen>
+ <dimen name="key_text_size">17.5dip</dimen>
+ <dimen name="cand_space_width_emoji_symbol">0dip</dimen>
+ <dimen name="keyboard_height">160dip</dimen>
+ <dimen name="symbol_keyboard_height">40dip</dimen>
+ <dimen name="key_label_text_size">12dip</dimen>
+</resources>
diff --git a/res/values-sw768dp-land/dimens.xml b/res/values-sw768dp-land/dimens.xml
new file mode 100644
index 0000000..1e5a65a
--- /dev/null
+++ b/res/values-sw768dp-land/dimens.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <dimen name="key_height">85dip</dimen>
+ <dimen name="key_height_4">46dip</dimen>
+ <dimen name="key_height_4key">85dip</dimen>
+ <dimen name="candidate_delete_word_size">40dip</dimen>
+ <dimen name="key_text_size">30sp</dimen>
+ <dimen name="cand_space_width_emoji_symbol">0dip</dimen>
+ <dimen name="keyboard_height">340dip</dimen>
+ <dimen name="symbol_keyboard_height">85dip</dimen>
+ <dimen name="key_label_text_size">26sp</dimen>
+</resources>
diff --git a/res/values-sw768dp/colors.xml b/res/values-sw768dp/colors.xml
new file mode 100644
index 0000000..03d157d
--- /dev/null
+++ b/res/values-sw768dp/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <color name="candidate_text">#FFFFFFFF</color>
+ <color name="candidate_back">#FF000000</color>
+</resources>
diff --git a/res/values-sw768dp/dimens.xml b/res/values-sw768dp/dimens.xml
new file mode 100644
index 0000000..733c66c
--- /dev/null
+++ b/res/values-sw768dp/dimens.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <dimen name="cand_minimum_height">60dip</dimen>
+ <dimen name="key_height">73dip</dimen>
+ <dimen name="key_height_4">50dip</dimen>
+ <dimen name="key_height_4key">73dip</dimen>
+ <dimen name="candidate_delete_word_size">40dip</dimen>
+ <dimen name="key_label_text_size">20sp</dimen>
+ <dimen name="key_text_size">24sp</dimen>
+ <dimen name="cand_normal_text_size">20sp</dimen>
+ <dimen name="cand_category_text_size">20sp</dimen>
+ <dimen name="cand_minimum_width">52dip</dimen>
+ <dimen name="cand_space_width">20dip</dimen>
+ <dimen name="cand_category_minimum_height">25dip</dimen>
+ <dimen name="cand_left_align_threshold">80dip</dimen>
+ <dimen name="keyboard_height">292dip</dimen>
+ <dimen name="symbol_keyboard_height">73dip</dimen>
+ <dimen name="tab_text_size">18sp</dimen>
+ <dimen name="candidate_layout_width">36dp</dimen>
+ <dimen name="candidate_layout_height">60dp</dimen>
+</resources>
diff --git a/res/values-zh-rCN/string.xml b/res/values-zh-rCN/string.xml
index 1f798a8..0d10514 100644
--- a/res/values-zh-rCN/string.xml
+++ b/res/values-zh-rCN/string.xml
@@ -1,6 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--
+ Copyright (C) 2008-2011 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -36,15 +51,18 @@
<string name="preference_keyboard_skin_title">键盘自定义</string>
<string name="preference_keyboard_skin_summary">切换到键盘自定义功能。</string>
- <string name="preference_conversion_menu">输入设定</string>
+ <string name="preference_conversion_menu_ja">日语用输入设定</string>
+ <string name="preference_conversion_menu_en">英语用输入设定</string>
- <string name="preference_prediction_title">预测输入</string>
+ <string name="preference_prediction_title_ja">日语用预测输入</string>
+ <string name="preference_prediction_title_en">英语用预测输入</string>
<string name="preference_prediction_summary">显示预测候选字词。</string>
- <string name="preference_correct_spell_title">错误修正</string>
+ <string name="preference_correct_spell_title_en">英语用错误修正</string>
<string name="preference_correct_spell_summary">修正错误输入并显示正确的候补词。</string>
- <string name="preference_input_learning_title">学习词典</string>
+ <string name="preference_input_learning_title_ja">日语用学习词典</string>
+ <string name="preference_input_learning_title_en">英语用学习词典</string>
<string name="preference_input_learning_summary">将输入的字词保存在学习词典。</string>
<string name="preference_aboutime_menu">关于IME</string>
@@ -80,9 +98,6 @@
<!-- user dictionary -->
<string name="user_dictionary_list_words">单词一览</string>
- <string name="user_dictionary_list_words_en">英语用户词典 单词一览</string>
- <string name="user_dictionary_list_words_ja">日语用户词典 单词一览</string>
- <string name="user_dictionary_list_words_zhcn">中文用户词典 单词一览</string>
<string name="user_dictionary_edit_words">单词编辑</string>
<string name="user_dictionary_title_read">读音</string>
<string name="user_dictionary_title_candidate">候补词</string>
@@ -99,6 +114,16 @@
<string name="button_candidate_select">选择</string>
<string name="button_candidate_delete">删除</string>
- <string name="button_candidate_cancel">关闭</string>
+
+ <string name="ti_input_mode_full_hirakana_title_txt">平假名-汉字</string>
+ <string name="ti_input_mode_full_katakana_title_txt">全角片假名</string>
+ <string name="ti_input_mode_half_katakana_title_txt">半角片假名</string>
+ <string name="ti_input_mode_full_alphabet_title_txt">全角字母</string>
+ <string name="ti_input_mode_half_alphabet_title_txt">半角字母</string>
+ <string name="ti_input_mode_full_number_title_txt">全角数字</string>
+ <string name="ti_input_mode_half_number_title_txt">半角数字</string>
+
+ <string name="ti_long_press_dialog_input_mode_txt">输入模式</string>
+
</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 740668a..f0657de 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
new file mode 100644
index 0000000..5b86598
--- /dev/null
+++ b/res/values/attrs.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <declare-styleable name="WnnKeyboardView">
+ <!-- 2nd 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. -->
+ <attr name="keyBackground2nd" format="reference" />
+ <attr name="keyTextColor2nd" format="color" />
+ </declare-styleable>
+
+ <declare-styleable name="WnnKeyboard_Key">
+ <!-- Whether this is 2nd key -->
+ <attr name="isSecondKey" format="boolean" />
+ </declare-styleable>
+</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 66c1d9a..cfd19e0 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,16 +15,31 @@
limitations under the License.
-->
<resources>
- <color name="candidate_text">#ff404040</color>
- <color name="candidate_back">#FFEFEBEF</color>
+ <color name="candidate_text">#FFFFFFFF</color>
+ <color name="candidate_text_1line">#FFFFFFFF</color>
+ <color name="candidate_back">#222222</color>
+ <color name="candidate_back_1line">#FF000000</color>
+ <color name="candidate_tab_back">#FF000000</color>
<color name="indicator_textcolor_default">#0032CD32</color>
- <color name="indicator_textcolor_caps_off">#0032CD32</color>
- <color name="indicator_textcolor_caps_on">#Cd32CD32</color>
+ <color name="indicator_textcolor_caps_off">#FFC0C0C0</color>
+ <color name="indicator_textcolor_caps_on">#CD32CD32</color>
<color name="indicator_textcolor_caps_lock">#FF32CD32</color>
- <color name="indicator_textcolor_alt_off">#00ff8800</color>
- <color name="indicator_textcolor_alt_on">#CDff8800</color>
- <color name="indicator_textcolor_alt_lock">#ffff8800</color>
- <color name="indicator_textbackground_default">#fff0f0f0</color>
+ <color name="indicator_textcolor_alt_off">#FFC0C0C0</color>
+ <color name="indicator_textcolor_alt_on">#CDFF8800</color>
+ <color name="indicator_textcolor_alt_lock">#FFFF8800</color>
+ <color name="indicator_textbackground_default">#FFF0F0F0</color>
<color name="indicator_background_lock_caps">#5532CD32</color>
- <color name="indicator_background_lock_alt">#55ff8800</color>
+ <color name="indicator_background_lock_alt">#55FF8800</color>
+ <color name="keybord_textcolor_default">#FFFFFFFF</color>
+ <color name="candidate_webapi_text">#FF0000FF</color>
+ <color name="nocandidate_text">#400000FF</color>
+ <color name="key_text_color">#FFFFFFFF</color>
+ <color name="key_text_color_2nd">#FFFFFFFF</color>
+ <color name="key_text_color_std">#FFFFFFFF</color>
+ <color name="symbol_tab">#FF000000</color>
+ <color name="symbol_tab_gray">#FFAAAAAA</color>
+ <color name="tab_textcolor_select">#FFFFFFFF</color>
+ <color name="tab_textcolor_no_select">#FFFFFFFF</color>
+ <color name="tab_textcolor_disable">#FF404040</color>
+ <color name="candidate_longpress_dialog_text">#FF000000</color>
</resources>
diff --git a/res/values/debug_tool_values.xml b/res/values/debug_tool_values.xml
new file mode 100644
index 0000000..20b51aa
--- /dev/null
+++ b/res/values/debug_tool_values.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<resources>
+ <string name="openwnn_label">OpenWnn</string>
+ <string name="app_openwnn_test">OpenWnn onEvent() Test</string>
+ <string name="execButton">Execute onEvent Test</string>
+ <string name="openwnn_engine_label">OpenWnnEngine</string>
+ <string name="execButton2">Engine All</string>
+
+ <string name="debug_openwnn_engine_en">OpenWnnEngineEN</string>
+ <string name="debug_openwnn_engine_jajp">OpenWnnEngineJAJP</string>
+ <string name="debug_openwnn_engine_znch">OpenWnnEngineZNCH</string>
+ <string name="debug_texttype_anything">textType:anything</string>
+ <string name="debug_texttype_integer">textType:integer</string>
+ <string name="debug_texttype_signed">textType:signed</string>
+ <string name="debug_texttype_demical">textType:demical</string>
+ <string name="debug_texttype_password">textType:password</string>
+ <string name="debug_texttype_phone">textType:phoneNumber</string>
+ <string name="debug_texttype_singleLine">android:singleLine</string>
+ <string name="debug_texttype_date_time">android:inputType</string>
+</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d90f9aa..0bc61d0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,10 +15,38 @@
limitations under the License.
-->
<resources>
+ <!-- key_height x 4 = keyboard_height -->
+ <!-- key_height = symbol_keyboard_height -->
<dimen name="key_height">50dip</dimen>
+ <dimen name="key_height_4">50dip</dimen>
+ <dimen name="key_height_5">40dip</dimen>
+ <dimen name="key_height_5_bottom">60dip</dimen>
+ <dimen name="key_height_qwerty">44dip</dimen>
<dimen name="key_height_landscape">34dip</dimen>
- <dimen name="candidate_font_size">20sp</dimen>
- <dimen name="candidate_delete_word_size">28px</dimen>
- <dimen name="candidate_delete_word_size_landscape">24px</dimen>
+ <dimen name="key_height_adjustment">0dip</dimen>
+ <dimen name="key_height_4key">50dip</dimen>
+ <dimen name="candidate_delete_word_size">28dip</dimen>
+ <dimen name="key_label_text_size">12dip</dimen>
+ <dimen name="key_text_size">22dip</dimen>
+ <dimen name="cand_normal_text_size">18sp</dimen>
+ <dimen name="cand_category_text_size">18dip</dimen>
+ <dimen name="cand_minimum_width">52dip</dimen>
+ <dimen name="cand_minimum_height">37dip</dimen>
+ <dimen name="cand_space_width">20dip</dimen>
+ <dimen name="cand_space_width_emoji_symbol">4dip</dimen>
+ <dimen name="cand_category_minimum_height">25dip</dimen>
+ <dimen name="cand_left_align_threshold">80dip</dimen>
+ <dimen name="keyboard_height">200dip</dimen>
+ <dimen name="symbol_keyboard_height">50dip</dimen>
+ <dimen name="preview_offset_candidate">37dip</dimen>
+ <dimen name="preview_offset_symbol">148dip</dimen>
+ <dimen name="tab_text_size">18dip</dimen>
+ <dimen name="list_preference_span_string_gap">22dip</dimen>
+ <dimen name="list_preference_span_image_gap">11dip</dimen>
+ <dimen name="list_preference_span_right_gap">10dip</dimen>
+ <dimen name="candidate_layout_width">36dp</dimen>
+ <dimen name="candidate_layout_height">60dp</dimen>
<dimen name="bubble_pointer_offset">22dip</dimen>
-</resources>
+ <dimen name="candidate_longpress_dialog_button_word_size">12dip</dimen>
+ <dimen name="candidate_longpress_dialog_candidate_word_size">28dip</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 883a927..e9e1019 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1,6 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--
+ Copyright (C) 2008-2011 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -41,14 +56,21 @@
<string name="preference_keyboard_metal">Metal</string>
<string name="preference_conversion_menu">Conversion</string>
+ <string name="preference_conversion_menu_ja">Japanese Conversion</string>
+ <string name="preference_conversion_menu_en">English Conversion</string>
<string name="preference_prediction_title">Word Prediction</string>
+ <string name="preference_prediction_title_ja">Japanese Word Prediction</string>
+ <string name="preference_prediction_title_en">English Word Prediction</string>
<string name="preference_prediction_summary">Display predicted words as conversion candidates.</string>
<string name="preference_correct_spell_title">Typing Error Correction</string>
+ <string name="preference_correct_spell_title_en">English Typing Error Correction</string>
<string name="preference_correct_spell_summary">Display predicted words for correcting typing error.</string>
<string name="preference_input_learning_title">Input Word Learning</string>
+ <string name="preference_input_learning_title_ja">Japanese Input Word Learning</string>
+ <string name="preference_input_learning_title_en">English Input Word Learning</string>
<string name="preference_input_learning_summary">Learn input words.</string>
<string name="preference_aboutime_menu"> About IME </string>
@@ -84,9 +106,9 @@
<!-- user dictionary -->
<string name="user_dictionary_list_words">Registered words</string>
- <string name="user_dictionary_list_words_en">Registered words in English User Dic</string>
- <string name="user_dictionary_list_words_ja">Registered words in Japanese User Dic</string>
- <string name="user_dictionary_list_words_zhcn">Registered words in Chinese User Dic</string>
+ <string name="user_dictionary_list_words_en">@string/preference_dictionary_menu_en</string>
+ <string name="user_dictionary_list_words_ja">@string/preference_dictionary_menu_ja</string>
+ <string name="user_dictionary_list_words_zhcn">@string/preference_dictionary_menu_zhcn</string>
<string name="user_dictionary_edit_words">Edit</string>
<string name="user_dictionary_title_read">Reading</string>
<string name="user_dictionary_title_candidate">Word</string>
@@ -105,33 +127,44 @@
<!-- IME dependency -->
<!-- OpenWnn English -->
- <string name="openwnn_english_copyright">Ver.1.3.5\nOMRON SOFTWARE Co., Ltd.</string>
+ <string name="openwnn_english_copyright">Ver.1.3.6\nOMRON SOFTWARE Co.,Ltd.</string>
<string name="openwnn_english">OpenWnn English</string>
<string name="openwnn_english_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnEngDic.so</string>
<string name="openwnn_english_writable_dictionary">/data/data/jp.co.omronsoft.openwnn/writableEN.dic</string>
<string name="en_word_separators">.,;:!?</string>
<!-- OpenWnn Japanese -->
- <string name="openwnn_japanese_copyright">Ver.1.3.5\nOMRON SOFTWARE Co., Ltd.</string>
+ <string name="openwnn_japanese_copyright">Ver.1.3.6\nOMRON SOFTWARE Co.,Ltd.</string>
<string name="openwnn_japanese">Japanese IME</string>
<string name="openwnn_japanese_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnJpnDic.so</string>
<string name="openwnn_japanese_writable_dictionary">/data/data/jp.co.omronsoft.openwnn/writableJAJP.dic</string>
<!-- OpenWnn Chinese -->
- <string name="openwnn_china_copyright">Ver.1.3.5\nOMRON SOFTWARE Co., Ltd.</string>
+ <string name="openwnn_china_copyright">Ver.1.3.6\nOMRON SOFTWARE Co.,Ltd.</string>
<string name="openwnn_china">OpenWnn Chinese</string>
<string name="openwnn_china_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnZHCNDic.so</string>
-<!-- After Config Change -->
+ <!-- After Config Change -->
<string name="openwnn_china_writable_dictionary">/data/data/jp.co.omronsoft.openwnn/writableZHCN.dic</string>
<string name="cn_word_separators">.,;:!?</string>
- <!-- Candidate Delete -->
- <string name="button_candidate_select">Select</string>
- <string name="button_candidate_delete">Delete learning?</string>
- <string name="button_candidate_cancel">Close</string>
+ <!-- Candidate Delete -->
+ <string name="button_candidate_select">Select</string>
+ <string name="button_candidate_delete">Delete learning?</string>
+ <!-- Candidate -->
+ <string name="cand_tab_symbol_txt">Symbol</string>
+ <string name="cand_tab_emoticon_txt">Emoticon</string>
- <!-- Key top -->
+ <!-- Symbol -->
+ <string name="half_symbol_categories_txt">[Half Symbol Categories]</string>
+ <string name="full_symbol_categories_txt">[Full Symbol Categories]</string>
+ <string name="half_symbol_txt">Symbol(Half)</string>
+ <string name="full_symbol_txt">Symbol(Full)</string>
+
+ <!-- Symbol keyboard -->
+ <string name="key_symbol_mode">Cancel</string>
+
+ <!-- Key top -->
<string name="key_left_arrow">↤</string>
<string name="key_right_arrow">↦</string>
<string name="key_space">スペース</string>
@@ -216,6 +249,7 @@
<string name="key_qwerty_full_yen_sign">¥</string>
<string name="key_qwerty_full_hat">^</string>
<string name="key_qwerty_full_slash">/</string>
+ <string name="key_qwerty_euro">\u20AC</string>
<string name="key_12key_switch_full_hiragana">あ</string>
<string name="key_12key_switch_full_katakana">カ</string>
@@ -235,7 +269,6 @@
<string name="indicator_caps">CAPS</string>
<string name="indicator_alt">ALT</string>
-
<!-- Tutorial -->
<string name="touch_to_continue">Next »</string>
<string name="touch_to_try">Try it on the button below.</string>
@@ -256,5 +289,18 @@
<string name="tip_en_to_close_keyboard"><b>Press \"back\" (←) to close the keyboard.</b></string>
<string name="tip_en_end_of_tutorial"><b>This is the end of the tutorial.</b></string>
+ <!-- subtype String -->
+ <string name="label_subtype_generic">%s</string>
+
+ <string name="ti_input_mode_full_hirakana_title_txt">Hiragana-Kanji</string>
+ <string name="ti_input_mode_full_katakana_title_txt">Full-width Katakana</string>
+ <string name="ti_input_mode_half_katakana_title_txt">Half-width Katakana</string>
+ <string name="ti_input_mode_full_alphabet_title_txt">Full-width Alphabet</string>
+ <string name="ti_input_mode_half_alphabet_title_txt">Half-width Alphabet</string>
+ <string name="ti_input_mode_full_number_title_txt">Full-width Numeric</string>
+ <string name="ti_input_mode_half_number_title_txt">Half-width Numeric</string>
+
+ <string name="ti_long_press_dialog_input_mode_txt">Input Mode</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644
index 0000000..e129d73
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<resources>
+ <style name="WnnKeyboardView" parent="@android:style/Widget.KeyboardView">
+ </style>
+ <style name="Dialog" parent="android:style/Theme.Holo.Light.Dialog">
+ <item name="android:windowNoTitle">true</item>
+ </style>
+</resources>
diff --git a/res/xml-land/keyboard_qwerty_jp.xml b/res/xml-land/keyboard_qwerty_jp.xml
new file mode 100644
index 0000000..b0c2bee
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="44" android:keyLabel="@string/key_qwerty_full_touten"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_alphabet.xml b/res/xml-land/keyboard_qwerty_jp_full_alphabet.xml
new file mode 100644
index 0000000..f1815da
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_alphabet.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="65361" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65367" android:keyLabel="w"/>
+ <Key android:codes="65349" android:keyLabel="e"/>
+ <Key android:codes="65362" android:keyLabel="r"/>
+ <Key android:codes="65364" android:keyLabel="t"/>
+ <Key android:codes="65369" android:keyLabel="y"/>
+ <Key android:codes="65365" android:keyLabel="u"/>
+ <Key android:codes="65353" android:keyLabel="i"/>
+ <Key android:codes="65359" android:keyLabel="o"/>
+ <Key android:codes="65360" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="65345" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65363" android:keyLabel="s"/>
+ <Key android:codes="65348" android:keyLabel="d"/>
+ <Key android:codes="65350" android:keyLabel="f"/>
+ <Key android:codes="65351" android:keyLabel="g"/>
+ <Key android:codes="65352" android:keyLabel="h"/>
+ <Key android:codes="65354" android:keyLabel="j"/>
+ <Key android:codes="65355" android:keyLabel="k"/>
+ <Key android:codes="65356" android:keyLabel="l"/>
+ <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="65370" android:keyLabel="z"/>
+ <Key android:codes="65368" android:keyLabel="x"/>
+ <Key android:codes="65347" android:keyLabel="c"/>
+ <Key android:codes="65366" android:keyLabel="v"/>
+ <Key android:codes="65346" android:keyLabel="b"/>
+ <Key android:codes="65358" android:keyLabel="n"/>
+ <Key android:codes="65357" android:keyLabel="m"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_alphabet_shift.xml b/res/xml-land/keyboard_qwerty_jp_full_alphabet_shift.xml
new file mode 100644
index 0000000..53bcfde
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_alphabet_shift.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="65329" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65335" android:keyLabel="W"/>
+ <Key android:codes="65317" android:keyLabel="E"/>
+ <Key android:codes="65330" android:keyLabel="R"/>
+ <Key android:codes="65332" android:keyLabel="T"/>
+ <Key android:codes="65337" android:keyLabel="Y"/>
+ <Key android:codes="65333" android:keyLabel="U"/>
+ <Key android:codes="65321" android:keyLabel="I"/>
+ <Key android:codes="65327" android:keyLabel="O"/>
+ <Key android:codes="65328" android:keyLabel="P" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="65313" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65331" android:keyLabel="S"/>
+ <Key android:codes="65316" android:keyLabel="D"/>
+ <Key android:codes="65318" android:keyLabel="F"/>
+ <Key android:codes="65319" android:keyLabel="G"/>
+ <Key android:codes="65320" android:keyLabel="H"/>
+ <Key android:codes="65322" android:keyLabel="J"/>
+ <Key android:codes="65323" android:keyLabel="K"/>
+ <Key android:codes="65324" android:keyLabel="L"/>
+ <Key android:codes="65295" android:keyLabel="@string/key_qwerty_full_slash"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="65338" android:keyLabel="Z"/>
+ <Key android:codes="65336" android:keyLabel="X"/>
+ <Key android:codes="65315" android:keyLabel="C"/>
+ <Key android:codes="65334" android:keyLabel="V"/>
+ <Key android:codes="65314" android:keyLabel="B"/>
+ <Key android:codes="65326" android:keyLabel="N"/>
+ <Key android:codes="65325" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_katakana.xml b/res/xml-land/keyboard_qwerty_jp_full_katakana.xml
new file mode 100644
index 0000000..752d41c
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_katakana.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="12289" android:keyLabel="@string/key_qwerty_full_touten"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_katakana_shift.xml b/res/xml-land/keyboard_qwerty_jp_full_katakana_shift.xml
new file mode 100644
index 0000000..2a086aa
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_katakana_shift.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_symbols.xml b/res/xml-land/keyboard_qwerty_jp_full_symbols.xml
new file mode 100644
index 0000000..281f6a8
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_symbols.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65298" android:keyLabel="2"/>
+ <Key android:codes="65299" android:keyLabel="3"/>
+ <Key android:codes="65300" android:keyLabel="4"/>
+ <Key android:codes="65301" android:keyLabel="5"/>
+ <Key android:codes="65302" android:keyLabel="6"/>
+ <Key android:codes="65303" android:keyLabel="7"/>
+ <Key android:codes="65304" android:keyLabel="8"/>
+ <Key android:codes="65305" android:keyLabel="9"/>
+ <Key android:codes="65296" android:keyLabel="0" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65283" android:keyLabel="@string/key_qwerty_full_number_sign" />
+ <Key android:codes="65285" android:keyLabel="@string/key_qwerty_full_percent_sign" />
+ <Key android:codes="65286" android:keyLabel="@string/key_qwerty_full_ampersand" />
+ <Key android:codes="65290" android:keyLabel="@string/key_qwerty_full_asterrisk" />
+ <Key android:codes="65291" android:keyLabel="@string/key_qwerty_full_plus_sign" />
+ <Key android:codes="65293" android:keyLabel="@string/key_qwerty_full_minus_sign" />
+ <Key android:codes="65309" android:keyLabel="@string/key_qwerty_full_equal_sign" />
+ <Key android:codes="12300" android:keyLabel="@string/key_qwerty_kagi_kakko_left" />
+ <Key android:codes="12301" android:keyLabel="@string/key_qwerty_kagi_kakko_right" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="65295" android:keyLabel="@string/key_qwerty_full_slash" />
+ <Key android:codes="65288" android:keyLabel="@string/key_qwerty_full_left_parenthesis" />
+ <Key android:codes="65289" android:keyLabel="@string/key_qwerty_full_right_parenthesis" />
+ <Key android:codes="65306" android:keyLabel="@string/key_qwerty_full_colon" />
+ <Key android:codes="65307" android:keyLabel="@string/key_qwerty_full_semicolon" />
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark" />
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question" />
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true" />
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_full_symbols_shift.xml b/res/xml-land/keyboard_qwerty_jp_full_symbols_shift.xml
new file mode 100644
index 0000000..014dbbb
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_full_symbols_shift.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65298" android:keyLabel="2"/>
+ <Key android:codes="65299" android:keyLabel="3"/>
+ <Key android:codes="65300" android:keyLabel="4"/>
+ <Key android:codes="65301" android:keyLabel="5"/>
+ <Key android:codes="65302" android:keyLabel="6"/>
+ <Key android:codes="65303" android:keyLabel="7"/>
+ <Key android:codes="65304" android:keyLabel="8"/>
+ <Key android:codes="65305" android:keyLabel="9"/>
+ <Key android:codes="65296" android:keyLabel="0" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="65374" android:keyLabel="@string/key_qwerty_full_thilde" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="65342" android:keyLabel="@string/key_qwerty_full_hat"/>
+ <Key android:codes="65509" android:keyLabel="@string/key_qwerty_full_yen_sign"/>
+ <Key android:codes="65284" android:keyLabel="@string/key_qwerty_full_dollar_sign"/>
+ <Key android:codes="8221" android:keyLabel="@string/key_qwerty_full_double_quotation_sign"/>
+ <Key android:codes="177" android:keyLabel="@string/key_qwerty_full_plus_minus_sign" />
+ <Key android:codes="65343" android:keyLabel="@string/key_qwerty_full_underscore"/>
+ <Key android:codes="65340" android:keyLabel="@string/key_qwerty_full_back_slash"/>
+ <Key android:codes="65371" android:keyLabel="@string/key_qwerty_full_left_curly_blacket"/>
+ <Key android:codes="65373" android:keyLabel="@string/key_qwerty_full_right_curly_blacket" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="65372" android:keyLabel="@string/key_qwerty_full_vertical_bar"/>
+ <Key android:codes="65308" android:keyLabel="@string/key_qwerty_full_less_than_sign"/>
+ <Key android:codes="65310" android:keyLabel="@string/key_qwerty_full_greater_than_sign"/>
+ <Key android:codes="8216" android:keyLabel="@string/key_qwerty_full_left_single_quote"/>
+ <Key android:codes="8217" android:keyLabel="@string/key_qwerty_full_right_single_quote"/>
+ <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma" />
+ <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period" />
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true" />
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_alphabet.xml b/res/xml-land/keyboard_qwerty_jp_half_alphabet.xml
new file mode 100644
index 0000000..7022546
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_alphabet.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="44" android:keyLabel=","/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="."/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_alphabet_shift.xml b/res/xml-land/keyboard_qwerty_jp_half_alphabet_shift.xml
new file mode 100644
index 0000000..8dd1403
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_alphabet_shift.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="47" android:keyLabel="/" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_katakana.xml b/res/xml-land/keyboard_qwerty_jp_half_katakana.xml
new file mode 100644
index 0000000..2ba273d
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_katakana.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="65392" android:keyLabel="@string/key_qwerty_half_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_katakana_shift.xml b/res/xml-land/keyboard_qwerty_jp_half_katakana_shift.xml
new file mode 100644
index 0000000..fa48feb
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_katakana_shift.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="65392" android:keyLabel="@string/key_qwerty_half_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_symbols.xml b/res/xml-land/keyboard_qwerty_jp_half_symbols.xml
new file mode 100644
index 0000000..47676ca
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_symbols.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="50" android:keyLabel="2"/>
+ <Key android:codes="51" android:keyLabel="3"/>
+ <Key android:codes="52" android:keyLabel="4"/>
+ <Key android:codes="53" android:keyLabel="5"/>
+ <Key android:codes="54" android:keyLabel="6"/>
+ <Key android:codes="55" android:keyLabel="7"/>
+ <Key android:codes="56" android:keyLabel="8"/>
+ <Key android:codes="57" android:keyLabel="9"/>
+ <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="35" android:keyLabel="\#"/>
+ <Key android:codes="37" android:keyLabel="%"/>
+ <Key android:codes="38" android:keyLabel="&"/>
+ <Key android:codes="42" android:keyLabel="*"/>
+ <Key android:codes="43" android:keyLabel="+"/>
+ <Key android:codes="45" android:keyLabel="-"/>
+ <Key android:codes="61" android:keyLabel="="/>
+ <Key android:codes="91" android:keyLabel="["/>
+ <Key android:codes="93" android:keyLabel="]" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="47" android:keyLabel="/" />
+ <Key android:codes="40" android:keyLabel="("/>
+ <Key android:codes="41" android:keyLabel=")"/>
+ <Key android:codes="58" android:keyLabel=":"/>
+ <Key android:codes="59" android:keyLabel=";"/>
+ <Key android:codes="33" android:keyLabel="!" />
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="44" android:keyLabel=","/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="."/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_half_symbols_shift.xml b/res/xml-land/keyboard_qwerty_jp_half_symbols_shift.xml
new file mode 100644
index 0000000..a5bc804
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_half_symbols_shift.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="50" android:keyLabel="2"/>
+ <Key android:codes="51" android:keyLabel="3"/>
+ <Key android:codes="52" android:keyLabel="4"/>
+ <Key android:codes="53" android:keyLabel="5"/>
+ <Key android:codes="54" android:keyLabel="6"/>
+ <Key android:codes="55" android:keyLabel="7"/>
+ <Key android:codes="56" android:keyLabel="8"/>
+ <Key android:codes="57" android:keyLabel="9"/>
+ <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="126" android:keyLabel="~" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="94" android:keyLabel="^"/>
+ <Key android:codes="165" android:keyLabel="¥"/>
+ <Key android:codes="36" android:keyLabel="$"/>
+ <Key android:codes="34" android:keyLabel="""/>
+ <Key android:codes="43" android:keyLabel="+" />
+ <Key android:codes="95" android:keyLabel="_"/>
+ <Key android:codes="92" android:keyLabel="\\" />
+ <Key android:codes="123" android:keyLabel="{"/>
+ <Key android:codes="125" android:keyLabel="}" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="124" android:keyLabel="|"/>
+ <Key android:codes="60" android:keyLabel="<"/>
+ <Key android:codes="62" android:keyLabel=">"/>
+ <Key android:codes="96" android:keyLabel="`"/>
+ <Key android:codes="39" android:keyLabel="'"/>
+ <Key android:codes="44" android:keyLabel="," />
+ <Key android:codes="46" android:keyLabel="." />
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-land/keyboard_qwerty_jp_shift.xml b/res/xml-land/keyboard_qwerty_jp_shift.xml
new file mode 100644
index 0000000..c1e1f9e
--- /dev/null
+++ b/res/xml-land/keyboard_qwerty_jp_shift.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="0dip"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
+ android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
+ <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b"
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_12key_phone.xml b/res/xml-sw768dp/keyboard_12key_phone.xml
new file mode 100644
index 0000000..ecf7d6a
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_12key_phone.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="20%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-310" android:keyLabel=""
+ android:keyEdgeFlags="left" android:keyWidth="18%" pj:isSecondKey="true"/>
+ <Key android:codes="49" android:keyLabel="1" android:horizontalGap="2%"/>
+ <Key android:codes="50" android:keyLabel="2"/>
+ <Key android:codes="51" android:keyLabel="3"/>
+ <Key android:codes="-214"
+ android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" pj:isSecondKey="true"/>
+ <Key android:codes="52" android:keyLabel="4" android:horizontalGap="2%"/>
+ <Key android:codes="53" android:keyLabel="5"/>
+ <Key android:codes="54" android:keyLabel="6"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="45" android:keyLabel="-" android:keyWidth="18%" pj:isSecondKey="true"/>
+ <Key android:codes="55" android:keyLabel="7" android:horizontalGap="2%"/>
+ <Key android:codes="56" android:keyLabel="8"/>
+ <Key android:codes="57" android:keyLabel="9"/>
+ <Key android:codes="43" android:keyLabel="+" android:horizontalGap="2%" android:keyWidth="18%" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-310" android:keyLabel="" android:keyEdgeFlags="left" android:keyWidth="18%" pj:isSecondKey="true"/>
+ <Key android:codes="42" android:keyLabel="*" android:horizontalGap="2%"/>
+ <Key android:codes="48" android:keyLabel="0" />
+ <Key android:codes="35" android:keyLabel="#" />
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter"
+ android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" pj:isSecondKey="true"/>
+ </Row>
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp.xml b/res/xml-sw768dp/keyboard_qwerty_jp.xml
new file mode 100644
index 0000000..9b67157
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="113" android:keyLabel="q"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true" />
+ </Row>
+
+ <Row>
+ <Key android:codes="-304" android:keyLabel=".?123"
+ android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="97" android:keyLabel="a"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="12540" android:keyLabel="ー"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="9%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="44" android:keyLabel="、"/>
+ <Key android:codes="46" android:keyLabel="。"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-307" android:keyIcon="@drawable/key_mode_hira"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="12288" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols.xml b/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols.xml
new file mode 100644
index 0000000..2bb94ec
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p"/>
+ <Key android:codes="65297" android:keyLabel="1"/>
+ <Key android:codes="65298" android:keyLabel="2"/>
+ <Key android:codes="65299" android:keyLabel="3"/>
+ <Key android:codes="65300" android:keyLabel="4"/>
+ <Key android:codes="65301" android:keyLabel="5"/>
+ <Key android:codes="65302" android:keyLabel="6"/>
+ <Key android:codes="65303" android:keyLabel="7"/>
+ <Key android:codes="65304" android:keyLabel="8"/>
+ <Key android:codes="65305" android:keyLabel="9"/>
+ <Key android:codes="65296" android:keyLabel="0"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-301" android:keyLabel="ABC" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p"/>
+ <Key android:codes="65294" android:keyLabel="." />
+ <Key android:codes="65292" android:keyLabel="," />
+ <Key android:codes="65306" android:keyLabel=":"/>
+ <Key android:codes="65307" android:keyLabel=";"/>
+ <Key android:codes="65288" android:keyLabel="("/>
+ <Key android:codes="65289" android:keyLabel=")"/>
+ <Key android:codes="65509" android:keyLabel="¥"/>
+ <Key android:codes="65286" android:keyLabel="&"/>
+ <Key android:codes="65312" android:keyLabel="\@"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%"/>
+ <Key android:codes="65291" android:keyLabel="+"/>
+ <Key android:codes="65293" android:keyLabel="-"/>
+ <Key android:codes="65290" android:keyLabel="*" />
+ <Key android:codes="65295" android:keyLabel="/"/>
+ <Key android:codes="12300" android:keyLabel="「"/>
+ <Key android:codes="12301" android:keyLabel="」" />
+ <Key android:codes="12539" android:keyLabel="・" />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:horizontalGap="16.85%p" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-308" android:keyIcon="@drawable/key_mode_full_num"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="12288" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols_shift.xml b/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols_shift.xml
new file mode 100644
index 0000000..5e283af
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_full_symbols_shift.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p"/>
+ <Key android:codes="65339" android:keyLabel="[" />
+ <Key android:codes="65341" android:keyLabel="]" />
+ <Key android:codes="65371" android:keyLabel="{"/>
+ <Key android:codes="65373" android:keyLabel="}"/>
+ <Key android:codes="65283" android:keyLabel="\#"/>
+ <Key android:codes="65285" android:keyLabel="%"/>
+ <Key android:codes="65342" android:keyLabel="^"/>
+ <Key android:codes="65290" android:keyLabel="*"/>
+ <Key android:codes="65291" android:keyLabel="+"/>
+ <Key android:codes="65309" android:keyLabel="="/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-301" android:keyLabel="ABC" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p"/>
+ <Key android:codes="65343" android:keyLabel="_" />
+ <Key android:codes="65509" android:keyLabel="¥"/>
+ <Key android:codes="65372" android:keyLabel="|"/>
+ <Key android:codes="65374" android:keyLabel="~"/>
+ <Key android:codes="65308" android:keyLabel="<"/>
+ <Key android:codes="65310" android:keyLabel=">"/>
+ <Key android:codes="65284" android:keyLabel="$"/>
+ <Key android:codes="8364" android:keyLabel="@string/key_qwerty_euro"/>
+ <Key android:codes="65505" android:keyLabel="£"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift_locked" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%"/>
+ <Key android:codes="65294" android:keyLabel="." />
+ <Key android:codes="65292" android:keyLabel="," />
+ <Key android:codes="65311" android:keyLabel="\?" />
+ <Key android:codes="65281" android:keyLabel="!" />
+ <Key android:codes="8217" android:keyLabel="@string/key_qwerty_full_right_single_quote" />
+ <Key android:codes="8221" android:keyLabel="@string/key_qwerty_full_double_quotation_sign" />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:horizontalGap="24.85%p" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-308" android:keyIcon="@drawable/key_mode_full_num"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="12288" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet.xml b/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet.xml
new file mode 100644
index 0000000..82f2888
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%" />
+ <Key android:codes="113" android:keyLabel="q"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"/>
+ <Key android:codes="114" android:keyLabel="r"/>
+ <Key android:codes="116" android:keyLabel="t"/>
+ <Key android:codes="121" android:keyLabel="y"/>
+ <Key android:codes="117" android:keyLabel="u"/>
+ <Key android:codes="105" android:keyLabel="i"/>
+ <Key android:codes="111" android:keyLabel="o"/>
+ <Key android:codes="112" android:keyLabel="p"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-308" android:keyLabel=".?123" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%" />
+ <Key android:codes="97" android:keyLabel="a"/>
+ <Key android:codes="115" android:keyLabel="s"/>
+ <Key android:codes="100" android:keyLabel="d"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%"/>
+ <Key android:codes="122" android:keyLabel="z"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"/>
+ <Key android:codes="118" android:keyLabel="v"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="44" android:keyLabel="," />
+ <Key android:codes="46" android:keyLabel="." />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-301" android:keyIcon="@drawable/key_mode_half_alpha"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="32" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
+
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet_shift.xml b/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet_shift.xml
new file mode 100644
index 0000000..3d42ec8
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_half_alphabet_shift.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%" />
+ <Key android:codes="113" android:keyLabel="Q"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-308" android:keyLabel=".?123" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%" />
+ <Key android:codes="97" android:keyLabel="A"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift_locked" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%" />
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="33" android:keyLabel="!" />
+ <Key android:codes="63" android:keyLabel="\?" />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-301" android:keyIcon="@drawable/key_mode_half_alpha"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="32" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
+
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols.xml b/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols.xml
new file mode 100644
index 0000000..882649c
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="49" android:keyLabel="1"/>
+ <Key android:codes="50" android:keyLabel="2"/>
+ <Key android:codes="51" android:keyLabel="3"/>
+ <Key android:codes="52" android:keyLabel="4"/>
+ <Key android:codes="53" android:keyLabel="5"/>
+ <Key android:codes="54" android:keyLabel="6"/>
+ <Key android:codes="55" android:keyLabel="7"/>
+ <Key android:codes="56" android:keyLabel="8"/>
+ <Key android:codes="57" android:keyLabel="9"/>
+ <Key android:codes="48" android:keyLabel="0"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-307" android:keyLabel="ABC" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="46" android:keyLabel="." />
+ <Key android:codes="44" android:keyLabel="," />
+ <Key android:codes="58" android:keyLabel=":"/>
+ <Key android:codes="59" android:keyLabel=";"/>
+ <Key android:codes="40" android:keyLabel="("/>
+ <Key android:codes="41" android:keyLabel=")"/>
+ <Key android:codes="165" android:keyLabel="¥"/>
+ <Key android:codes="38" android:keyLabel="&"/>
+ <Key android:codes="64" android:keyLabel="\@"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="43" android:keyLabel="+"/>
+ <Key android:codes="45" android:keyLabel="-"/>
+ <Key android:codes="42" android:keyLabel="*"/>
+ <Key android:codes="47" android:keyLabel="/"/>
+ <Key android:codes="65378" android:keyLabel="「"/>
+ <Key android:codes="65379" android:keyLabel="」" />
+ <Key android:codes="183" android:keyLabel="・" />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:horizontalGap="16.9%p" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-304" android:keyIcon="@drawable/key_mode_half_num"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="32" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols_shift.xml b/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols_shift.xml
new file mode 100644
index 0000000..78c8e46
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_half_symbols_shift.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="91" android:keyLabel="[" />
+ <Key android:codes="93" android:keyLabel="]" />
+ <Key android:codes="123" android:keyLabel="{"/>
+ <Key android:codes="125" android:keyLabel="}"/>
+ <Key android:codes="35" android:keyLabel="\#"/>
+ <Key android:codes="37" android:keyLabel="%"/>
+ <Key android:codes="94" android:keyLabel="^"/>
+ <Key android:codes="42" android:keyLabel="*"/>
+ <Key android:codes="43" android:keyLabel="+"/>
+ <Key android:codes="61" android:keyLabel="="/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-307" android:keyLabel="ABC" android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="95" android:keyLabel="_" />
+ <Key android:codes="165" android:keyLabel="¥"/>
+ <Key android:codes="124" android:keyLabel="|"/>
+ <Key android:codes="126" android:keyLabel="~"/>
+ <Key android:codes="60" android:keyLabel="<"/>
+ <Key android:codes="62" android:keyLabel=">"/>
+ <Key android:codes="36" android:keyLabel="$"/>
+ <Key android:codes="8364" android:keyLabel="@string/key_qwerty_euro"/>
+ <Key android:codes="163" android:keyLabel="£"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="17%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift_locked" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="46" android:keyLabel="." />
+ <Key android:codes="44" android:keyLabel="," />
+ <Key android:codes="63" android:keyLabel="\?" />
+ <Key android:codes="33" android:keyLabel="!" />
+ <Key android:codes="39" android:keyLabel="@string/key_qwerty_full_right_single_quote" />
+ <Key android:codes="34" android:keyLabel="@string/key_qwerty_full_double_quotation_sign" />
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:horizontalGap="24.85%p" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-304" android:keyIcon="@drawable/key_mode_half_num"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="32" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/keyboard_qwerty_jp_shift.xml b/res/xml-sw768dp/keyboard_qwerty_jp_shift.xml
new file mode 100644
index 0000000..f355a4f
--- /dev/null
+++ b/res/xml-sw768dp/keyboard_qwerty_jp_shift.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:pj="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="7%p"
+ android:horizontalGap="0.9%p"
+ android:verticalGap="0.9%p"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="-106" android:keyLabel="記号" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="113" android:keyLabel="Q"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:keyWidth="12%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" pj:isSecondKey="true" />
+ </Row>
+
+ <Row>
+ <Key android:codes="-304" android:keyLabel=".?123"
+ android:keyWidth="10%p" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%p" />
+ <Key android:codes="97" android:keyLabel="A"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
+ <Key android:codes="12540" android:keyLabel="ー"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_return"
+ android:keyEdgeFlags="right" android:keyWidth="9%p" pj:isSecondKey="true"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift_locked" android:keyWidth="12.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" pj:isSecondKey="true" android:horizontalGap="0.1%"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="65281" android:keyLabel="!"/>
+ <Key android:codes="65311" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" pj:isSecondKey="true" android:isRepeatable="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:keyEdgeFlags="right" pj:isSecondKey="true" android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:rowEdgeFlags="bottom">
+ <Key android:codes="-307" android:keyIcon="@drawable/key_mode_hira"
+ android:keyWidth="12%p" android:horizontalGap="15%p" pj:isSecondKey="true"/>
+ <Key android:codes="12288" android:keyLabel=" " android:keyWidth="50%p" android:isRepeatable="true"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml-sw768dp/openwnn_pref_ja.xml b/res/xml-sw768dp/openwnn_pref_ja.xml
new file mode 100644
index 0000000..729c7f2
--- /dev/null
+++ b/res/xml-sw768dp/openwnn_pref_ja.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:key="openwnn_pref_ja">
+
+ <PreferenceCategory android:title="@string/preference_key_setting_menu">
+ <CheckBoxPreference android:key="key_sound"
+ android:title="@string/preference_key_sound_title"
+ android:summary="@string/preference_key_sound_summary"/>
+ <CheckBoxPreference android:key="key_vibration"
+ android:title="@string/preference_key_vibration_title"
+ android:summary="@string/preference_key_vibration_summary"/>
+ <CheckBoxPreference android:key="auto_caps"
+ android:title="@string/preference_auto_caps_title"
+ android:summary="@string/preference_auto_caps_summary"
+ android:defaultValue="true" />
+ <jp.co.omronsoft.openwnn.JAJP.KeyboardListPreferenceJAJP
+ android:key="keyboard_skin"
+ android:title="@string/preference_keyboard_skin_title"
+ android:summary="@string/preference_keyboard_skin_summary"
+ android:entries="@array/keyboard_skin"
+ android:entryValues="@array/keyboard_skin_id"
+ android:defaultValue="keyboard_android_default" />
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/preference_conversion_menu_ja">
+ <CheckBoxPreference android:key="opt_enable_learning_ja"
+ android:title="@string/preference_input_learning_title_ja"
+ android:summary="@string/preference_input_learning_summary"
+ android:defaultValue="true" />
+ <CheckBoxPreference android:key="opt_prediction_ja"
+ android:title="@string/preference_prediction_title_ja"
+ android:summary="@string/preference_prediction_summary"
+ android:defaultValue="true" />
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/preference_conversion_menu_en">
+ <CheckBoxPreference android:key="opt_enable_learning_en"
+ android:title="@string/preference_input_learning_title_en"
+ android:summary="@string/preference_input_learning_summary"
+ android:defaultValue="true" />
+ <CheckBoxPreference android:key="opt_prediction_en"
+ android:title="@string/preference_prediction_title_en"
+ android:summary="@string/preference_prediction_summary"
+ android:defaultValue="false" />
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/preference_dictionary_menu">
+ <PreferenceScreen android:key="user_dictionary_edit_words"
+ android:title="@string/preference_dictionary_menu_ja"
+ android:summary="@string/preference_user_dictionary_edit_words_summary_ja"
+ android:persistent="false">
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="jp.co.omronsoft.openwnn"
+ android:targetClass="jp.co.omronsoft.openwnn.JAJP.UserDictionaryToolsListJAJP" />
+ </PreferenceScreen>
+
+ <PreferenceScreen android:key="user_dictionary_edit_words"
+ android:title="@string/preference_dictionary_menu_en"
+ android:summary="@string/preference_user_dictionary_edit_words_summary_en"
+ android:persistent="false">
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="jp.co.omronsoft.openwnn"
+ android:targetClass="jp.co.omronsoft.openwnn.EN.UserDictionaryToolsListEN" />
+ </PreferenceScreen>
+
+ <jp.co.omronsoft.openwnn.JAJP.ClearLearnDictionaryDialogPreferenceJAJP
+ android:key="clear_learn_dictionary"
+ android:title="@string/preference_user_dictionary_clear_learning_title"
+ android:summary="@string/preference_user_dictionary_clear_learning_summary"
+ android:dialogMessage="@string/dialog_clear_learning_dictionary_message"
+ android:positiveButtonText="@string/dialog_button_ok"
+ android:negativeButtonText="@string/dialog_button_cancel"/>
+
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/preference_aboutime_menu">
+ <Preference android:key="openwnn_version"
+ style="?android:preferenceInformationStyle"
+ android:title="@string/openwnn_japanese"
+ android:summary="@string/openwnn_japanese_copyright" />
+ </PreferenceCategory>
+
+</PreferenceScreen>
+
diff --git a/res/xml/debug_tool_engine.xml b/res/xml/debug_tool_engine.xml
new file mode 100644
index 0000000..993b83b
--- /dev/null
+++ b/res/xml/debug_tool_engine.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<OpenWnnEngine>
+ <!-- key testName is Unique -->
+
+ <!-- OpenWnnEngineEN -->
+ <!-- For int predict(ComposingText text, int minLen, int maxLen) -->
+ <!-- param = "target<null or empty or text or comma>,minLen,maxLen,text" -->
+ <key testName = "TestCase01_predict" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "predict" param = "null,0,-1," intRet = "0" isRet = "" strRet = ""/>
+
+ <key testName = "TestCase02_predict" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "predict" param = "empty,0,-1," intRet = "0" isRet ="" strRet = ""/>
+
+ <key testName = "TestCase03_predict" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "predict" param = "text,10,5,testCase03" intRet = "1" isRet ="" strRet = ""/>
+
+ <key testName = "TestCase04_predict" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "predict" param = "comma,10,5," intRet = "1" isRet ="" strRet = ""/>
+
+ <!-- For convert() -->
+ <key testName = "TestCase01_convert" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "convert" param = "convertTest" intRet = "0" isRet = "" strRet = ""/>
+
+ <!-- For searchDictionary() -->
+
+ <key testName = "TestCase01_searchDictionary" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "searchDictionary" param = "convertTest" intRet = "0" isRet = "" strRet = ""/>
+
+ <!-- For getNextCandidate() -->
+ <!-- WnnWord getNextCandidate() -->
+ <!-- before predict() call -->
+ <key testName = "TestCase01_getNextCandidate" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "getNextCandidate" param = "getNextCondi" intRet = "" isRet = "" strRet = "getNextCondi"/>
+
+ <!-- predict() not call. -->
+ <key testName = "TestCase02_getNextCandidate" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "getNextCandidate" param = "" intRet = "" isRet = "" strRet = ""/>
+
+ <!-- For learn() -->
+ <!-- boolean learn(WnnWord word) WnnWord(String candidate, String stroke, int frequency) -->
+ <!-- param = "candidate,stroke,frequency" -->
+ <key testName = "TestCase01_learn" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "learn" param = "learn,learn,0" intRet = "" isRet = "true" strRet = ""/>
+
+ <key testName = "TestCase02_learn" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "learn" param = "nolearn,nolearn,0" intRet = "" isRet = "true" strRet = ""/>
+
+ <!-- For addWord() -->
+ <!-- int addWord(WnnWord word) WnnWord(String candidate, String stroke, int frequency) -->
+ <!-- param = "candidate,stroke,frequency"-->
+ <key testName = "TestCase01_addWord" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "addWord" param = "addWordText,addWordText,0" intRet = "0" isRet = "" strRet = ""/>
+
+ <!-- For deleteWord() -->
+ <!-- boolean deleteWord(WnnWord word) WnnWord(String candidate, String stroke, int frequency) -->
+ <!-- param = "candidate,stroke,frequency"-->
+ <key testName = "TestCase01_deleteWord" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "deleteWord" param = "deleteWord,deleteWord,0" intRet = "" isRet = "false" strRet = ""/>
+
+ <!-- void setPreferences(SharedPreferences pref) -->
+ <key testName = "TestCase01_setPreferences" targetClassName = "OpenWnnEngineEN"
+ targetMethod = "setPreferences" param = "" intRet = "" isRet = "" strRet = ""/>
+
+
+ <!-- OpenWnnEngineJAJP -->
+ <!-- For int predict(ComposingText text, int minLen, int maxLen) -->
+ <!-- param = "target<null or empty or text or comma>,minLen,maxLen,text" -->
+ <key testName = "TestCase01_predict" targetClassName = "OpenWnnEngineJAJP"
+ targetMethod = "predict" param = "null,0,-1," intRet = "0" isRet = "" strRet = ""/>
+</OpenWnnEngine>
diff --git a/res/xml/debug_tool_onevent.xml b/res/xml/debug_tool_onevent.xml
new file mode 100644
index 0000000..a28bd87
--- /dev/null
+++ b/res/xml/debug_tool_onevent.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<OpenWnn_Test>
+<!-- OpenWnn onEvent() Test -->
+<!-- OpenWnnEN_Test -->
+
+<!-- (Qwerty KeyBoard Shift On) -->
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase001_onEvent()_Q" displayValue = "Q" keyValue = "Q" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase002_onEvent()_W" displayValue = "W" keyValue = "W" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase003_onEvent()_E" displayValue = "E" keyValue = "E" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase004_onEvent()_R" displayValue = "R" keyValue = "R" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase005_onEvent()_T" displayValue = "T" keyValue = "T" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase006_onEvent()_Y" displayValue = "Y" keyValue = "Y" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase007_onEvent()_U" displayValue = "U" keyValue = "U" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase008_onEvent()_I" displayValue = "I" keyValue = "I" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase009_onEvent()_O" displayValue = "O" keyValue = "O" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase010_onEvent()_P" displayValue = "P" keyValue = "P" keyCode= ""/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase011_onEvent()_A" displayValue = "A" keyValue = "A" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase012_onEvent()_S" displayValue = "S" keyValue = "S" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase013_onEvent()_D" displayValue = "D" keyValue = "D" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase014_onEvent()_F" displayValue = "F" keyValue = "F" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase015_onEvent()_G" displayValue = "G" keyValue = "G" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase016_onEvent()_H" displayValue = "H" keyValue = "H" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase017_onEvent()_J" displayValue = "J" keyValue = "J" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase018_onEvent()_K" displayValue = "K" keyValue = "K" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase019_onEvent()_L" displayValue = "L" keyValue = "L" keyCode= ""/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase020_onEvent()_Shift" displayValue = "" keyValue = "" keyCode= "59"/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase021_onEvent()_Z" displayValue = "Z" keyValue = "Z" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase022_onEvent()_X" displayValue = "X" keyValue = "X" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase023_onEvent()_C" displayValue = "C" keyValue = "C" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase024_onEvent()_V" displayValue = "V" keyValue = "V" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase025_onEvent()_B" displayValue = "B" keyValue = "B" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase026_onEvent()_N" displayValue = "N" keyValue = "N" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase027_onEvent()_M" displayValue = "M" keyValue = "M" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase028_onEvent()_DEL" displayValue = "" keyValue = "" keyCode= "67"/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase029_onEvent()_切替" displayValue = "" keyValue = "" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase030_onEvent()_SYM" displayValue = "" keyValue = "" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase031_onEvent()_," displayValue = "," keyValue = "," keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase032_onEvent()_スペース" displayValue = " " keyValue = " " keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase033_onEvent()_." displayValue = "." keyValue = "." keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase034_onEvent()_?" displayValue = "\?" keyValue = "\?" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase035_onEvent()_改行" displayValue = "" keyValue = "" keyCode= "66"/>
+
+<!-- (Qwerty KeyBoard Shift Off) -->
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase036_onEvent()_q" displayValue = "q" keyValue = "q" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase037_onEvent()_w" displayValue = "w" keyValue = "w" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase038_onEvent()_e" displayValue = "e" keyValue = "e" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase039_onEvent()_r" displayValue = "r" keyValue = "r" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase040_onEvent()_t" displayValue = "t" keyValue = "t" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase041_onEvent()_y" displayValue = "y" keyValue = "y" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase042_onEvent()_u" displayValue = "u" keyValue = "u" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase043_onEvent()_I" displayValue = "I" keyValue = "I" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase044_onEvent()_o" displayValue = "o" keyValue = "o" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase045_onEvent()_p" displayValue = "p" keyValue = "p" keyCode= ""/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase046_onEvent()_a" displayValue = "a" keyValue = "a" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase047_onEvent()_s" displayValue = "s" keyValue = "s" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase048_onEvent()_d" displayValue = "d" keyValue = "d" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase049_onEvent()_f" displayValue = "f" keyValue = "f" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase050_onEvent()_g" displayValue = "g" keyValue = "g" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase051_onEvent()_h" displayValue = "h" keyValue = "h" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase052_onEvent()_j" displayValue = "j" keyValue = "j" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase053_onEvent()_k" displayValue = "k" keyValue = "k" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase054_onEvent()_l" displayValue = "l" keyValue = "l" keyCode= ""/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase055_onEvent()_Shift" displayValue = "" keyValue = "" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase056_onEvent()_z" displayValue = "z" keyValue = "z" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase057_onEvent()_x" displayValue = "x" keyValue = "x" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase058_onEvent()_c" displayValue = "c" keyValue = "c" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase059_onEvent()_v" displayValue = "v" keyValue = "v" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase060_onEvent()_b" displayValue = "b" keyValue = "b" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase061_onEvent()_n" displayValue = "n" keyValue = "n" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase062_onEvent()_m" displayValue = "m" keyValue = "m" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase063_onEvent()_DEL" displayValue = "" keyValue = "" keyCode= "67"/>
+
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase064_onEvent()_切替" displayValue = "" keyValue = "" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase065_onEvent()_SYM" displayValue = "" keyValue = "" keyCode= "63"/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase066_onEvent()_," displayValue = "," keyValue = "," keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase067_onEvent()_スペース" displayValue = "" keyValue = "" keyCode= "62"/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase068_onEvent()_." displayValue = "." keyValue = "." keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase069_onEvent()_?" displayValue = "\?" keyValue = "\?" keyCode= ""/>
+<key targetTest = "OpenWnnEN_Test" testName = "EN_TestCase070_onEvent()_改行" displayValue = "" keyValue = "" keyCode= "66"/>
+
+<!-- OpenWnnJAJP_Test -->
+<key targetTest = "OpenWnnJAJP_Test" testName = "JP_TestCase01_onEvent()_q"
+ displayValue = "q" keyValue = "q" keyCode= ""/>
+
+<key targetTest = "OpenWnnJAJP_Test" testName = "JP_TestCase02_onEvent()_w"
+ displayValue = "w" keyValue = "w" keyCode= ""/>
+
+<key targetTest = "OpenWnnJAJP_Test" testName = "JP_TestCase03_onEvent()_e"
+ displayValue = "e" keyValue = "e" keyCode= ""/>
+
+<!-- For OpenWnnEvent.INPUT_SOFT_KEY -->
+<key targetTest = "OpenWnnJAJP_Test" testName = "JP_TestCaseXX_onEvent()_1"
+ displayValue = "1" keyValue = "" keyCode= "8"/>
+
+<!-- OpenWnnZHCN_Test -->
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase001_onEvent()_Q" displayValue = "Q" keyValue = "Q" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase002_onEvent()_W" displayValue = "W" keyValue = "W" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase003_onEvent()_E" displayValue = "E" keyValue = "E" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase004_onEvent()_R" displayValue = "R" keyValue = "R" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase005_onEvent()_T" displayValue = "T" keyValue = "T" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase006_onEvent()_Y" displayValue = "Y" keyValue = "Y" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase007_onEvent()_U" displayValue = "U" keyValue = "U" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase008_onEvent()_I" displayValue = "I" keyValue = "I" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase009_onEvent()_O" displayValue = "O" keyValue = "O" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase010_onEvent()_P" displayValue = "P" keyValue = "P" keyCode= ""/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase011_onEvent()_A" displayValue = "A" keyValue = "A" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase012_onEvent()_S" displayValue = "S" keyValue = "S" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase013_onEvent()_D" displayValue = "D" keyValue = "D" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase014_onEvent()_F" displayValue = "F" keyValue = "F" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase015_onEvent()_G" displayValue = "G" keyValue = "G" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase016_onEvent()_H" displayValue = "H" keyValue = "H" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase017_onEvent()_J" displayValue = "J" keyValue = "J" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase018_onEvent()_K" displayValue = "K" keyValue = "K" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase019_onEvent()_L" displayValue = "L" keyValue = "L" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase020_onEvent()_Shift" displayValue = "" keyValue = "" keyCode= "59"/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase021_onEvent()_Z" displayValue = "Z" keyValue = "Z" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase022_onEvent()_X" displayValue = "X" keyValue = "X" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase023_onEvent()_C" displayValue = "C" keyValue = "C" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase024_onEvent()_V" displayValue = "V" keyValue = "V" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase025_onEvent()_B" displayValue = "B" keyValue = "B" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase026_onEvent()_N" displayValue = "N" keyValue = "N" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase027_onEvent()_M" displayValue = "M" keyValue = "M" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase028_onEvent()_DEL" displayValue = "" keyValue = "" keyCode= "67"/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase029_onEvent()_ALT" displayValue = "" keyValue = "" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase030_onEvent()_SYM" displayValue = "" keyValue = "" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase031_onEvent()_," displayValue = "," keyValue = "," keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase032_onEvent()_SPACE" displayValue = "" keyValue = "" keyCode= "62"/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase033_onEvent()_." displayValue = "." keyValue = "." keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase034_onEvent()_!" displayValue = "!" keyValue = "!" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase035_onEvent()_RETURN" displayValue = "" keyValue = "" keyCode= "66"/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase036_onEvent()_q" displayValue = "q" keyValue = "q" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase037_onEvent()_w" displayValue = "w" keyValue = "w" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase038_onEvent()_e" displayValue = "e" keyValue = "e" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase039_onEvent()_r" displayValue = "r" keyValue = "r" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase040_onEvent()_t" displayValue = "t" keyValue = "t" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase041_onEvent()_y" displayValue = "y" keyValue = "y" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase042_onEvent()_u" displayValue = "u" keyValue = "u" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase043_onEvent()_i" displayValue = "i" keyValue = "i" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase044_onEvent()_o" displayValue = "o" keyValue = "o" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase045_onEvent()_p" displayValue = "p" keyValue = "p" keyCode= ""/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase046_onEvent()_a" displayValue = "a" keyValue = "a" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase047_onEvent()_s" displayValue = "s" keyValue = "s" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase048_onEvent()_d" displayValue = "d" keyValue = "d" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase049_onEvent()_f" displayValue = "f" keyValue = "f" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase050_onEvent()_g" displayValue = "g" keyValue = "g" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase051_onEvent()_h" displayValue = "h" keyValue = "h" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase052_onEvent()_j" displayValue = "j" keyValue = "j" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase053_onEvent()_k" displayValue = "k" keyValue = "k" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase054_onEvent()_l" displayValue = "l" keyValue = "l" keyCode= ""/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase055_onEvent()_Shift" displayValue = "" keyValue = "" keyCode= "59"/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase056_onEvent()_z" displayValue = "z" keyValue = "z" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase057_onEvent()_x" displayValue = "x" keyValue = "x" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase058_onEvent()_c" displayValue = "c" keyValue = "c" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase059_onEvent()_v" displayValue = "v" keyValue = "v" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase060_onEvent()_b" displayValue = "b" keyValue = "b" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase061_onEvent()_n" displayValue = "n" keyValue = "n" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase062_onEvent()_m" displayValue = "m" keyValue = "m" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase063_onEvent()_DEL" displayValue = "" keyValue = "" keyCode= "67"/>
+
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase064_onEvent()_ALT" displayValue = "" keyValue = "" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase065_onEvent()_SYM" displayValue = "" keyValue = "" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase066_onEvent()_," displayValue = "," keyValue = "," keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase067_onEvent()_SPACE" displayValue = "" keyValue = "" keyCode= "62"/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase068_onEvent()_." displayValue = "." keyValue = "." keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase069_onEvent()_\?" displayValue = "\?" keyValue = "\?" keyCode= ""/>
+ <key targetTest = "OpenWnnZHCN_Test" testName = "ZHCN_TestCase070_onEvent()_RETURN" displayValue = "" keyValue = "" keyCode= "66"/>
+</OpenWnn_Test>
diff --git a/res/xml/default_en_qwerty.xml b/res/xml/default_en_qwerty.xml
index 35068ee..ac085e5 100644
--- a/res/xml/default_en_qwerty.xml
+++ b/res/xml/default_en_qwerty.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -60,7 +60,7 @@
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
<Key android:codes="-100"
- android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b"
+ android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
android:keyWidth="15%p" android:keyEdgeFlags="right" android:isRepeatable="true"/>
</Row>
@@ -76,7 +76,7 @@
<Key android:codes="46" android:keyLabel="." android:keyWidth="10%p"/>
<Key android:codes="63" android:keyLabel="\?" android:keyWidth="10%p"/>
<Key android:codes="-101"
- android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
+ android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
android:keyWidth="15%p" android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
diff --git a/res/xml/default_en_switch_key.xml b/res/xml/default_en_switch_key.xml
index 319546b..968118b 100644
--- a/res/xml/default_en_switch_key.xml
+++ b/res/xml/default_en_switch_key.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/default_en_symbols.xml b/res/xml/default_en_symbols.xml
index 16d5fe1..ca03916 100644
--- a/res/xml/default_en_symbols.xml
+++ b/res/xml/default_en_symbols.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -60,7 +60,7 @@
<Key android:codes="47" android:keyLabel="/" />
<Key android:codes="33" android:keyLabel="!" />
<Key android:codes="-100"
- android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b"
+ android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
android:keyWidth="15%p" android:keyEdgeFlags="right" android:isRepeatable="true"/>
</Row>
@@ -76,7 +76,7 @@
<Key android:codes="46" android:keyLabel="." android:keyWidth="10%p"/>
<Key android:codes="63" android:keyLabel="\?" android:keyWidth="10%p"/>
<Key android:codes="-101"
- android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
+ android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
android:keyWidth="15%p" android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
diff --git a/res/xml/default_en_symbols_shift.xml b/res/xml/default_en_symbols_shift.xml
index c2eb67b..dc723a5 100644
--- a/res/xml/default_en_symbols_shift.xml
+++ b/res/xml/default_en_symbols_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -60,7 +60,7 @@
<Key android:codes="92" android:keyLabel="\\" />
<Key android:codes="124" android:keyLabel="|"/>
<Key android:codes="-100"
- android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b"
+ android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
android:keyWidth="15%p" android:keyEdgeFlags="right" android:isRepeatable="true"/>
</Row>
@@ -76,7 +76,7 @@
<Key android:codes="46" android:keyLabel="." android:keyWidth="10%p"/>
<Key android:codes="63" android:keyLabel="\?" android:keyWidth="10%p"/>
<Key android:codes="-101"
- android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
+ android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
android:keyWidth="15%p" android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_full_alphabet.xml b/res/xml/keyboard_12key_full_alphabet.xml
index 4637af2..30b8254 100644
--- a/res/xml/keyboard_12key_full_alphabet.xml
+++ b/res/xml/keyboard_12key_full_alphabet.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_full_alphabet_input.xml b/res/xml/keyboard_12key_full_alphabet_input.xml
index d34007d..7dafc86 100644
--- a/res/xml/keyboard_12key_full_alphabet_input.xml
+++ b/res/xml/keyboard_12key_full_alphabet_input.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_full_katakana.xml b/res/xml/keyboard_12key_full_katakana.xml
index aefc90f..ae7a73a 100644
--- a/res/xml/keyboard_12key_full_katakana.xml
+++ b/res/xml/keyboard_12key_full_katakana.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
<Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
<Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
<Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_full_katakana_input.xml b/res/xml/keyboard_12key_full_katakana_input.xml
index f17bc81..369e3d0 100644
--- a/res/xml/keyboard_12key_full_katakana_input.xml
+++ b/res/xml/keyboard_12key_full_katakana_input.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
<Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
<Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
<Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_full_num.xml b/res/xml/keyboard_12key_full_num.xml
index c17d031..c92ecb9 100644
--- a/res/xml/keyboard_12key_full_num.xml
+++ b/res/xml/keyboard_12key_full_num.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="2"/>
<Key android:codes="-203" android:keyLabel="3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="5"/>
<Key android:codes="-206" android:keyLabel="6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="8"/>
<Key android:codes="-209" android:keyLabel="9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyLabel="*" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="0" />
<Key android:codes="-211" android:keyLabel="#" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_half_alphabet.xml b/res/xml/keyboard_12key_half_alphabet.xml
index 2588c46..4b9ed76 100644
--- a/res/xml/keyboard_12key_half_alphabet.xml
+++ b/res/xml/keyboard_12key_half_alphabet.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_half_alphabet_input.xml b/res/xml/keyboard_12key_half_alphabet_input.xml
index a7c6549..9b96f10 100644
--- a/res/xml/keyboard_12key_half_alphabet_input.xml
+++ b/res/xml/keyboard_12key_half_alphabet_input.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_half_katakana.xml b/res/xml/keyboard_12key_half_katakana.xml
index 6d52364..a63224c 100644
--- a/res/xml/keyboard_12key_half_katakana.xml
+++ b/res/xml/keyboard_12key_half_katakana.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
<Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
<Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
<Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_half_katakana_input.xml b/res/xml/keyboard_12key_half_katakana_input.xml
index 19cd68f..dfeefdf 100644
--- a/res/xml/keyboard_12key_half_katakana_input.xml
+++ b/res/xml/keyboard_12key_half_katakana_input.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
<Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
<Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
<Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_half_num.xml b/res/xml/keyboard_12key_half_num.xml
index 49a6562..9d9cc52 100644
--- a/res/xml/keyboard_12key_half_num.xml
+++ b/res/xml/keyboard_12key_half_num.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyLabel="1" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyLabel="2"/>
<Key android:codes="-203" android:keyLabel="3"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyLabel="4" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyLabel="5"/>
<Key android:codes="-206" android:keyLabel="6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyLabel="7" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyLabel="8"/>
<Key android:codes="-209" android:keyLabel="9"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyLabel="*" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyLabel="0" />
<Key android:codes="-211" android:keyLabel="#" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12key_phone.xml b/res/xml/keyboard_12key_phone.xml
index 7637058..704d6cd 100644
--- a/res/xml/keyboard_12key_phone.xml
+++ b/res/xml/keyboard_12key_phone.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -22,39 +23,38 @@
>
<Row>
- <Key android:codes="-310" android:keyLabel=""
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="32" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="49" android:keyLabel="1" android:horizontalGap="2%"/>
<Key android:codes="50" android:keyLabel="2"/>
<Key android:codes="51" android:keyLabel="3"/>
<Key android:codes="-214"
- android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="52" android:keyLabel="4" android:horizontalGap="2%"/>
<Key android:codes="53" android:keyLabel="5"/>
<Key android:codes="54" android:keyLabel="6"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="45" android:keyLabel="-" android:keyWidth="18%"/>
+ <Key android:codes="45" android:keyLabel="-" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="55" android:keyLabel="7" android:horizontalGap="2%"/>
<Key android:codes="56" android:keyLabel="8"/>
<Key android:codes="57" android:keyLabel="9"/>
- <Key android:codes="43" android:keyLabel="+" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="43" android:keyLabel="+" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-310" android:keyLabel="" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="44" android:keyLabel="Pause" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="42" android:keyLabel="*" android:horizontalGap="2%"/>
<Key android:codes="48" android:keyLabel="0" />
<Key android:codes="35" android:keyLabel="#" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter"
- android:iconPreview="@drawable/key_12key_enter_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter"
+ android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12keyjp.xml b/res/xml/keyboard_12keyjp.xml
index b96fc4f..675d9ea 100644
--- a/res/xml/keyboard_12keyjp.xml
+++ b/res/xml/keyboard_12keyjp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,39 +24,39 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_hiragana2" android:iconPreview="@drawable/key_12key_hiragana2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_hiragana3" android:iconPreview="@drawable/key_12key_hiragana3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_hiragana5" android:iconPreview="@drawable/key_12key_hiragana5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_hiragana6" android:iconPreview="@drawable/key_12key_hiragana6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_hiragana8" android:iconPreview="@drawable/key_12key_hiragana8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_hiragana9" android:iconPreview="@drawable/key_12key_hiragana9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
android:popupKeyboard="@xml/keyboard_switch_key_jp"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_hiragana0" android:iconPreview="@drawable/key_12key_hiragana0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_12keyjp_input.xml b/res/xml/keyboard_12keyjp_input.xml
index fa86cd5..c965d90 100644
--- a/res/xml/keyboard_12keyjp_input.xml
+++ b/res/xml/keyboard_12keyjp_input.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
android:keyWidth="20%p"
android:horizontalGap="0dip"
android:verticalGap="0dip"
@@ -23,38 +24,38 @@
<Row>
<Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b" android:horizontalGap="2%"/>
<Key android:codes="-202" android:keyIcon="@drawable/key_12key_hiragana2" android:iconPreview="@drawable/key_12key_hiragana2_b"/>
<Key android:codes="-203" android:keyIcon="@drawable/key_12key_hiragana3" android:iconPreview="@drawable/key_12key_hiragana3_b"/>
- <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
- android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-214" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b" android:horizontalGap="2%"/>
<Key android:codes="-205" android:keyIcon="@drawable/key_12key_hiragana5" android:iconPreview="@drawable/key_12key_hiragana5_b"/>
<Key android:codes="-206" android:keyIcon="@drawable/key_12key_hiragana6" android:iconPreview="@drawable/key_12key_hiragana6_b"/>
- <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row>
- <Key android:codes="-305" android:keyIcon="@drawable/key_12key_eisukana" android:iconPreview="@drawable/key_12key_eisukana_b" android:keyWidth="18%"/>
+ <Key android:codes="-305" android:keyIcon="@drawable/key_12key_eisukana" android:iconPreview="@drawable/key_12key_eisukana_b" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b" android:horizontalGap="2%"/>
<Key android:codes="-208" android:keyIcon="@drawable/key_12key_hiragana8" android:iconPreview="@drawable/key_12key_hiragana8_b"/>
<Key android:codes="-209" android:keyIcon="@drawable/key_12key_hiragana9" android:iconPreview="@drawable/key_12key_hiragana9_b"/>
- <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
android:popupKeyboard="@xml/keyboard_switch_key_jp"
- android:keyEdgeFlags="left" android:keyWidth="18%"/>
+ android:keyEdgeFlags="left" android:keyWidth="18%" wnn:isSecondKey="true"/>
<Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b" android:horizontalGap="2%"/>
<Key android:codes="-210" android:keyIcon="@drawable/key_12key_hiragana0" android:iconPreview="@drawable/key_12key_hiragana0_b"/>
<Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
- <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b"
- android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+ <Key android:codes="-216" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_4key.xml b/res/xml/keyboard_4key.xml
new file mode 100644
index 0000000..9061302
--- /dev/null
+++ b/res/xml/keyboard_4key.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyHeight="@dimen/key_height_4key"
+ >
+
+ <Row>
+ <Key android:codes="-300" android:keyLabel="@string/key_symbol_mode" android:keyEdgeFlags="left" android:keyWidth="25%p" wnn:isSecondKey="true"/>
+ <Key android:codes="-301" android:keyWidth="25%p" android:keyLabel="\u25b2" wnn:isSecondKey="true" />
+ <Key android:codes="-302" android:keyWidth="25%p" android:keyLabel="\u25bc" wnn:isSecondKey="true" />
+ <Key android:codes="-303" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:keyWidth="25%p" wnn:isSecondKey="true" />
+ </Row>
+</Keyboard>
+
diff --git a/res/xml/keyboard_qwerty_jp.xml b/res/xml/keyboard_qwerty_jp.xml
index ca87e72..1a5c956 100644
--- a/res/xml/keyboard_qwerty_jp.xml
+++ b/res/xml/keyboard_qwerty_jp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="119" android:keyLabel="w"/>
<Key android:codes="101" android:keyLabel="e"/>
<Key android:codes="114" android:keyLabel="r"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="115" android:keyLabel="s"/>
<Key android:codes="100" android:keyLabel="d"/>
<Key android:codes="102" android:keyLabel="f"/>
@@ -48,9 +49,10 @@
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="122" android:keyLabel="z"/>
<Key android:codes="120" android:keyLabel="x"/>
<Key android:codes="99" android:keyLabel="c"/>
@@ -58,23 +60,26 @@
<Key android:codes="98" android:keyLabel="b"/>
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="44" android:keyLabel="@string/key_qwerty_full_touten"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="44" android:keyLabel="@string/key_qwerty_full_touten"
- android:keyWidth="12.5%p"/>
- <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_alphabet.xml b/res/xml/keyboard_qwerty_jp_full_alphabet.xml
index ea7d72f..34de3db 100644
--- a/res/xml/keyboard_qwerty_jp_full_alphabet.xml
+++ b/res/xml/keyboard_qwerty_jp_full_alphabet.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="65361" android:keyLabel="q" android:keyEdgeFlags="left"/>
+ <Key android:codes="65361" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65367" android:keyLabel="w"/>
<Key android:codes="65349" android:keyLabel="e"/>
<Key android:codes="65362" android:keyLabel="r"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="65345" android:keyLabel="a" android:keyEdgeFlags="left"/>
+ <Key android:codes="65345" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65363" android:keyLabel="s"/>
<Key android:codes="65348" android:keyLabel="d"/>
<Key android:codes="65350" android:keyLabel="f"/>
@@ -48,9 +49,10 @@
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="65370" android:keyLabel="z"/>
<Key android:codes="65368" android:keyLabel="x"/>
<Key android:codes="65347" android:keyLabel="c"/>
@@ -58,23 +60,26 @@
<Key android:codes="65346" android:keyLabel="b"/>
<Key android:codes="65358" android:keyLabel="n"/>
<Key android:codes="65357" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
- android:keyWidth="12.5%p"/>
- <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml b/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
index 38005c8..7a02ba7 100644
--- a/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="65329" android:keyLabel="Q" android:keyEdgeFlags="left"/>
+ <Key android:codes="65329" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65335" android:keyLabel="W"/>
<Key android:codes="65317" android:keyLabel="E"/>
<Key android:codes="65330" android:keyLabel="R"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="65313" android:keyLabel="A" android:keyEdgeFlags="left"/>
+ <Key android:codes="65313" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65331" android:keyLabel="S"/>
<Key android:codes="65316" android:keyLabel="D"/>
<Key android:codes="65318" android:keyLabel="F"/>
@@ -48,9 +49,10 @@
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="65338" android:keyLabel="Z"/>
<Key android:codes="65336" android:keyLabel="X"/>
<Key android:codes="65315" android:keyLabel="C"/>
@@ -58,23 +60,26 @@
<Key android:codes="65314" android:keyLabel="B"/>
<Key android:codes="65326" android:keyLabel="N"/>
<Key android:codes="65325" android:keyLabel="M"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
- android:keyWidth="12.5%p"/>
- <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_katakana.xml b/res/xml/keyboard_qwerty_jp_full_katakana.xml
index 5e2c0cd..c0bdd44 100644
--- a/res/xml/keyboard_qwerty_jp_full_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_full_katakana.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="119" android:keyLabel="w"/>
<Key android:codes="101" android:keyLabel="e"/>
<Key android:codes="114" android:keyLabel="r"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="115" android:keyLabel="s"/>
<Key android:codes="100" android:keyLabel="d"/>
<Key android:codes="102" android:keyLabel="f"/>
@@ -48,9 +49,10 @@
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="122" android:keyLabel="z"/>
<Key android:codes="120" android:keyLabel="x"/>
<Key android:codes="99" android:keyLabel="c"/>
@@ -58,23 +60,26 @@
<Key android:codes="98" android:keyLabel="b"/>
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="12289" android:keyLabel="@string/key_qwerty_full_touten"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="12289" android:keyLabel="@string/key_qwerty_full_touten"
- android:keyWidth="12.5%p"/>
- <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml b/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
index dfee410..11f946f 100644
--- a/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,66 +15,71 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
- <Key android:codes="119" android:keyLabel="w"/>
- <Key android:codes="101" android:keyLabel="e"/>
- <Key android:codes="114" android:keyLabel="r"/>
- <Key android:codes="116" android:keyLabel="t"/>
- <Key android:codes="121" android:keyLabel="y"/>
- <Key android:codes="117" android:keyLabel="u"/>
- <Key android:codes="105" android:keyLabel="i"/>
- <Key android:codes="111" android:keyLabel="o"/>
- <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
- <Key android:codes="115" android:keyLabel="s"/>
- <Key android:codes="100" android:keyLabel="d"/>
- <Key android:codes="102" android:keyLabel="f"/>
- <Key android:codes="103" android:keyLabel="g"/>
- <Key android:codes="104" android:keyLabel="h"/>
- <Key android:codes="106" android:keyLabel="j"/>
- <Key android:codes="107" android:keyLabel="k"/>
- <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
<Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
- <Key android:codes="122" android:keyLabel="z"/>
- <Key android:codes="120" android:keyLabel="x"/>
- <Key android:codes="99" android:keyLabel="c"/>
- <Key android:codes="118" android:keyLabel="v"/>
- <Key android:codes="98" android:keyLabel="b"/>
- <Key android:codes="110" android:keyLabel="n"/>
- <Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
- android:keyWidth="12.5%p"/>
- <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_symbols.xml b/res/xml/keyboard_qwerty_jp_full_symbols.xml
index 1fcf7fa..48ab92c 100644
--- a/res/xml/keyboard_qwerty_jp_full_symbols.xml
+++ b/res/xml/keyboard_qwerty_jp_full_symbols.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left"/>
+ <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65298" android:keyLabel="2"/>
<Key android:codes="65299" android:keyLabel="3"/>
<Key android:codes="65300" android:keyLabel="4"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign" android:keyEdgeFlags="left"/>
+ <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65283" android:keyLabel="@string/key_qwerty_full_number_sign" />
<Key android:codes="65285" android:keyLabel="@string/key_qwerty_full_percent_sign" />
<Key android:codes="65286" android:keyLabel="@string/key_qwerty_full_ampersand" />
@@ -47,9 +48,10 @@
<Key android:codes="12301" android:keyLabel="@string/key_qwerty_kagi_kakko_right" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="65295" android:keyLabel="@string/key_qwerty_full_slash" />
<Key android:codes="65288" android:keyLabel="@string/key_qwerty_full_left_parenthesis" />
<Key android:codes="65289" android:keyLabel="@string/key_qwerty_full_right_parenthesis" />
@@ -57,21 +59,26 @@
<Key android:codes="65307" android:keyLabel="@string/key_qwerty_full_semicolon" />
<Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark" />
<Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question" />
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left" />
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p" />
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true" />
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma" android:keyWidth="12.5%p" />
- <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period" android:keyWidth="12.5%p" />
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml b/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
index 26e5cb3..8421f69 100644
--- a/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left"/>
+ <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65298" android:keyLabel="2"/>
<Key android:codes="65299" android:keyLabel="3"/>
<Key android:codes="65300" android:keyLabel="4"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="65374" android:keyLabel="@string/key_qwerty_full_thilde" android:keyEdgeFlags="left"/>
+ <Key android:codes="65374" android:keyLabel="@string/key_qwerty_full_thilde" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="65342" android:keyLabel="@string/key_qwerty_full_hat"/>
<Key android:codes="65509" android:keyLabel="@string/key_qwerty_full_yen_sign"/>
<Key android:codes="65284" android:keyLabel="@string/key_qwerty_full_dollar_sign"/>
@@ -47,9 +48,10 @@
<Key android:codes="65373" android:keyLabel="@string/key_qwerty_full_right_curly_blacket" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="65372" android:keyLabel="@string/key_qwerty_full_vertical_bar"/>
<Key android:codes="65308" android:keyLabel="@string/key_qwerty_full_less_than_sign"/>
<Key android:codes="65310" android:keyLabel="@string/key_qwerty_full_greater_than_sign"/>
@@ -57,23 +59,26 @@
<Key android:codes="8217" android:keyLabel="@string/key_qwerty_full_right_single_quote"/>
<Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma" />
<Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period" />
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left" />
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p" />
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true" />
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
- android:keyWidth="12.5%p" />
- <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"
- android:keyWidth="12.5%p" />
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_alphabet.xml b/res/xml/keyboard_qwerty_jp_half_alphabet.xml
index 80b7934..58b2181 100644
--- a/res/xml/keyboard_qwerty_jp_half_alphabet.xml
+++ b/res/xml/keyboard_qwerty_jp_half_alphabet.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
- >
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
+ >
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="119" android:keyLabel="w"/>
<Key android:codes="101" android:keyLabel="e"/>
<Key android:codes="114" android:keyLabel="r"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="115" android:keyLabel="s"/>
<Key android:codes="100" android:keyLabel="d"/>
<Key android:codes="102" android:keyLabel="f"/>
@@ -47,9 +48,10 @@
<Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="122" android:keyLabel="z"/>
<Key android:codes="120" android:keyLabel="x"/>
<Key android:codes="99" android:keyLabel="c"/>
@@ -57,23 +59,26 @@
<Key android:codes="98" android:keyLabel="b"/>
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="44" android:keyLabel=","/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="44" android:keyLabel=","
- android:keyWidth="12.5%p"/>
- <Key android:codes="46" android:keyLabel="."
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="."/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml b/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
index 7dc0869..21112d4 100644
--- a/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,65 +15,70 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
- <Key android:codes="119" android:keyLabel="w"/>
- <Key android:codes="101" android:keyLabel="e"/>
- <Key android:codes="114" android:keyLabel="r"/>
- <Key android:codes="116" android:keyLabel="t"/>
- <Key android:codes="121" android:keyLabel="y"/>
- <Key android:codes="117" android:keyLabel="u"/>
- <Key android:codes="105" android:keyLabel="i"/>
- <Key android:codes="111" android:keyLabel="o"/>
- <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
- <Key android:codes="115" android:keyLabel="s"/>
- <Key android:codes="100" android:keyLabel="d"/>
- <Key android:codes="102" android:keyLabel="f"/>
- <Key android:codes="103" android:keyLabel="g"/>
- <Key android:codes="104" android:keyLabel="h"/>
- <Key android:codes="106" android:keyLabel="j"/>
- <Key android:codes="107" android:keyLabel="k"/>
- <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
<Key android:codes="47" android:keyLabel="/" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
- <Key android:codes="122" android:keyLabel="z"/>
- <Key android:codes="120" android:keyLabel="x"/>
- <Key android:codes="99" android:keyLabel="c"/>
- <Key android:codes="118" android:keyLabel="v"/>
- <Key android:codes="98" android:keyLabel="b"/>
- <Key android:codes="110" android:keyLabel="n"/>
- <Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="33" android:keyLabel="!"
- android:keyWidth="12.5%p"/>
- <Key android:codes="63" android:keyLabel="\?"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_katakana.xml b/res/xml/keyboard_qwerty_jp_half_katakana.xml
index 18d6c4c..190a55e 100644
--- a/res/xml/keyboard_qwerty_jp_half_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_half_katakana.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
+ <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="119" android:keyLabel="w"/>
<Key android:codes="101" android:keyLabel="e"/>
<Key android:codes="114" android:keyLabel="r"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
+ <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="115" android:keyLabel="s"/>
<Key android:codes="100" android:keyLabel="d"/>
<Key android:codes="102" android:keyLabel="f"/>
@@ -48,9 +49,10 @@
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="122" android:keyLabel="z"/>
<Key android:codes="120" android:keyLabel="x"/>
<Key android:codes="99" android:keyLabel="c"/>
@@ -58,23 +60,26 @@
<Key android:codes="98" android:keyLabel="b"/>
<Key android:codes="110" android:keyLabel="n"/>
<Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"
- android:keyWidth="12.5%p"/>
- <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml b/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
index c250968..ca9b724 100644
--- a/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,66 +15,71 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
- >
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
+ >
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
- <Key android:codes="119" android:keyLabel="w"/>
- <Key android:codes="101" android:keyLabel="e"/>
- <Key android:codes="114" android:keyLabel="r"/>
- <Key android:codes="116" android:keyLabel="t"/>
- <Key android:codes="121" android:keyLabel="y"/>
- <Key android:codes="117" android:keyLabel="u"/>
- <Key android:codes="105" android:keyLabel="i"/>
- <Key android:codes="111" android:keyLabel="o"/>
- <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
- <Key android:codes="115" android:keyLabel="s"/>
- <Key android:codes="100" android:keyLabel="d"/>
- <Key android:codes="102" android:keyLabel="f"/>
- <Key android:codes="103" android:keyLabel="g"/>
- <Key android:codes="104" android:keyLabel="h"/>
- <Key android:codes="106" android:keyLabel="j"/>
- <Key android:codes="107" android:keyLabel="k"/>
- <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
<Key android:codes="65392" android:keyLabel="@string/key_qwerty_half_tyouon"
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
- <Key android:codes="122" android:keyLabel="z"/>
- <Key android:codes="120" android:keyLabel="x"/>
- <Key android:codes="99" android:keyLabel="c"/>
- <Key android:codes="118" android:keyLabel="v"/>
- <Key android:codes="98" android:keyLabel="b"/>
- <Key android:codes="110" android:keyLabel="n"/>
- <Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="33" android:keyLabel="!"
- android:keyWidth="12.5%p"/>
- <Key android:codes="63" android:keyLabel="\?"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_symbols.xml b/res/xml/keyboard_qwerty_jp_half_symbols.xml
index 4621b9e..6ce9cf6 100644
--- a/res/xml/keyboard_qwerty_jp_half_symbols.xml
+++ b/res/xml/keyboard_qwerty_jp_half_symbols.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
+ <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="50" android:keyLabel="2"/>
<Key android:codes="51" android:keyLabel="3"/>
<Key android:codes="52" android:keyLabel="4"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="left"/>
+ <Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="35" android:keyLabel="\#"/>
<Key android:codes="37" android:keyLabel="%"/>
<Key android:codes="38" android:keyLabel="&"/>
@@ -47,9 +48,10 @@
<Key android:codes="93" android:keyLabel="]" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b"
+ android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="47" android:keyLabel="/" />
<Key android:codes="40" android:keyLabel="("/>
<Key android:codes="41" android:keyLabel=")"/>
@@ -57,21 +59,26 @@
<Key android:codes="59" android:keyLabel=";"/>
<Key android:codes="33" android:keyLabel="!" />
<Key android:codes="63" android:keyLabel="\?"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left" />
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p" />
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true" />
+ <Key android:codes="44" android:keyLabel=","/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="44" android:keyLabel="," android:keyWidth="12.5%p" />
- <Key android:codes="46" android:keyLabel="." android:keyWidth="12.5%p" />
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="."/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml b/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
index e7871f1..5df9fec 100644
--- a/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +15,15 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
- >
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
+ >
<Row>
- <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
+ <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="50" android:keyLabel="2"/>
<Key android:codes="51" android:keyLabel="3"/>
<Key android:codes="52" android:keyLabel="4"/>
@@ -35,7 +36,7 @@
</Row>
<Row>
- <Key android:codes="126" android:keyLabel="~" android:keyEdgeFlags="left"/>
+ <Key android:codes="126" android:keyLabel="~" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
<Key android:codes="94" android:keyLabel="^"/>
<Key android:codes="165" android:keyLabel="¥"/>
<Key android:codes="36" android:keyLabel="$"/>
@@ -47,9 +48,10 @@
<Key android:codes="125" android:keyLabel="}" android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
<Key android:codes="124" android:keyLabel="|"/>
<Key android:codes="60" android:keyLabel="<"/>
<Key android:codes="62" android:keyLabel=">"/>
@@ -57,21 +59,26 @@
<Key android:codes="39" android:keyLabel="'"/>
<Key android:codes="44" android:keyLabel="," />
<Key android:codes="46" android:keyLabel="." />
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left" />
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p" />
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="33" android:keyLabel="!"/>
<Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="33" android:keyLabel="!" android:keyWidth="12.5%p" />
- <Key android:codes="63" android:keyLabel="\?" android:keyWidth="12.5%p" />
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="63" android:keyLabel="\?"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_qwerty_jp_shift.xml b/res/xml/keyboard_qwerty_jp_shift.xml
index 99b8ea8..d5f542b 100644
--- a/res/xml/keyboard_qwerty_jp_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_shift.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,66 +15,71 @@
limitations under the License.
-->
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p"
- android:horizontalGap="0dip"
- android:verticalGap="0dip"
- android:keyHeight="@dimen/key_height"
+ xmlns:wnn="http://schemas.android.com/apk/res/jp.co.omronsoft.openwnn"
+ android:keyWidth="9%p"
+ android:horizontalGap="0.93%p"
+ android:verticalGap="8dip"
+ android:keyHeight="@dimen/key_height_qwerty"
>
<Row>
- <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
- <Key android:codes="119" android:keyLabel="w"/>
- <Key android:codes="101" android:keyLabel="e"/>
- <Key android:codes="114" android:keyLabel="r"/>
- <Key android:codes="116" android:keyLabel="t"/>
- <Key android:codes="121" android:keyLabel="y"/>
- <Key android:codes="117" android:keyLabel="u"/>
- <Key android:codes="105" android:keyLabel="i"/>
- <Key android:codes="111" android:keyLabel="o"/>
- <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
+ <Key android:codes="113" android:keyLabel="Q" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="119" android:keyLabel="W"/>
+ <Key android:codes="101" android:keyLabel="E"/>
+ <Key android:codes="114" android:keyLabel="R"/>
+ <Key android:codes="116" android:keyLabel="T"/>
+ <Key android:codes="121" android:keyLabel="Y"/>
+ <Key android:codes="117" android:keyLabel="U"/>
+ <Key android:codes="105" android:keyLabel="I"/>
+ <Key android:codes="111" android:keyLabel="O"/>
+ <Key android:codes="112" android:keyLabel="P" android:keyEdgeFlags="right"/>
</Row>
<Row>
- <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
- <Key android:codes="115" android:keyLabel="s"/>
- <Key android:codes="100" android:keyLabel="d"/>
- <Key android:codes="102" android:keyLabel="f"/>
- <Key android:codes="103" android:keyLabel="g"/>
- <Key android:codes="104" android:keyLabel="h"/>
- <Key android:codes="106" android:keyLabel="j"/>
- <Key android:codes="107" android:keyLabel="k"/>
- <Key android:codes="108" android:keyLabel="l"/>
+ <Key android:codes="97" android:keyLabel="A" android:keyEdgeFlags="left" android:horizontalGap="1.2%p"/>
+ <Key android:codes="115" android:keyLabel="S"/>
+ <Key android:codes="100" android:keyLabel="D"/>
+ <Key android:codes="102" android:keyLabel="F"/>
+ <Key android:codes="103" android:keyLabel="G"/>
+ <Key android:codes="104" android:keyLabel="H"/>
+ <Key android:codes="106" android:keyLabel="J"/>
+ <Key android:codes="107" android:keyLabel="K"/>
+ <Key android:codes="108" android:keyLabel="L"/>
<Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
android:keyEdgeFlags="right"/>
</Row>
- <Row>
- <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
- android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
- <Key android:codes="122" android:keyLabel="z"/>
- <Key android:codes="120" android:keyLabel="x"/>
- <Key android:codes="99" android:keyLabel="c"/>
- <Key android:codes="118" android:keyLabel="v"/>
- <Key android:codes="98" android:keyLabel="b"/>
- <Key android:codes="110" android:keyLabel="n"/>
- <Key android:codes="109" android:keyLabel="m"/>
- <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p"
- android:keyEdgeFlags="right" android:isRepeatable="true"/>
+ <Row android:horizontalGap="0.82%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift"
+ android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="14%p" android:horizontalGap="1.2%p"
+ android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="122" android:keyLabel="Z"/>
+ <Key android:codes="120" android:keyLabel="X"/>
+ <Key android:codes="99" android:keyLabel="C"/>
+ <Key android:codes="118" android:keyLabel="V"/>
+ <Key android:codes="98" android:keyLabel="B"/>
+ <Key android:codes="110" android:keyLabel="N"/>
+ <Key android:codes="109" android:keyLabel="M"/>
+ <Key android:codes="-100" android:keyIcon="@drawable/key_del" android:iconPreview="@drawable/key_del_b"
+ android:keyWidth="13.9%p"
+ android:keyEdgeFlags="right" android:isRepeatable="true" wnn:isSecondKey="true"/>
</Row>
- <Row android:rowEdgeFlags="bottom">
- <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
- android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
- android:keyWidth="15%p" android:keyEdgeFlags="left"/>
- <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
- android:keyWidth="15%p"/>
+ <Row android:rowEdgeFlags="bottom" android:horizontalGap="0.28%p">
+ <Key android:codes="-230" android:keyIcon="@drawable/key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+ android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp" android:horizontalGap="1.2%p"
+ android:keyWidth="15%p" android:keyEdgeFlags="left" wnn:isSecondKey="true"/>
+ <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_pict_sym_b"
+ android:keyWidth="15%p" wnn:isSecondKey="true"/>
+ <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"/>
<Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b"
- android:keyWidth="30%p" android:isRepeatable="true"/>
- <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
- android:keyWidth="12.5%p"/>
- <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
- android:keyWidth="12.5%p"/>
- <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b"
- android:keyWidth="15%p" android:keyEdgeFlags="right"/>
+ android:keyWidth="15.1%p" android:isRepeatable="true"/>
+ <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+ <Key android:codes="-218" android:keyIcon="@drawable/key_qwerty_left" android:iconPreview="@drawable/key_qwerty_left_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-217" android:keyIcon="@drawable/key_qwerty_right" android:iconPreview="@drawable/key_qwerty_right_b"
+ android:isRepeatable="true" wnn:isSecondKey="true"/>
+ <Key android:codes="-101" android:keyIcon="@drawable/key_enter" android:iconPreview="@drawable/key_enter_b"
+ android:keyWidth="15%p" android:keyEdgeFlags="right" wnn:isSecondKey="true"/>
</Row>
</Keyboard>
diff --git a/res/xml/keyboard_switch_key_jp.xml b/res/xml/keyboard_switch_key_jp.xml
index 0ba7976..f5e461c 100644
--- a/res/xml/keyboard_switch_key_jp.xml
+++ b/res/xml/keyboard_switch_key_jp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/keyboard_switch_key_qwerty_jp.xml b/res/xml/keyboard_switch_key_qwerty_jp.xml
index 3c09b96..9305017 100644
--- a/res/xml/keyboard_switch_key_qwerty_jp.xml
+++ b/res/xml/keyboard_switch_key_qwerty_jp.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/method_ja.xml b/res/xml/method_ja.xml
index 4e5f157..b36d24a 100644
--- a/res/xml/method_ja.xml
+++ b/res/xml/method_ja.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -19,4 +19,9 @@
<input-method xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="jp.co.omronsoft.openwnn.OpenWnnControlPanelJAJP"
-/>
+ >
+ <subtype android:label="@string/label_subtype_generic"
+ android:imeSubtypeLocale="ja"
+ android:imeSubtypeMode="keyboard"
+ />
+</input-method>
diff --git a/res/xml/openwnn_pref_ja.xml b/res/xml/openwnn_pref_ja.xml
index 6de5fbf..bc90ddd 100644
--- a/res/xml/openwnn_pref_ja.xml
+++ b/res/xml/openwnn_pref_ja.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -23,7 +23,8 @@
android:summary="@string/preference_key_sound_summary"/>
<CheckBoxPreference android:key="key_vibration"
android:title="@string/preference_key_vibration_title"
- android:summary="@string/preference_key_vibration_summary"/>
+ android:summary="@string/preference_key_vibration_summary"
+ android:defaultValue="true" />
<CheckBoxPreference android:key="popup_preview"
android:title="@string/preference_preview_title"
android:summary="@string/preference_preview_summary"
@@ -41,20 +42,31 @@
android:defaultValue="keyboard_android_default" />
</PreferenceCategory>
- <PreferenceCategory android:title="@string/preference_conversion_menu">
- <CheckBoxPreference android:key="opt_enable_learning"
- android:title="@string/preference_input_learning_title"
+ <PreferenceCategory android:title="@string/preference_conversion_menu_ja">
+ <CheckBoxPreference android:key="opt_enable_learning_ja"
+ android:title="@string/preference_input_learning_title_ja"
android:summary="@string/preference_input_learning_summary"
android:defaultValue="true" />
- <CheckBoxPreference android:key="opt_prediction"
- android:title="@string/preference_prediction_title"
+ <CheckBoxPreference android:key="opt_prediction_ja"
+ android:title="@string/preference_prediction_title_ja"
android:summary="@string/preference_prediction_summary"
android:defaultValue="true" />
- <CheckBoxPreference android:key="opt_spell_correction"
- android:title="@string/preference_correct_spell_title"
+ </PreferenceCategory>
+
+ <PreferenceCategory android:title="@string/preference_conversion_menu_en">
+ <CheckBoxPreference android:key="opt_enable_learning_en"
+ android:title="@string/preference_input_learning_title_en"
+ android:summary="@string/preference_input_learning_summary"
+ android:defaultValue="true" />
+ <CheckBoxPreference android:key="opt_prediction_en"
+ android:title="@string/preference_prediction_title_en"
+ android:summary="@string/preference_prediction_summary"
+ android:defaultValue="false" />
+ <CheckBoxPreference android:key="opt_spell_correction_en"
+ android:title="@string/preference_correct_spell_title_en"
android:summary="@string/preference_correct_spell_summary"
android:defaultValue="true"
- android:dependency="opt_prediction" />
+ android:dependency="opt_prediction_en" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/preference_dictionary_menu">
diff --git a/res/xml/symbols_china_list.xml b/res/xml/symbols_china_list.xml
index a9fc71b..3e9839d 100644
--- a/res/xml/symbols_china_list.xml
+++ b/res/xml/symbols_china_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/symbols_japan_emoji_list.xml b/res/xml/symbols_japan_emoji_list.xml
new file mode 100644
index 0000000..22e3004
--- /dev/null
+++ b/res/xml/symbols_japan_emoji_list.xml
@@ -0,0 +1,825 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--symbols -->
+<keystring>
+
+<string value="\udbb8\udc00"/>
+<string value="\udbb8\udc01"/>
+<string value="\udbb8\udc02"/>
+<string value="\udbb8\udc03"/>
+<string value="\udbb8\udc04"/>
+<string value="\udbb8\udc05"/>
+<string value="\udbb8\udc06"/>
+<string value="\udbb8\udc07"/>
+<string value="\udbb8\udc08"/>
+<string value="\udbb8\udc09"/>
+<string value="\udbb8\udc0a"/>
+<string value="\udbb8\udc0b"/>
+<string value="\udbb8\udc0c"/>
+<string value="\udbb8\udc0d"/>
+<string value="\udbb8\udc0e"/>
+<string value="\udbb8\udc0f"/>
+<string value="\udbb8\udc10"/>
+<string value="\udbb8\udc11"/>
+<string value="\udbb8\udc12"/>
+<string value="\udbb8\udc13"/>
+<string value="\udbb8\udc14"/>
+<string value="\udbb8\udc15"/>
+<string value="\udbb8\udc16"/>
+<string value="\udbb8\udc17"/>
+<string value="\udbb8\udc18"/>
+<string value="\udbb8\udc19"/>
+<string value="\udbb8\udc1a"/>
+<string value="\udbb8\udc1b"/>
+<string value="\udbb8\udc1c"/>
+<string value="\udbb8\udc1d"/>
+<string value="\udbb8\udc1e"/>
+<string value="\udbb8\udc1f"/>
+<string value="\udbb8\udc20"/>
+<string value="\udbb8\udc21"/>
+<string value="\udbb8\udc22"/>
+<string value="\udbb8\udc23"/>
+<string value="\udbb8\udc24"/>
+<string value="\udbb8\udc25"/>
+<string value="\udbb8\udc26"/>
+<string value="\udbb8\udc27"/>
+<string value="\udbb8\udc28"/>
+<string value="\udbb8\udc29"/>
+<string value="\udbb8\udc2a"/>
+<string value="\udbb8\udc2b"/>
+<string value="\udbb8\udc2c"/>
+<string value="\udbb8\udc2d"/>
+<string value="\udbb8\udc2e"/>
+<string value="\udbb8\udc2f"/>
+<string value="\udbb8\udc30"/>
+<string value="\udbb8\udc31"/>
+<string value="\udbb8\udc32"/>
+<string value="\udbb8\udc33"/>
+<string value="\udbb8\udc34"/>
+<string value="\udbb8\udc35"/>
+<string value="\udbb8\udc36"/>
+<string value="\udbb8\udc37"/>
+<string value="\udbb8\udc38"/>
+<string value="\udbb8\udc39"/>
+<string value="\udbb8\udc3a"/>
+<string value="\udbb8\udc3b"/>
+<string value="\udbb8\udc3c"/>
+<string value="\udbb8\udc3d"/>
+<string value="\udbb8\udc3e"/>
+<string value="\udbb8\udc3f"/>
+<string value="\udbb8\udc40"/>
+<string value="\udbb8\udc41"/>
+<string value="\udbb8\udc42"/>
+<string value="\udbb8\udc43"/>
+<string value="\udbb8\udc44"/>
+<string value="\udbb8\udc45"/>
+<string value="\udbb8\udc46"/>
+<string value="\udbb8\udc47"/>
+<string value="\udbb8\udc48"/>
+<string value="\udbb8\udc49"/>
+<string value="\udbb8\udc4a"/>
+<string value="\udbb8\udc4b"/>
+<string value="\udbb8\udc4c"/>
+<string value="\udbb8\udc4d"/>
+<string value="\udbb8\udc4e"/>
+<string value="\udbb8\udc4f"/>
+<string value="\udbb8\udc50"/>
+<string value="\udbb8\udc51"/>
+<string value="\udbb8\udc52"/>
+<string value="\udbb8\udc53"/>
+<string value="\udbb8\udc54"/>
+<string value="\udbb8\udc55"/>
+<string value="\udbb8\udc56"/>
+<string value="\udbb8\udc57"/>
+<string value="\udbb8\udc58"/>
+<string value="\udbb8\udc59"/>
+<string value="\udbb8\udc5a"/>
+<string value="\udbb8\udc5b"/>
+<string value="\udbb8\udd90"/>
+<string value="\udbb8\udd91"/>
+<string value="\udbb8\udd92"/>
+<string value="\udbb8\udd93"/>
+<string value="\udbb8\udd94"/>
+<string value="\udbb8\udd95"/>
+<string value="\udbb8\udd96"/>
+<string value="\udbb8\udd97"/>
+<string value="\udbb8\udd98"/>
+<string value="\udbb8\udd99"/>
+<string value="\udbb8\udd9a"/>
+<string value="\udbb8\udd9b"/>
+<string value="\udbb8\udd9c"/>
+<string value="\udbb8\udd9d"/>
+<string value="\udbb8\udd9e"/>
+<string value="\udbb8\udd9f"/>
+<string value="\udbb8\udda0"/>
+<string value="\udbb8\udda1"/>
+<string value="\udbb8\udda2"/>
+<string value="\udbb8\udda3"/>
+<string value="\udbb8\udda4"/>
+<string value="\udbb8\udda5"/>
+<string value="\udbb8\udda6"/>
+<string value="\udbb8\udda7"/>
+<string value="\udbb8\udda8"/>
+<string value="\udbb8\udda9"/>
+<string value="\udbb8\uddaa"/>
+<string value="\udbb8\uddab"/>
+<string value="\udbb8\uddac"/>
+<string value="\udbb8\uddad"/>
+<string value="\udbb8\uddae"/>
+<string value="\udbb8\uddaf"/>
+<string value="\udbb8\uddb0"/>
+<string value="\udbb8\uddb1"/>
+<string value="\udbb8\uddb2"/>
+<string value="\udbb8\uddb3"/>
+<string value="\udbb8\uddb4"/>
+<string value="\udbb8\uddb5"/>
+<string value="\udbb8\uddb6"/>
+<string value="\udbb8\uddb7"/>
+<string value="\udbb8\uddb8"/>
+<string value="\udbb8\uddb9"/>
+<string value="\udbb8\uddba"/>
+<string value="\udbb8\uddbb"/>
+<string value="\udbb8\uddbc"/>
+<string value="\udbb8\uddbd"/>
+<string value="\udbb8\uddbe"/>
+<string value="\udbb8\uddbf"/>
+<string value="\udbb8\uddc0"/>
+<string value="\udbb8\uddc1"/>
+<string value="\udbb8\uddc2"/>
+<string value="\udbb8\uddc3"/>
+<string value="\udbb8\uddc4"/>
+<string value="\udbb8\uddc5"/>
+<string value="\udbb8\uddc6"/>
+<string value="\udbb8\uddc7"/>
+<string value="\udbb8\uddc8"/>
+<string value="\udbb8\uddc9"/>
+<string value="\udbb8\uddca"/>
+<string value="\udbb8\uddcb"/>
+<string value="\udbb8\uddcc"/>
+<string value="\udbb8\uddcd"/>
+<string value="\udbb8\uddce"/>
+<string value="\udbb8\uddcf"/>
+<string value="\udbb8\uddd0"/>
+<string value="\udbb8\uddd1"/>
+<string value="\udbb8\uddd2"/>
+<string value="\udbb8\uddd3"/>
+<string value="\udbb8\uddd4"/>
+<string value="\udbb8\uddd5"/>
+<string value="\udbb8\uddd6"/>
+<string value="\udbb8\uddd7"/>
+<string value="\udbb8\uddd8"/>
+<string value="\udbb8\uddd9"/>
+<string value="\udbb8\uddda"/>
+<string value="\udbb8\udddb"/>
+<string value="\udbb8\udddc"/>
+<string value="\udbb8\udddd"/>
+<string value="\udbb8\uddde"/>
+<string value="\udbb8\udddf"/>
+<string value="\udbb8\udde0"/>
+<string value="\udbb8\udde1"/>
+<string value="\udbb8\udde2"/>
+<string value="\udbb8\udde3"/>
+<string value="\udbb8\udf20"/>
+<string value="\udbb8\udf21"/>
+<string value="\udbb8\udf22"/>
+<string value="\udbb8\udf23"/>
+<string value="\udbb8\udf24"/>
+<string value="\udbb8\udf25"/>
+<string value="\udbb8\udf26"/>
+<string value="\udbb8\udf27"/>
+<string value="\udbb8\udf28"/>
+<string value="\udbb8\udf29"/>
+<string value="\udbb8\udf2a"/>
+<string value="\udbb8\udf2b"/>
+<string value="\udbb8\udf2c"/>
+<string value="\udbb8\udf2d"/>
+<string value="\udbb8\udf2e"/>
+<string value="\udbb8\udf2f"/>
+<string value="\udbb8\udf30"/>
+<string value="\udbb8\udf31"/>
+<string value="\udbb8\udf32"/>
+<string value="\udbb8\udf33"/>
+<string value="\udbb8\udf34"/>
+<string value="\udbb8\udf35"/>
+<string value="\udbb8\udf36"/>
+<string value="\udbb8\udf37"/>
+<string value="\udbb8\udf38"/>
+<string value="\udbb8\udf39"/>
+<string value="\udbb8\udf3a"/>
+<string value="\udbb8\udf3b"/>
+<string value="\udbb8\udf3c"/>
+<string value="\udbb8\udf3d"/>
+<string value="\udbb8\udf3e"/>
+<string value="\udbb8\udf3f"/>
+<string value="\udbb8\udf40"/>
+<string value="\udbb8\udf41"/>
+<string value="\udbb8\udf42"/>
+<string value="\udbb8\udf43"/>
+<string value="\udbb8\udf44"/>
+<string value="\udbb8\udf45"/>
+<string value="\udbb8\udf46"/>
+<string value="\udbb8\udf47"/>
+<string value="\udbb8\udf48"/>
+<string value="\udbb8\udf49"/>
+<string value="\udbb8\udf4a"/>
+<string value="\udbb8\udf4b"/>
+<string value="\udbb8\udf4c"/>
+<string value="\udbb8\udf4d"/>
+<string value="\udbb8\udf4e"/>
+<string value="\udbb8\udf4f"/>
+<string value="\udbb8\udf50"/>
+<string value="\udbb8\udf51"/>
+<string value="\udbb8\udf52"/>
+<string value="\udbb8\udf53"/>
+<string value="\udbb8\udf54"/>
+<string value="\udbb8\udf55"/>
+<string value="\udbb8\udf56"/>
+<string value="\udbb8\udf57"/>
+<string value="\udbb8\udf58"/>
+<string value="\udbb8\udf59"/>
+<string value="\udbb8\udf5a"/>
+<string value="\udbb8\udf5b"/>
+<string value="\udbb8\udf5c"/>
+<string value="\udbb8\udf5d"/>
+<string value="\udbb8\udf5e"/>
+<string value="\udbb8\udf5f"/>
+<string value="\udbb8\udf60"/>
+<string value="\udbb8\udf61"/>
+<string value="\udbb8\udf62"/>
+<string value="\udbb8\udf63"/>
+<string value="\udbb8\udf64"/>
+<string value="\udbb8\udf65"/>
+<string value="\udbb8\udf66"/>
+<string value="\udbb8\udf67"/>
+<string value="\udbb8\udf68"/>
+<string value="\udbb8\udf69"/>
+<string value="\udbb9\udcb0"/>
+<string value="\udbb9\udcb1"/>
+<string value="\udbb9\udcb2"/>
+<string value="\udbb9\udcb3"/>
+<string value="\udbb9\udcb4"/>
+<string value="\udbb9\udcb5"/>
+<string value="\udbb9\udcb6"/>
+<string value="\udbb9\udcb7"/>
+<string value="\udbb9\udcb8"/>
+<string value="\udbb9\udcb9"/>
+<string value="\udbb9\udcba"/>
+<string value="\udbb9\udcbb"/>
+<string value="\udbb9\udcbc"/>
+<string value="\udbb9\udcbd"/>
+<string value="\udbb9\udcbe"/>
+<string value="\udbb9\udcbf"/>
+<string value="\udbb9\udcc0"/>
+<string value="\udbb9\udcc1"/>
+<string value="\udbb9\udcc2"/>
+<string value="\udbb9\udcc3"/>
+<string value="\udbb9\udcc4"/>
+<string value="\udbb9\udcc5"/>
+<string value="\udbb9\udcc6"/>
+<string value="\udbb9\udcc7"/>
+<string value="\udbb9\udcc8"/>
+<string value="\udbb9\udcc9"/>
+<string value="\udbb9\udcca"/>
+<string value="\udbb9\udccb"/>
+<string value="\udbb9\udccc"/>
+<string value="\udbb9\udccd"/>
+<string value="\udbb9\udcce"/>
+<string value="\udbb9\udccf"/>
+<string value="\udbb9\udcd0"/>
+<string value="\udbb9\udcd1"/>
+<string value="\udbb9\udcd2"/>
+<string value="\udbb9\udcd3"/>
+<string value="\udbb9\udcd4"/>
+<string value="\udbb9\udcd5"/>
+<string value="\udbb9\udcd6"/>
+<string value="\udbb9\udcd7"/>
+<string value="\udbb9\udcd8"/>
+<string value="\udbb9\udcd9"/>
+<string value="\udbb9\udcda"/>
+<string value="\udbb9\udcdb"/>
+<string value="\udbb9\udcdc"/>
+<string value="\udbb9\udcdd"/>
+<string value="\udbb9\udcde"/>
+<string value="\udbb9\udcdf"/>
+<string value="\udbb9\udce0"/>
+<string value="\udbb9\udce1"/>
+<string value="\udbb9\udce2"/>
+<string value="\udbb9\udce3"/>
+<string value="\udbb9\udce4"/>
+<string value="\udbb9\udce5"/>
+<string value="\udbb9\udce6"/>
+<string value="\udbb9\udce7"/>
+<string value="\udbb9\udce8"/>
+<string value="\udbb9\udce9"/>
+<string value="\udbb9\udcea"/>
+<string value="\udbb9\udceb"/>
+<string value="\udbb9\udcec"/>
+<string value="\udbb9\udced"/>
+<string value="\udbb9\udcee"/>
+<string value="\udbb9\udcef"/>
+<string value="\udbb9\udcf0"/>
+<string value="\udbb9\udcf1"/>
+<string value="\udbb9\udcf2"/>
+<string value="\udbb9\udcf3"/>
+<string value="\udbb9\udcf4"/>
+<string value="\udbb9\udcf5"/>
+<string value="\udbb9\udcf6"/>
+<string value="\udbb9\udcf7"/>
+<string value="\udbb9\udcf8"/>
+<string value="\udbb9\udcf9"/>
+<string value="\udbb9\udcfa"/>
+<string value="\udbb9\udcfb"/>
+<string value="\udbb9\udcfc"/>
+<string value="\udbb9\udcfd"/>
+<string value="\udbb9\udcfe"/>
+<string value="\udbb9\udcff"/>
+<string value="\udbb9\udd00"/>
+<string value="\udbb9\udd01"/>
+<string value="\udbb9\udd02"/>
+<string value="\udbb9\udd03"/>
+<string value="\udbb9\udd04"/>
+<string value="\udbb9\udd05"/>
+<string value="\udbb9\udd06"/>
+<string value="\udbb9\udd07"/>
+<string value="\udbb9\udd08"/>
+<string value="\udbb9\udd09"/>
+<string value="\udbb9\udd0a"/>
+<string value="\udbb9\udd0b"/>
+<string value="\udbb9\udd0c"/>
+<string value="\udbb9\udd0d"/>
+<string value="\udbb9\udd0e"/>
+<string value="\udbb9\udd0f"/>
+<string value="\udbb9\udd10"/>
+<string value="\udbb9\udd11"/>
+<string value="\udbb9\udd12"/>
+<string value="\udbb9\udd13"/>
+<string value="\udbb9\udd14"/>
+<string value="\udbb9\udd15"/>
+<string value="\udbb9\udd16"/>
+<string value="\udbb9\udd17"/>
+<string value="\udbb9\udd18"/>
+<string value="\udbb9\udd19"/>
+<string value="\udbb9\udd1a"/>
+<string value="\udbb9\udd1b"/>
+<string value="\udbb9\udd1c"/>
+<string value="\udbb9\udd1d"/>
+<string value="\udbb9\udd1e"/>
+<string value="\udbb9\udd1f"/>
+<string value="\udbb9\udd20"/>
+<string value="\udbb9\udd21"/>
+<string value="\udbb9\udd22"/>
+<string value="\udbb9\udd23"/>
+<string value="\udbb9\udd24"/>
+<string value="\udbb9\udd25"/>
+<string value="\udbb9\udd26"/>
+<string value="\udbb9\udd27"/>
+<string value="\udbb9\udd28"/>
+<string value="\udbb9\udd29"/>
+<string value="\udbb9\udd2a"/>
+<string value="\udbb9\udd2b"/>
+<string value="\udbb9\udd2c"/>
+<string value="\udbb9\udd2d"/>
+<string value="\udbb9\udd2e"/>
+<string value="\udbb9\udd2f"/>
+<string value="\udbb9\udd30"/>
+<string value="\udbb9\udd31"/>
+<string value="\udbb9\udd32"/>
+<string value="\udbb9\udd33"/>
+<string value="\udbb9\udd34"/>
+<string value="\udbb9\udd35"/>
+<string value="\udbb9\udd36"/>
+<string value="\udbb9\udd37"/>
+<string value="\udbb9\udd38"/>
+<string value="\udbb9\udd39"/>
+<string value="\udbb9\udd3a"/>
+<string value="\udbb9\udd3b"/>
+<string value="\udbb9\udd3c"/>
+<string value="\udbb9\udd3d"/>
+<string value="\udbb9\udd3e"/>
+<string value="\udbb9\udd3f"/>
+<string value="\udbb9\udd40"/>
+<string value="\udbb9\udd41"/>
+<string value="\udbb9\udd42"/>
+<string value="\udbb9\udd43"/>
+<string value="\udbb9\udd44"/>
+<string value="\udbb9\udd45"/>
+<string value="\udbb9\udd46"/>
+<string value="\udbb9\udd47"/>
+<string value="\udbb9\udd48"/>
+<string value="\udbb9\udd49"/>
+<string value="\udbb9\udd4a"/>
+<string value="\udbb9\udd4b"/>
+<string value="\udbb9\udd4c"/>
+<string value="\udbb9\udd4d"/>
+<string value="\udbb9\udd4e"/>
+<string value="\udbb9\udd4f"/>
+<string value="\udbb9\udd50"/>
+<string value="\udbb9\udd51"/>
+<string value="\udbb9\udd52"/>
+<string value="\udbb9\udd53"/>
+<string value="\udbb9\udfd0"/>
+<string value="\udbb9\udfd1"/>
+<string value="\udbb9\udfd2"/>
+<string value="\udbb9\udfd3"/>
+<string value="\udbb9\udfd4"/>
+<string value="\udbb9\udfd5"/>
+<string value="\udbb9\udfd6"/>
+<string value="\udbb9\udfd7"/>
+<string value="\udbb9\udfd8"/>
+<string value="\udbb9\udfd9"/>
+<string value="\udbb9\udfda"/>
+<string value="\udbb9\udfdb"/>
+<string value="\udbb9\udfdc"/>
+<string value="\udbb9\udfdd"/>
+<string value="\udbb9\udfde"/>
+<string value="\udbb9\udfdf"/>
+<string value="\udbb9\udfe0"/>
+<string value="\udbb9\udfe1"/>
+<string value="\udbb9\udfe2"/>
+<string value="\udbb9\udfe3"/>
+<string value="\udbb9\udfe4"/>
+<string value="\udbb9\udfe5"/>
+<string value="\udbb9\udfe6"/>
+<string value="\udbb9\udfe7"/>
+<string value="\udbb9\udfe8"/>
+<string value="\udbb9\udfe9"/>
+<string value="\udbb9\udfea"/>
+<string value="\udbb9\udfeb"/>
+<string value="\udbb9\udfec"/>
+<string value="\udbb9\udfed"/>
+<string value="\udbb9\udfee"/>
+<string value="\udbb9\udfef"/>
+<string value="\udbb9\udff0"/>
+<string value="\udbb9\udff1"/>
+<string value="\udbb9\udff2"/>
+<string value="\udbb9\udff3"/>
+<string value="\udbb9\udff4"/>
+<string value="\udbb9\udff5"/>
+<string value="\udbb9\udff6"/>
+<string value="\udbb9\udff7"/>
+<string value="\udbb9\udff8"/>
+<string value="\udbb9\udff9"/>
+<string value="\udbb9\udffa"/>
+<string value="\udbb9\udffb"/>
+<string value="\udbb9\udffc"/>
+<string value="\udbb9\udffd"/>
+<string value="\udbb9\udffe"/>
+<string value="\udbb9\udfff"/>
+<string value="\udbba\udc00"/>
+<string value="\udbba\udc01"/>
+<string value="\udbba\udc02"/>
+<string value="\udbba\udc03"/>
+<string value="\udbba\udc04"/>
+<string value="\udbba\udc05"/>
+<string value="\udbba\udc06"/>
+<string value="\udbba\udc07"/>
+<string value="\udbba\udc08"/>
+<string value="\udbba\udc09"/>
+<string value="\udbba\udc0a"/>
+<string value="\udbba\udc0b"/>
+<string value="\udbba\udc0c"/>
+<string value="\udbba\udc0d"/>
+<string value="\udbba\udc0e"/>
+<string value="\udbba\udc0f"/>
+<string value="\udbba\udc10"/>
+<string value="\udbba\udc11"/>
+<string value="\udbba\udc12"/>
+<string value="\udbba\udc13"/>
+<string value="\udbba\udc14"/>
+<string value="\udbba\udc15"/>
+<string value="\udbba\udc16"/>
+<string value="\udbba\udc17"/>
+<string value="\udbba\udc18"/>
+<string value="\udbba\udc19"/>
+<string value="\udbba\udc1a"/>
+<string value="\udbba\udc1b"/>
+<string value="\udbba\udc1c"/>
+<string value="\udbba\udc1d"/>
+<string value="\udbba\udc1e"/>
+<string value="\udbba\udc1f"/>
+<string value="\udbba\udc20"/>
+<string value="\udbba\udc21"/>
+<string value="\udbba\udc22"/>
+<string value="\udbba\udc23"/>
+<string value="\udbba\udc24"/>
+<string value="\udbba\udc25"/>
+<string value="\udbba\udc26"/>
+<string value="\udbba\udc27"/>
+<string value="\udbba\udc28"/>
+<string value="\udbba\udc29"/>
+<string value="\udbba\udc2a"/>
+<string value="\udbba\udc2b"/>
+<string value="\udbba\udc2c"/>
+<string value="\udbba\udc2d"/>
+<string value="\udbba\udc2e"/>
+<string value="\udbba\udc2f"/>
+<string value="\udbba\udc30"/>
+<string value="\udbba\udc31"/>
+<string value="\udbba\udc32"/>
+<string value="\udbba\udc33"/>
+<string value="\udbba\udc34"/>
+<string value="\udbba\udc35"/>
+<string value="\udbba\udc36"/>
+<string value="\udbba\udc37"/>
+<string value="\udbba\udc38"/>
+<string value="\udbba\udc39"/>
+<string value="\udbba\udc3a"/>
+<string value="\udbba\udc3b"/>
+<string value="\udbba\udc3c"/>
+<string value="\udbba\udd60"/>
+<string value="\udbba\udd61"/>
+<string value="\udbba\udd62"/>
+<string value="\udbba\udd63"/>
+<string value="\udbba\udd64"/>
+<string value="\udbba\udd65"/>
+<string value="\udbba\udd66"/>
+<string value="\udbba\udd67"/>
+<string value="\udbba\udd68"/>
+<string value="\udbba\udd69"/>
+<string value="\udbba\udd6a"/>
+<string value="\udbba\udd6b"/>
+<string value="\udbba\udd6c"/>
+<string value="\udbba\udd6d"/>
+<string value="\udbba\udd6e"/>
+<string value="\udbba\udd6f"/>
+<string value="\udbba\udd70"/>
+<string value="\udbba\udd71"/>
+<string value="\udbba\udd72"/>
+<string value="\udbba\udd73"/>
+<string value="\udbba\udd74"/>
+<string value="\udbba\udd75"/>
+<string value="\udbba\udd76"/>
+<string value="\udbba\udd77"/>
+<string value="\udbba\udd78"/>
+<string value="\udbba\udd79"/>
+<string value="\udbba\udd7a"/>
+<string value="\udbba\udd7b"/>
+<string value="\udbba\udd7c"/>
+<string value="\udbba\udd7d"/>
+<string value="\udbba\udd7e"/>
+<string value="\udbba\udd7f"/>
+<string value="\udbba\udd80"/>
+<string value="\udbba\udd81"/>
+<string value="\udbba\udd82"/>
+<string value="\udbba\udd83"/>
+<string value="\udbba\udd84"/>
+<string value="\udbba\udd85"/>
+<string value="\udbba\udd86"/>
+<string value="\udbba\udd87"/>
+<string value="\udbba\udd88"/>
+<string value="\udbba\udef0"/>
+<string value="\udbba\udef1"/>
+<string value="\udbba\udef2"/>
+<string value="\udbba\udef3"/>
+<string value="\udbba\udef4"/>
+<string value="\udbba\udef5"/>
+<string value="\udbba\udef6"/>
+<string value="\udbba\udef7"/>
+<string value="\udbba\udef8"/>
+<string value="\udbba\udef9"/>
+<string value="\udbba\udefa"/>
+<string value="\udbba\udefb"/>
+<string value="\udbba\udefc"/>
+<string value="\udbba\udefd"/>
+<string value="\udbba\udefe"/>
+<string value="\udbba\udeff"/>
+<string value="\udbba\udf00"/>
+<string value="\udbba\udf01"/>
+<string value="\udbba\udf02"/>
+<string value="\udbba\udf03"/>
+<string value="\udbba\udf04"/>
+<string value="\udbba\udf05"/>
+<string value="\udbba\udf06"/>
+<string value="\udbba\udf07"/>
+<string value="\udbba\udf08"/>
+<string value="\udbba\udf09"/>
+<string value="\udbba\udf0a"/>
+<string value="\udbba\udf0b"/>
+<string value="\udbba\udf0c"/>
+<string value="\udbba\udf0d"/>
+<string value="\udbba\udf0e"/>
+<string value="\udbba\udf0f"/>
+<string value="\udbba\udf10"/>
+<string value="\udbba\udf11"/>
+<string value="\udbba\udf12"/>
+<string value="\udbba\udf13"/>
+<string value="\udbba\udf14"/>
+<string value="\udbba\udf15"/>
+<string value="\udbba\udf16"/>
+<string value="\udbba\udf17"/>
+<string value="\udbba\udf18"/>
+<string value="\udbba\udf19"/>
+<string value="\udbba\udf1a"/>
+<string value="\udbba\udf1b"/>
+<string value="\udbba\udf1c"/>
+<string value="\udbba\udf1d"/>
+<string value="\udbba\udf1e"/>
+<string value="\udbba\udf1f"/>
+<string value="\udbba\udf20"/>
+<string value="\udbba\udf21"/>
+<string value="\udbba\udf22"/>
+<string value="\udbba\udf23"/>
+<string value="\udbba\udf24"/>
+<string value="\udbba\udf25"/>
+<string value="\udbba\udf26"/>
+<string value="\udbba\udf27"/>
+<string value="\udbba\udf28"/>
+<string value="\udbba\udf29"/>
+<string value="\udbba\udf2a"/>
+<string value="\udbba\udf2b"/>
+<string value="\udbba\udf2c"/>
+<string value="\udbba\udf2d"/>
+<string value="\udbba\udf2e"/>
+<string value="\udbba\udf2f"/>
+<string value="\udbba\udf30"/>
+<string value="\udbba\udf31"/>
+<string value="\udbba\udf32"/>
+<string value="\udbba\udf33"/>
+<string value="\udbba\udf34"/>
+<string value="\udbba\udf35"/>
+<string value="\udbba\udf36"/>
+<string value="\udbba\udf37"/>
+<string value="\udbba\udf38"/>
+<string value="\udbba\udf39"/>
+<string value="\udbba\udf3a"/>
+<string value="\udbba\udf3b"/>
+<string value="\udbba\udf3c"/>
+<string value="\udbba\udf3d"/>
+<string value="\udbba\udf3e"/>
+<string value="\udbba\udf3f"/>
+<string value="\udbba\udf40"/>
+<string value="\udbba\udf41"/>
+<string value="\udbba\udf42"/>
+<string value="\udbba\udf43"/>
+<string value="\udbba\udf44"/>
+<string value="\udbba\udf45"/>
+<string value="\udbba\udf46"/>
+<string value="\udbba\udf47"/>
+<string value="\udbba\udf48"/>
+<string value="\udbba\udf49"/>
+<string value="\udbba\udf4a"/>
+<string value="\udbba\udf4b"/>
+<string value="\udbba\udf4c"/>
+<string value="\udbba\udf4d"/>
+<string value="\udbba\udf4e"/>
+<string value="\udbba\udf4f"/>
+<string value="\udbba\udf50"/>
+<string value="\udbba\udf51"/>
+<string value="\udbba\udf52"/>
+<string value="\udbba\udf53"/>
+<string value="\udbba\udf54"/>
+<string value="\udbba\udf55"/>
+<string value="\udbba\udf56"/>
+<string value="\udbba\udf57"/>
+<string value="\udbba\udf58"/>
+<string value="\udbba\udf59"/>
+<string value="\udbba\udf5a"/>
+<string value="\udbba\udf5b"/>
+<string value="\udbba\udf5c"/>
+<string value="\udbba\udf5d"/>
+<string value="\udbba\udf5e"/>
+<string value="\udbba\udf5f"/>
+<string value="\udbba\udf60"/>
+<string value="\udbba\udf61"/>
+<string value="\udbba\udf62"/>
+<string value="\udbba\udf63"/>
+<string value="\udbba\udf64"/>
+<string value="\udbba\udf65"/>
+<string value="\udbba\udf66"/>
+<string value="\udbba\udf67"/>
+<string value="\udbba\udf68"/>
+<string value="\udbba\udf69"/>
+<string value="\udbba\udf6a"/>
+<string value="\udbba\udf6b"/>
+<string value="\udbba\udf6c"/>
+<string value="\udbba\udf6d"/>
+<string value="\udbba\udf6e"/>
+<string value="\udbba\udf6f"/>
+<string value="\udbba\udf70"/>
+<string value="\udbba\udf71"/>
+<string value="\udbba\udf72"/>
+<string value="\udbba\udf73"/>
+<string value="\udbba\udf74"/>
+<string value="\udbba\udf75"/>
+<string value="\udbba\udf76"/>
+<string value="\udbba\udf77"/>
+<string value="\udbba\udf78"/>
+<string value="\udbba\udf79"/>
+<string value="\udbba\udf7a"/>
+<string value="\udbba\udf7b"/>
+<string value="\udbba\udf7c"/>
+<string value="\udbba\udf7d"/>
+<string value="\udbba\udf7e"/>
+<string value="\udbba\udf7f"/>
+<string value="\udbba\udf80"/>
+<string value="\udbba\udf81"/>
+<string value="\udbba\udf82"/>
+<string value="\udbba\udf83"/>
+<string value="\udbba\udf84"/>
+<string value="\udbba\udf85"/>
+<string value="\udbba\udf86"/>
+<string value="\udbba\udf87"/>
+<string value="\udbba\udf88"/>
+<string value="\udbba\udf89"/>
+<string value="\udbba\udf8a"/>
+<string value="\udbba\udf8b"/>
+<string value="\udbba\udf8c"/>
+<string value="\udbba\udf8d"/>
+<string value="\udbba\udf8e"/>
+<string value="\udbba\udf8f"/>
+<string value="\udbba\udf90"/>
+<string value="\udbba\udf91"/>
+<string value="\udbba\udf92"/>
+<string value="\udbba\udf93"/>
+<string value="\udbba\udf94"/>
+<string value="\udbba\udf95"/>
+<string value="\udbba\udf96"/>
+<string value="\udbba\udf97"/>
+<string value="\udbba\udf98"/>
+<string value="\udbba\udf99"/>
+<string value="\udbba\udf9a"/>
+<string value="\udbba\udf9b"/>
+<string value="\udbba\udf9c"/>
+<string value="\udbba\udf9d"/>
+<string value="\udbba\udf9e"/>
+<string value="\udbba\udf9f"/>
+<string value="\udbba\udfa0"/>
+<string value="\udbba\udfa1"/>
+<string value="\udbba\udfa2"/>
+<string value="\udbbb\ude10"/>
+<string value="\udbbb\ude11"/>
+<string value="\udbbb\ude12"/>
+<string value="\udbbb\ude13"/>
+<string value="\udbbb\ude14"/>
+<string value="\udbbb\ude15"/>
+<string value="\udbbb\ude16"/>
+<string value="\udbbb\ude17"/>
+<string value="\udbbb\ude18"/>
+<string value="\udbbb\ude19"/>
+<string value="\udbbb\ude1a"/>
+<string value="\udbbb\ude1b"/>
+<string value="\udbbb\ude1c"/>
+<string value="\udbbb\ude1d"/>
+<string value="\udbbb\ude1e"/>
+<string value="\udbbb\ude1f"/>
+<string value="\udbbb\ude20"/>
+<string value="\udbbb\ude21"/>
+<string value="\udbbb\ude22"/>
+<string value="\udbbb\ude23"/>
+<string value="\udbbb\ude24"/>
+<string value="\udbbb\ude25"/>
+<string value="\udbbb\ude26"/>
+<string value="\udbbb\ude27"/>
+<string value="\udbbb\ude28"/>
+<string value="\udbbb\ude29"/>
+<string value="\udbbb\ude2a"/>
+<string value="\udbbb\ude2b"/>
+<string value="\udbbb\ude2c"/>
+<string value="\udbbb\ude2d"/>
+<string value="\udbbb\ude2e"/>
+<string value="\udbbb\ude2f"/>
+<string value="\udbbb\ude30"/>
+<string value="\udbbb\ude31"/>
+<string value="\udbbb\ude32"/>
+<string value="\udbbb\ude33"/>
+<string value="\udbbb\ude40"/>
+<string value="\udbbb\ude41"/>
+<string value="\udbbb\ude42"/>
+<string value="\udbbb\ude43"/>
+<string value="\udbbb\ude44"/>
+<string value="\udbbb\ude45"/>
+<string value="\udbbb\ude46"/>
+<string value="\udbbb\ude47"/>
+<string value="\udbbb\ude48"/>
+<string value="\udbbb\ude49"/>
+<string value="\udbbb\ude4a"/>
+<string value="\udbbb\ude70"/>
+<string value="\udbbb\ude71"/>
+<string value="\udbbb\ude72"/>
+<string value="\udbbb\ude73"/>
+<string value="\udbbb\ude74"/>
+<string value="\udbbb\ude75"/>
+<string value="\udbbb\ude76"/>
+<string value="\udbbb\ude77"/>
+<string value="\udbbb\ude78"/>
+<string value="\udbbb\ude79"/>
+<string value="\udbbb\ude7a"/>
+<string value="\udbbb\ude7b"/>
+<string value="\udbbb\ude7c"/>
+<string value="\udbbb\ude7d"/>
+<string value="\udbbb\udea0"/>
+</keystring>
diff --git a/res/xml/symbols_japan_emoji_list1.xml b/res/xml/symbols_japan_emoji_list1.xml
new file mode 100644
index 0000000..f7506c5
--- /dev/null
+++ b/res/xml/symbols_japan_emoji_list1.xml
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--symbols -->
+<keystring>
+<!-- 1. Nature -->
+<!-- Weather -->
+<string value="\udbb8\udc00"/>
+<string value="\udbb8\udc01"/>
+<string value="\udbb8\udc02"/>
+<string value="\udbb8\udc03"/>
+<string value="\udbb8\udc04"/>
+<string value="\udbb8\udc05"/>
+<string value="\udbb8\udc06"/>
+<string value="\udbb8\udc07"/>
+<string value="\udbb8\udc08"/>
+<string value="\udbb8\udc09"/>
+<string value="\udbb8\udc0a"/>
+<string value="\udbb8\udc0b"/>
+<string value="\udbb8\udc0c"/>
+<string value="\udbb8\udc0d"/>
+<string value="\udbb8\udc0e"/>
+<string value="\udbb8\udc0f"/>
+<string value="\udbb8\udc10"/>
+<!-- Moon -->
+<string value="\udbb8\udc11"/>
+<string value="\udbb8\udc12"/>
+<string value="\udbb8\udc13"/>
+<string value="\udbb8\udc14"/>
+<string value="\udbb8\udc15"/>
+<string value="\udbb8\udc16"/>
+<string value="\udbb8\udc17"/>
+<!-- Time -->
+<string value="\udbb8\udc18"/>
+<string value="\udbb8\udc19"/>
+<string value="\udbb8\udc1a"/>
+<string value="\udbb8\udc1b"/>
+<string value="\udbb8\udc1c"/>
+<string value="\udbb8\udc1d"/>
+<string value="\udbb8\udc1e"/>
+<string value="\udbb8\udc1f"/>
+<string value="\udbb8\udc20"/>
+<string value="\udbb8\udc21"/>
+<string value="\udbb8\udc22"/>
+<string value="\udbb8\udc23"/>
+<string value="\udbb8\udc24"/>
+<string value="\udbb8\udc25"/>
+<string value="\udbb8\udc26"/>
+<string value="\udbb8\udc27"/>
+<string value="\udbb8\udc28"/>
+<string value="\udbb8\udc29"/>
+<string value="\udbb8\udc2a"/>
+<!-- Zodiacal Symbols -->
+<string value="\udbb8\udc2b"/>
+<string value="\udbb8\udc2c"/>
+<string value="\udbb8\udc2d"/>
+<string value="\udbb8\udc2e"/>
+<string value="\udbb8\udc2f"/>
+<string value="\udbb8\udc30"/>
+<string value="\udbb8\udc31"/>
+<string value="\udbb8\udc32"/>
+<string value="\udbb8\udc33"/>
+<string value="\udbb8\udc34"/>
+<string value="\udbb8\udc35"/>
+<string value="\udbb8\udc36"/>
+<string value="\udbb8\udc37"/>
+<!-- Places in Nature -->
+<string value="\udbb8\udc38"/>
+<string value="\udbb8\udc39"/>
+<string value="\udbb8\udc3a"/>
+<string value="\udbb8\udc3b"/>
+<!-- Plants -->
+<string value="\udbb8\udc3c"/>
+<string value="\udbb8\udc3d"/>
+<string value="\udbb8\udc3e"/>
+<string value="\udbb8\udc3f"/>
+<string value="\udbb8\udc40"/>
+<string value="\udbb8\udc41"/>
+<string value="\udbb8\udc42"/>
+<string value="\udbb8\udc43"/>
+<string value="\udbb8\udc44"/>
+<string value="\udbb8\udc45"/>
+<string value="\udbb8\udc46"/>
+<string value="\udbb8\udc47"/>
+<string value="\udbb8\udc48"/>
+<string value="\udbb8\udc49"/>
+<string value="\udbb8\udc4a"/>
+<string value="\udbb8\udc4b"/>
+<string value="\udbb8\udc4c"/>
+<string value="\udbb8\udc4d"/>
+<string value="\udbb8\udc4e"/>
+<!-- Fruits -->
+<string value="\udbb8\udc4f"/>
+<string value="\udbb8\udc50"/>
+<string value="\udbb8\udc51"/>
+<string value="\udbb8\udc52"/>
+<string value="\udbb8\udc53"/>
+<string value="\udbb8\udc54"/>
+<string value="\udbb8\udc55"/>
+<string value="\udbb8\udc56"/>
+<string value="\udbb8\udc57"/>
+<string value="\udbb8\udc58"/>
+<string value="\udbb8\udc59"/>
+<string value="\udbb8\udc5a"/>
+<string value="\udbb8\udc5b"/>
+<!-- 2. Human/Living Things -->
+<!-- Facial Parts -->
+<string value="\udbb8\udd90"/>
+<string value="\udbb8\udd91"/>
+<string value="\udbb8\udd92"/>
+<string value="\udbb8\udd93"/>
+<string value="\udbb8\udd94"/>
+<!-- Personal Care -->
+<string value="\udbb8\udd95"/>
+<string value="\udbb8\udd96"/>
+<string value="\udbb8\udd97"/>
+<string value="\udbb8\udd98"/>
+<string value="\udbb8\udd99"/>
+<!-- People / Personalities -->
+<string value="\udbb8\udd9a"/>
+<string value="\udbb8\udd9b"/>
+<string value="\udbb8\udd9c"/>
+<string value="\udbb8\udd9d"/>
+<string value="\udbb8\udd9e"/>
+<string value="\udbb8\udd9f"/>
+<string value="\udbb8\udda0"/>
+<string value="\udbb8\udda1"/>
+<string value="\udbb8\udda2"/>
+<string value="\udbb8\udda3"/>
+<string value="\udbb8\udda4"/>
+<string value="\udbb8\udda5"/>
+<string value="\udbb8\udda6"/>
+<string value="\udbb8\udda7"/>
+<string value="\udbb8\udda8"/>
+<string value="\udbb8\udda9"/>
+<string value="\udbb8\uddaa"/>
+<string value="\udbb8\uddab"/>
+<string value="\udbb8\uddac"/>
+<string value="\udbb8\uddad"/>
+<string value="\udbb8\uddae"/>
+<string value="\udbb8\uddaf"/>
+<string value="\udbb8\uddb0"/>
+<string value="\udbb8\uddb1"/>
+<string value="\udbb8\uddb2"/>
+<string value="\udbb8\uddb3"/>
+<string value="\udbb8\uddb4"/>
+<string value="\udbb8\uddb5"/>
+<string value="\udbb8\uddb6"/>
+<!-- Animals -->
+<string value="\udbb8\uddb7"/>
+<string value="\udbb8\uddb8"/>
+<string value="\udbb8\uddb9"/>
+<string value="\udbb8\uddba"/>
+<string value="\udbb8\uddbb"/>
+<string value="\udbb8\uddbc"/>
+<string value="\udbb8\uddbd"/>
+<string value="\udbb8\uddbe"/>
+<string value="\udbb8\uddbf"/>
+<string value="\udbb8\uddc0"/>
+<string value="\udbb8\uddc1"/>
+<string value="\udbb8\uddc2"/>
+<string value="\udbb8\uddc3"/>
+<string value="\udbb8\uddc4"/>
+<string value="\udbb8\uddc5"/>
+<string value="\udbb8\uddc6"/>
+<string value="\udbb8\uddc7"/>
+<string value="\udbb8\uddc8"/>
+<string value="\udbb8\uddc9"/>
+<string value="\udbb8\uddca"/>
+<string value="\udbb8\uddcb"/>
+<string value="\udbb8\uddcc"/>
+<string value="\udbb8\uddcd"/>
+<string value="\udbb8\uddce"/>
+<string value="\udbb8\uddcf"/>
+<string value="\udbb8\uddd0"/>
+<string value="\udbb8\uddd1"/>
+<string value="\udbb8\uddd2"/>
+<string value="\udbb8\uddd3"/>
+<string value="\udbb8\uddd4"/>
+<string value="\udbb8\uddd5"/>
+<string value="\udbb8\uddd6"/>
+<string value="\udbb8\uddd7"/>
+<string value="\udbb8\uddd8"/>
+<string value="\udbb8\uddd9"/>
+<string value="\udbb8\uddda"/>
+<string value="\udbb8\udddb"/>
+<string value="\udbb8\udddc"/>
+<string value="\udbb8\udddd"/>
+<string value="\udbb8\uddde"/>
+<string value="\udbb8\udddf"/>
+<string value="\udbb8\udde0"/>
+<string value="\udbb8\udde1"/>
+<string value="\udbb8\udde2"/>
+<string value="\udbb8\udde3"/>
+<!-- 3. Faces and Smiley's -->
+<!-- Faces -->
+<string value="\udbb8\udf20"/>
+<string value="\udbb8\udf21"/>
+<string value="\udbb8\udf22"/>
+<string value="\udbb8\udf23"/>
+<string value="\udbb8\udf24"/>
+<string value="\udbb8\udf25"/>
+<string value="\udbb8\udf26"/>
+<string value="\udbb8\udf27"/>
+<string value="\udbb8\udf28"/>
+<string value="\udbb8\udf29"/>
+<string value="\udbb8\udf2a"/>
+<string value="\udbb8\udf2b"/>
+<string value="\udbb8\udf2c"/>
+<string value="\udbb8\udf2d"/>
+<string value="\udbb8\udf2e"/>
+<string value="\udbb8\udf2f"/>
+<string value="\udbb8\udf30"/>
+<string value="\udbb8\udf31"/>
+<string value="\udbb8\udf32"/>
+<string value="\udbb8\udf33"/>
+<string value="\udbb8\udf34"/>
+<string value="\udbb8\udf35"/>
+<string value="\udbb8\udf36"/>
+<string value="\udbb8\udf37"/>
+<string value="\udbb8\udf38"/>
+<string value="\udbb8\udf39"/>
+<string value="\udbb8\udf3a"/>
+<string value="\udbb8\udf3b"/>
+<string value="\udbb8\udf3c"/>
+<string value="\udbb8\udf3d"/>
+<string value="\udbb8\udf3e"/>
+<string value="\udbb8\udf3f"/>
+<string value="\udbb8\udf40"/>
+<string value="\udbb8\udf41"/>
+<string value="\udbb8\udf42"/>
+<string value="\udbb8\udf43"/>
+<string value="\udbb8\udf44"/>
+<string value="\udbb8\udf45"/>
+<string value="\udbb8\udf46"/>
+<string value="\udbb8\udf47"/>
+<!-- More faces (animals, persons, characters) -->
+<string value="\udbb8\udf48"/>
+<string value="\udbb8\udf49"/>
+<string value="\udbb8\udf4a"/>
+<string value="\udbb8\udf4b"/>
+<string value="\udbb8\udf4c"/>
+<string value="\udbb8\udf4d"/>
+<string value="\udbb8\udf4e"/>
+<string value="\udbb8\udf4f"/>
+<string value="\udbb8\udf50"/>
+<string value="\udbb8\udf51"/>
+<string value="\udbb8\udf52"/>
+<string value="\udbb8\udf53"/>
+<string value="\udbb8\udf54"/>
+<string value="\udbb8\udf55"/>
+<string value="\udbb8\udf56"/>
+<string value="\udbb8\udf57"/>
+<string value="\udbb8\udf58"/>
+<string value="\udbb8\udf59"/>
+<string value="\udbb8\udf5a"/>
+<string value="\udbb8\udf5b"/>
+<string value="\udbb8\udf5c"/>
+<string value="\udbb8\udf5d"/>
+<string value="\udbb8\udf5e"/>
+<string value="\udbb8\udf5f"/>
+<string value="\udbb8\udf60"/>
+<string value="\udbb8\udf61"/>
+<string value="\udbb8\udf62"/>
+<string value="\udbb8\udf63"/>
+<string value="\udbb8\udf64"/>
+<string value="\udbb8\udf65"/>
+<string value="\udbb8\udf66"/>
+<string value="\udbb8\udf67"/>
+<string value="\udbb8\udf68"/>
+<string value="\udbb8\udf69"/>
+</keystring>
diff --git a/res/xml/symbols_japan_emoji_list2.xml b/res/xml/symbols_japan_emoji_list2.xml
new file mode 100644
index 0000000..10bdaf9
--- /dev/null
+++ b/res/xml/symbols_japan_emoji_list2.xml
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--symbols -->
+<keystring>
+<!-- 6. Foods -->
+<!-- Prepared Food -->
+<string value="\udbba\udd60"/>
+<string value="\udbba\udd61"/>
+<string value="\udbba\udd62"/>
+<string value="\udbba\udd63"/>
+<string value="\udbba\udd64"/>
+<string value="\udbba\udd65"/>
+<string value="\udbba\udd66"/>
+<string value="\udbba\udd67"/>
+<string value="\udbba\udd68"/>
+<string value="\udbba\udd69"/>
+<string value="\udbba\udd6a"/>
+<string value="\udbba\udd6b"/>
+<string value="\udbba\udd6c"/>
+<string value="\udbba\udd6d"/>
+<string value="\udbba\udd6e"/>
+<string value="\udbba\udd6f"/>
+<string value="\udbba\udd70"/>
+<string value="\udbba\udd71"/>
+<string value="\udbba\udd72"/>
+<string value="\udbba\udd73"/>
+<string value="\udbba\udd74"/>
+<string value="\udbba\udd75"/>
+<string value="\udbba\udd76"/>
+<string value="\udbba\udd77"/>
+<string value="\udbba\udd78"/>
+<string value="\udbba\udd79"/>
+<string value="\udbba\udd7a"/>
+<string value="\udbba\udd7b"/>
+<string value="\udbba\udd7c"/>
+<string value="\udbba\udd7d"/>
+<string value="\udbba\udd7e"/>
+<string value="\udbba\udd7f"/>
+<string value="\udbba\udd80"/>
+<!-- Drink -->
+<string value="\udbba\udd81"/>
+<string value="\udbba\udd82"/>
+<string value="\udbba\udd83"/>
+<string value="\udbba\udd84"/>
+<string value="\udbba\udd85"/>
+<string value="\udbba\udd86"/>
+<string value="\udbba\udd87"/>
+<string value="\udbba\udd88"/>
+<!-- 7. Abstract Concepts -->
+<!-- Arrows -->
+<string value="\udbba\udef0"/>
+<string value="\udbba\udef1"/>
+<string value="\udbba\udef2"/>
+<string value="\udbba\udef3"/>
+<string value="\udbba\udef4"/>
+<string value="\udbba\udef5"/>
+<string value="\udbba\udef6"/>
+<string value="\udbba\udef7"/>
+<string value="\udbba\udef8"/>
+<string value="\udbba\udef9"/>
+<string value="\udbba\udefa"/>
+<string value="\udbba\udefb"/>
+<string value="\udbba\udefc"/>
+<string value="\udbba\udefd"/>
+<string value="\udbba\udefe"/>
+<string value="\udbba\udeff"/>
+<string value="\udbba\udf00"/>
+<string value="\udbba\udf01"/>
+<string value="\udbba\udf02"/>
+<string value="\udbba\udf03"/>
+<!-- Punctuation -->
+<string value="\udbba\udf04"/>
+<string value="\udbba\udf05"/>
+<string value="\udbba\udf06"/>
+<string value="\udbba\udf07"/>
+<string value="\udbba\udf08"/>
+<string value="\udbba\udf09"/>
+<string value="\udbba\udf0a"/>
+<string value="\udbba\udf0b"/>
+<!-- Hearts -->
+<string value="\udbba\udf0c"/>
+<string value="\udbba\udf0d"/>
+<string value="\udbba\udf0e"/>
+<string value="\udbba\udf0f"/>
+<string value="\udbba\udf10"/>
+<string value="\udbba\udf11"/>
+<string value="\udbba\udf12"/>
+<string value="\udbba\udf13"/>
+<string value="\udbba\udf14"/>
+<string value="\udbba\udf15"/>
+<string value="\udbba\udf16"/>
+<string value="\udbba\udf17"/>
+<string value="\udbba\udf18"/>
+<string value="\udbba\udf19"/>
+<!-- Cards -->
+<string value="\udbba\udf1a"/>
+<string value="\udbba\udf1b"/>
+<string value="\udbba\udf1c"/>
+<string value="\udbba\udf1d"/>
+<!-- Letter Signs and other Signs -->
+<string value="\udbba\udf1e"/>
+<string value="\udbba\udf1f"/>
+<string value="\udbba\udf20"/>
+<string value="\udbba\udf21"/>
+<string value="\udbba\udf22"/>
+<string value="\udbba\udf23"/>
+<string value="\udbba\udf24"/>
+<string value="\udbba\udf25"/>
+<string value="\udbba\udf26"/>
+<string value="\udbba\udf27"/>
+<string value="\udbba\udf28"/>
+<string value="\udbba\udf29"/>
+<string value="\udbba\udf2a"/>
+<string value="\udbba\udf2b"/>
+<string value="\udbba\udf2c"/>
+<string value="\udbba\udf2d"/>
+<string value="\udbba\udf2e"/>
+<string value="\udbba\udf2f"/>
+<string value="\udbba\udf30"/>
+<string value="\udbba\udf31"/>
+<string value="\udbba\udf32"/>
+<string value="\udbba\udf33"/>
+<string value="\udbba\udf34"/>
+<string value="\udbba\udf35"/>
+<string value="\udbba\udf36"/>
+<string value="\udbba\udf37"/>
+<string value="\udbba\udf38"/>
+<string value="\udbba\udf39"/>
+<string value="\udbba\udf3a"/>
+<string value="\udbba\udf3b"/>
+<string value="\udbba\udf3c"/>
+<string value="\udbba\udf3d"/>
+<string value="\udbba\udf3e"/>
+<string value="\udbba\udf3f"/>
+<string value="\udbba\udf40"/>
+<string value="\udbba\udf41"/>
+<string value="\udbba\udf42"/>
+<string value="\udbba\udf43"/>
+<string value="\udbba\udf44"/>
+<string value="\udbba\udf45"/>
+<string value="\udbba\udf46"/>
+<string value="\udbba\udf47"/>
+<string value="\udbba\udf48"/>
+<string value="\udbba\udf49"/>
+<string value="\udbba\udf4a"/>
+<string value="\udbba\udf4b"/>
+<string value="\udbba\udf4c"/>
+<string value="\udbba\udf4d"/>
+<string value="\udbba\udf4e"/>
+<string value="\udbba\udf4f"/>
+<string value="\udbba\udf50"/>
+<!-- Arithmetic Operators -->
+<string value="\udbba\udf51"/>
+<string value="\udbba\udf52"/>
+<string value="\udbba\udf53"/>
+<string value="\udbba\udf54"/>
+<!-- Emotion Symbols -->
+<string value="\udbba\udf55"/>
+<string value="\udbba\udf56"/>
+<string value="\udbba\udf57"/>
+<string value="\udbba\udf58"/>
+<string value="\udbba\udf59"/>
+<string value="\udbba\udf5a"/>
+<string value="\udbba\udf5b"/>
+<string value="\udbba\udf5c"/>
+<string value="\udbba\udf5d"/>
+<string value="\udbba\udf5e"/>
+<string value="\udbba\udf5f"/>
+<!-- Shapes / Sparkles -->
+<string value="\udbba\udf60"/>
+<string value="\udbba\udf61"/>
+<string value="\udbba\udf62"/>
+<string value="\udbba\udf63"/>
+<string value="\udbba\udf64"/>
+<string value="\udbba\udf65"/>
+<string value="\udbba\udf66"/>
+<string value="\udbba\udf67"/>
+<string value="\udbba\udf68"/>
+<string value="\udbba\udf69"/>
+<string value="\udbba\udf6a"/>
+<string value="\udbba\udf6b"/>
+<string value="\udbba\udf6c"/>
+<string value="\udbba\udf6d"/>
+<string value="\udbba\udf6e"/>
+<string value="\udbba\udf6f"/>
+<string value="\udbba\udf70"/>
+<string value="\udbba\udf71"/>
+<string value="\udbba\udf72"/>
+<string value="\udbba\udf73"/>
+<string value="\udbba\udf74"/>
+<string value="\udbba\udf75"/>
+<string value="\udbba\udf76"/>
+<string value="\udbba\udf77"/>
+<string value="\udbba\udf78"/>
+<string value="\udbba\udf79"/>
+<!-- School -->
+<string value="\udbba\udf7a"/>
+<string value="\udbba\udf7b"/>
+<string value="\udbba\udf7c"/>
+<string value="\udbba\udf7d"/>
+<string value="\udbba\udf7e"/>
+<string value="\udbba\udf7f"/>
+<string value="\udbba\udf80"/>
+<!-- Internet Specific -->
+<string value="\udbba\udf81"/>
+<string value="\udbba\udf82"/>
+<string value="\udbba\udf83"/>
+<string value="\udbba\udf84"/>
+<string value="\udbba\udf85"/>
+<string value="\udbba\udf86"/>
+<string value="\udbba\udf87"/>
+<string value="\udbba\udf88"/>
+<string value="\udbba\udf89"/>
+<string value="\udbba\udf8a"/>
+<string value="\udbba\udf8b"/>
+<string value="\udbba\udf8c"/>
+<string value="\udbba\udf8d"/>
+<string value="\udbba\udf8e"/>
+<string value="\udbba\udf8f"/>
+<string value="\udbba\udf90"/>
+<string value="\udbba\udf91"/>
+<string value="\udbba\udf92"/>
+<!-- Hand Signals -->
+<string value="\udbba\udf93"/>
+<string value="\udbba\udf94"/>
+<string value="\udbba\udf95"/>
+<string value="\udbba\udf96"/>
+<string value="\udbba\udf97"/>
+<string value="\udbba\udf98"/>
+<string value="\udbba\udf99"/>
+<string value="\udbba\udf9a"/>
+<string value="\udbba\udf9b"/>
+<string value="\udbba\udf9c"/>
+<string value="\udbba\udf9d"/>
+<string value="\udbba\udf9e"/>
+<string value="\udbba\udf9f"/>
+<string value="\udbba\udfa0"/>
+<string value="\udbba\udfa1"/>
+<string value="\udbba\udfa2"/>
+<!-- 8. Business logos/symbols -->
+<!-- DoCoMo specific -->
+<string value="\udbbb\ude10"/>
+<string value="\udbbb\ude11"/>
+<string value="\udbbb\ude12"/>
+<string value="\udbbb\ude13"/>
+<string value="\udbbb\ude14"/>
+<string value="\udbbb\ude15"/>
+<string value="\udbbb\ude16"/>
+<string value="\udbbb\ude17"/>
+<string value="\udbbb\ude18"/>
+<string value="\udbbb\ude19"/>
+<string value="\udbbb\ude1a"/>
+<string value="\udbbb\ude1b"/>
+<string value="\udbbb\ude1c"/>
+<string value="\udbbb\ude1d"/>
+<string value="\udbbb\ude1e"/>
+<string value="\udbbb\ude1f"/>
+<string value="\udbbb\ude20"/>
+<string value="\udbbb\ude21"/>
+<string value="\udbbb\ude22"/>
+<string value="\udbbb\ude23"/>
+<string value="\udbbb\ude24"/>
+<string value="\udbbb\ude25"/>
+<string value="\udbbb\ude26"/>
+<string value="\udbbb\ude27"/>
+<string value="\udbbb\ude28"/>
+<string value="\udbbb\ude29"/>
+<string value="\udbbb\ude2a"/>
+<string value="\udbbb\ude2b"/>
+<string value="\udbbb\ude2c"/>
+<string value="\udbbb\ude2d"/>
+<string value="\udbbb\ude2e"/>
+<string value="\udbbb\ude2f"/>
+<string value="\udbbb\ude30"/>
+<string value="\udbbb\ude31"/>
+<string value="\udbbb\ude32"/>
+<string value="\udbbb\ude33"/>
+<!-- KDDI specific -->
+<string value="\udbbb\ude40"/>
+<string value="\udbbb\ude41"/>
+<string value="\udbbb\ude42"/>
+<string value="\udbbb\ude43"/>
+<string value="\udbbb\ude44"/>
+<string value="\udbbb\ude45"/>
+<string value="\udbbb\ude46"/>
+<string value="\udbbb\ude47"/>
+<string value="\udbbb\ude48"/>
+<string value="\udbbb\ude49"/>
+<string value="\udbbb\ude4a"/>
+<!-- Softbank specific -->
+<string value="\udbbb\ude70"/>
+<string value="\udbbb\ude71"/>
+<string value="\udbbb\ude72"/>
+<string value="\udbbb\ude73"/>
+<string value="\udbbb\ude74"/>
+<string value="\udbbb\ude75"/>
+<string value="\udbbb\ude76"/>
+<string value="\udbbb\ude77"/>
+<string value="\udbbb\ude78"/>
+<string value="\udbbb\ude79"/>
+<string value="\udbbb\ude7a"/>
+<string value="\udbbb\ude7b"/>
+<string value="\udbbb\ude7c"/>
+<string value="\udbbb\ude7d"/>
+<!-- Google specific -->
+<string value="\udbbb\udea0"/>
+</keystring>
diff --git a/res/xml/symbols_japan_emoji_list3.xml b/res/xml/symbols_japan_emoji_list3.xml
new file mode 100644
index 0000000..dbd0668
--- /dev/null
+++ b/res/xml/symbols_japan_emoji_list3.xml
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+
+ 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.
+-->
+<!--symbols -->
+<keystring>
+<!-- 4. Artifacts -->
+<!-- Buildings / Common Places -->
+<string value="\udbb9\udcb0"/>
+<string value="\udbb9\udcb1"/>
+<string value="\udbb9\udcb2"/>
+<string value="\udbb9\udcb3"/>
+<string value="\udbb9\udcb4"/>
+<string value="\udbb9\udcb5"/>
+<string value="\udbb9\udcb6"/>
+<string value="\udbb9\udcb7"/>
+<string value="\udbb9\udcb8"/>
+<string value="\udbb9\udcb9"/>
+<string value="\udbb9\udcba"/>
+<string value="\udbb9\udcbb"/>
+<string value="\udbb9\udcbc"/>
+<string value="\udbb9\udcbd"/>
+<string value="\udbb9\udcbe"/>
+<string value="\udbb9\udcbf"/>
+<string value="\udbb9\udcc0"/>
+<string value="\udbb9\udcc1"/>
+<string value="\udbb9\udcc2"/>
+<!-- Landmarks /Famous Places -->
+<string value="\udbb9\udcc3"/>
+<string value="\udbb9\udcc4"/>
+<string value="\udbb9\udcc5"/>
+<string value="\udbb9\udcc6"/>
+<string value="\udbb9\udcc7"/>
+<string value="\udbb9\udcc8"/>
+<!-- Tools -->
+<string value="\udbb9\udcc9"/>
+<string value="\udbb9\udcca"/>
+<string value="\udbb9\udccb"/>
+<!-- Clothing / Wearables -->
+<string value="\udbb9\udccc"/>
+<string value="\udbb9\udccd"/>
+<string value="\udbb9\udcce"/>
+<string value="\udbb9\udccf"/>
+<string value="\udbb9\udcd0"/>
+<string value="\udbb9\udcd1"/>
+<string value="\udbb9\udcd2"/>
+<string value="\udbb9\udcd3"/>
+<string value="\udbb9\udcd4"/>
+<string value="\udbb9\udcd5"/>
+<string value="\udbb9\udcd6"/>
+<string value="\udbb9\udcd7"/>
+<string value="\udbb9\udcd8"/>
+<string value="\udbb9\udcd9"/>
+<string value="\udbb9\udcda"/>
+<string value="\udbb9\udcdb"/>
+<!-- Money -->
+<string value="\udbb9\udcdc"/>
+<string value="\udbb9\udcdd"/>
+<string value="\udbb9\udcde"/>
+<string value="\udbb9\udcdf"/>
+<string value="\udbb9\udce0"/>
+<string value="\udbb9\udce1"/>
+<string value="\udbb9\udce2"/>
+<string value="\udbb9\udce3"/>
+<string value="\udbb9\udce4"/>
+<!-- Flags -->
+<string value="\udbb9\udce5"/>
+<string value="\udbb9\udce6"/>
+<string value="\udbb9\udce7"/>
+<string value="\udbb9\udce8"/>
+<string value="\udbb9\udce9"/>
+<string value="\udbb9\udcea"/>
+<string value="\udbb9\udceb"/>
+<string value="\udbb9\udcec"/>
+<string value="\udbb9\udced"/>
+<string value="\udbb9\udcee"/>
+<!-- Miscellaneous Things -->
+<string value="\udbb9\udcef"/>
+<string value="\udbb9\udcf0"/>
+<string value="\udbb9\udcf1"/>
+<string value="\udbb9\udcf2"/>
+<string value="\udbb9\udcf3"/>
+<string value="\udbb9\udcf4"/>
+<string value="\udbb9\udcf5"/>
+<string value="\udbb9\udcf6"/>
+<string value="\udbb9\udcf7"/>
+<string value="\udbb9\udcf8"/>
+<string value="\udbb9\udcf9"/>
+<string value="\udbb9\udcfa"/>
+<string value="\udbb9\udcfb"/>
+<string value="\udbb9\udcfc"/>
+<string value="\udbb9\udcfd"/>
+<string value="\udbb9\udcfe"/>
+<string value="\udbb9\udcff"/>
+<string value="\udbb9\udd00"/>
+<string value="\udbb9\udd01"/>
+<string value="\udbb9\udd02"/>
+<string value="\udbb9\udd03"/>
+<string value="\udbb9\udd04"/>
+<!-- Bath / Bathroom -->
+<string value="\udbb9\udd05"/>
+<string value="\udbb9\udd06"/>
+<string value="\udbb9\udd07"/>
+<string value="\udbb9\udd08"/>
+<!-- Medical -->
+<string value="\udbb9\udd09"/>
+<string value="\udbb9\udd0a"/>
+<string value="\udbb9\udd0b"/>
+<string value="\udbb9\udd0c"/>
+<string value="\udbb9\udd0d"/>
+<string value="\udbb9\udd0e"/>
+<!-- Celebration / Holidays -->
+<string value="\udbb9\udd0f"/>
+<string value="\udbb9\udd10"/>
+<string value="\udbb9\udd11"/>
+<string value="\udbb9\udd12"/>
+<string value="\udbb9\udd13"/>
+<string value="\udbb9\udd14"/>
+<string value="\udbb9\udd15"/>
+<string value="\udbb9\udd16"/>
+<string value="\udbb9\udd17"/>
+<string value="\udbb9\udd18"/>
+<string value="\udbb9\udd19"/>
+<string value="\udbb9\udd1a"/>
+<string value="\udbb9\udd1b"/>
+<string value="\udbb9\udd1c"/>
+<string value="\udbb9\udd1d"/>
+<string value="\udbb9\udd1e"/>
+<string value="\udbb9\udd1f"/>
+<string value="\udbb9\udd20"/>
+<string value="\udbb9\udd21"/>
+<!-- Communication -->
+<string value="\udbb9\udd22"/>
+<string value="\udbb9\udd23"/>
+<string value="\udbb9\udd24"/>
+<string value="\udbb9\udd25"/>
+<string value="\udbb9\udd26"/>
+<string value="\udbb9\udd27"/>
+<string value="\udbb9\udd28"/>
+<string value="\udbb9\udd29"/>
+<string value="\udbb9\udd2a"/>
+<string value="\udbb9\udd2b"/>
+<string value="\udbb9\udd2c"/>
+<string value="\udbb9\udd2d"/>
+<string value="\udbb9\udd2e"/>
+<string value="\udbb9\udd2f"/>
+<string value="\udbb9\udd30"/>
+<string value="\udbb9\udd31"/>
+<string value="\udbb9\udd32"/>
+<string value="\udbb9\udd33"/>
+<string value="\udbb9\udd34"/>
+<string value="\udbb9\udd35"/>
+<!-- Office -->
+<string value="\udbb9\udd36"/>
+<string value="\udbb9\udd37"/>
+<string value="\udbb9\udd38"/>
+<string value="\udbb9\udd39"/>
+<string value="\udbb9\udd3a"/>
+<string value="\udbb9\udd3b"/>
+<string value="\udbb9\udd3c"/>
+<string value="\udbb9\udd3d"/>
+<string value="\udbb9\udd3e"/>
+<string value="\udbb9\udd3f"/>
+<string value="\udbb9\udd40"/>
+<string value="\udbb9\udd41"/>
+<string value="\udbb9\udd42"/>
+<string value="\udbb9\udd43"/>
+<string value="\udbb9\udd44"/>
+<string value="\udbb9\udd45"/>
+<string value="\udbb9\udd46"/>
+<string value="\udbb9\udd47"/>
+<string value="\udbb9\udd48"/>
+<string value="\udbb9\udd49"/>
+<string value="\udbb9\udd4a"/>
+<string value="\udbb9\udd4b"/>
+<string value="\udbb9\udd4c"/>
+<string value="\udbb9\udd4d"/>
+<string value="\udbb9\udd4e"/>
+<string value="\udbb9\udd4f"/>
+<string value="\udbb9\udd50"/>
+<string value="\udbb9\udd51"/>
+<string value="\udbb9\udd52"/>
+<!-- Relic -->
+<string value="\udbb9\udd53"/>
+<!-- 5. Activities / Work / Entertainment -->
+<!-- Sports -->
+<string value="\udbb9\udfd0"/>
+<string value="\udbb9\udfd1"/>
+<string value="\udbb9\udfd2"/>
+<string value="\udbb9\udfd3"/>
+<string value="\udbb9\udfd4"/>
+<string value="\udbb9\udfd5"/>
+<string value="\udbb9\udfd6"/>
+<string value="\udbb9\udfd7"/>
+<string value="\udbb9\udfd8"/>
+<string value="\udbb9\udfd9"/>
+<string value="\udbb9\udfda"/>
+<string value="\udbb9\udfdb"/>
+<string value="\udbb9\udfdc"/>
+<string value="\udbb9\udfdd"/>
+<string value="\udbb9\udfde"/>
+<!-- Transportation -->
+<string value="\udbb9\udfdf"/>
+<string value="\udbb9\udfe0"/>
+<string value="\udbb9\udfe1"/>
+<string value="\udbb9\udfe2"/>
+<string value="\udbb9\udfe3"/>
+<string value="\udbb9\udfe4"/>
+<string value="\udbb9\udfe5"/>
+<string value="\udbb9\udfe6"/>
+<string value="\udbb9\udfe7"/>
+<string value="\udbb9\udfe8"/>
+<string value="\udbb9\udfe9"/>
+<string value="\udbb9\udfea"/>
+<string value="\udbb9\udfeb"/>
+<string value="\udbb9\udfec"/>
+<string value="\udbb9\udfed"/>
+<string value="\udbb9\udfee"/>
+<string value="\udbb9\udfef"/>
+<string value="\udbb9\udff0"/>
+<string value="\udbb9\udff1"/>
+<string value="\udbb9\udff2"/>
+<string value="\udbb9\udff3"/>
+<string value="\udbb9\udff4"/>
+<!-- Driving -->
+<string value="\udbb9\udff5"/>
+<string value="\udbb9\udff6"/>
+<string value="\udbb9\udff7"/>
+<string value="\udbb9\udff8"/>
+<string value="\udbb9\udff9"/>
+<!-- Recreation -->
+<string value="\udbb9\udffa"/>
+<string value="\udbb9\udffb"/>
+<string value="\udbb9\udffc"/>
+<string value="\udbb9\udffd"/>
+<string value="\udbb9\udffe"/>
+<string value="\udbb9\udfff"/>
+<!-- Entertainment -->
+<string value="\udbba\udc00"/>
+<string value="\udbba\udc01"/>
+<string value="\udbba\udc02"/>
+<string value="\udbba\udc03"/>
+<string value="\udbba\udc04"/>
+<string value="\udbba\udc05"/>
+<string value="\udbba\udc06"/>
+<string value="\udbba\udc07"/>
+<string value="\udbba\udc08"/>
+<string value="\udbba\udc09"/>
+<!-- Games -->
+<string value="\udbba\udc0a"/>
+<string value="\udbba\udc0b"/>
+<string value="\udbba\udc0c"/>
+<string value="\udbba\udc0d"/>
+<string value="\udbba\udc0e"/>
+<string value="\udbba\udc0f"/>
+<string value="\udbba\udc10"/>
+<string value="\udbba\udc11"/>
+<string value="\udbba\udc12"/>
+<!-- Music -->
+<string value="\udbba\udc13"/>
+<string value="\udbba\udc14"/>
+<string value="\udbba\udc15"/>
+<string value="\udbba\udc16"/>
+<string value="\udbba\udc17"/>
+<string value="\udbba\udc18"/>
+<string value="\udbba\udc19"/>
+<string value="\udbba\udc1a"/>
+<string value="\udbba\udc1b"/>
+<!-- Media -->
+<string value="\udbba\udc1c"/>
+<string value="\udbba\udc1d"/>
+<string value="\udbba\udc1e"/>
+<string value="\udbba\udc1f"/>
+<string value="\udbba\udc20"/>
+<string value="\udbba\udc21"/>
+<string value="\udbba\udc22"/>
+<!-- Romance -->
+<string value="\udbba\udc23"/>
+<string value="\udbba\udc24"/>
+<string value="\udbba\udc25"/>
+<string value="\udbba\udc26"/>
+<string value="\udbba\udc27"/>
+<string value="\udbba\udc28"/>
+<string value="\udbba\udc29"/>
+<string value="\udbba\udc2a"/>
+<!-- Phone Specific -->
+<string value="\udbba\udc2b"/>
+<string value="\udbba\udc2c"/>
+<string value="\udbba\udc2d"/>
+<string value="\udbba\udc2e"/>
+<string value="\udbba\udc2f"/>
+<string value="\udbba\udc30"/>
+<string value="\udbba\udc31"/>
+<string value="\udbba\udc32"/>
+<string value="\udbba\udc33"/>
+<string value="\udbba\udc34"/>
+<string value="\udbba\udc35"/>
+<string value="\udbba\udc36"/>
+<string value="\udbba\udc37"/>
+<string value="\udbba\udc38"/>
+<string value="\udbba\udc39"/>
+<string value="\udbba\udc3a"/>
+<string value="\udbba\udc3b"/>
+<string value="\udbba\udc3c"/>
+</keystring>
diff --git a/res/xml/symbols_japan_face_list.xml b/res/xml/symbols_japan_face_list.xml
index 371e022..3d5eec4 100644
--- a/res/xml/symbols_japan_face_list.xml
+++ b/res/xml/symbols_japan_face_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/symbols_japan_list.xml b/res/xml/symbols_japan_list.xml
index d25f546..8b3c571 100644
--- a/res/xml/symbols_japan_list.xml
+++ b/res/xml/symbols_japan_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,40 @@
-->
<!--symbols -->
<keystring>
+ <string value="@string/half_symbol_categories_txt"/>
+ <string value="!"/>
+ <string value="“"/>
+ <string value="\#"/>
+ <string value="$"/>
+ <string value="%"/>
+ <string value="&"/>
+ <string value="'"/>
+ <string value="("/>
+ <string value=")"/>
+ <string value="*"/>
+ <string value="+"/>
+ <string value=","/>
+ <string value="-"/>
+ <string value="."/>
+ <string value="/"/>
+ <string value=":"/>
+ <string value=";"/>
+ <string value="<"/>
+ <string value="="/>
+ <string value=">"/>
+ <string value="\?"/>
+ <string value="\@"/>
+ <string value="["/>
+ <string value="\\"/>
+ <string value="]"/>
+ <string value="^"/>
+ <string value="_"/>
+ <string value="`"/>
+ <string value="{"/>
+ <string value="|"/>
+ <string value="}"/>
+ <string value="~"/>
+ <string value="@string/full_symbol_categories_txt"/>
<string value="、"/>
<string value="。"/>
<string value=","/>
@@ -244,7 +278,4 @@
<string value="∠"/>
<string value="∟"/>
<string value="⊿"/>
- <string value="∵"/>
- <string value="∩"/>
- <string value="∪"/>
</keystring>
diff --git a/res/xml/symbols_latin12_list.xml b/res/xml/symbols_latin12_list.xml
index e3f6022..62e3bf1 100644
--- a/res/xml/symbols_latin12_list.xml
+++ b/res/xml/symbols_latin12_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/res/xml/symbols_latin1_list.xml b/res/xml/symbols_latin1_list.xml
index 6198124..f5b5edb 100644
--- a/res/xml/symbols_latin1_list.xml
+++ b/res/xml/symbols_latin1_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
-->
<!--symbols -->
<keystring>
+ <string value="@string/half_symbol_categories_txt"/>
<string value="!"/>
<string value="“"/>
<string value="\#"/>
diff --git a/res/xml/symbols_latin2_list.xml b/res/xml/symbols_latin2_list.xml
index c8d1045..508df9d 100644
--- a/res/xml/symbols_latin2_list.xml
+++ b/res/xml/symbols_latin2_list.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/BaseInputView.java b/src/jp/co/omronsoft/openwnn/BaseInputView.java
new file mode 100644
index 0000000..36da017
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/BaseInputView.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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 jp.co.omronsoft.openwnn;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.util.AttributeSet;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+
+/**
+ * The view of the base input.
+ */
+public class BaseInputView extends LinearLayout {
+ /** The dialog that opens with long tap */
+ public AlertDialog mOptionsDialog = null;
+
+ /**
+ * Constructor
+ */
+ public BaseInputView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ /**
+ * Constructor
+ */
+ BaseInputView(Context context) {
+ super(context);
+ }
+
+ /**
+ * Called when the window containing has change its visibility.
+ *
+ * @see android.view.View#onWindowVisibilityChanged(int)
+ */
+ @Override protected void onWindowVisibilityChanged(int visibility) {
+ super.onWindowVisibilityChanged(visibility);
+ if ((visibility != VISIBLE) && (mOptionsDialog != null)) {
+ mOptionsDialog.dismiss();
+ }
+ }
+
+ /**
+ * Show dialog.
+ *
+ * @param builder the builder of dialog
+ */
+ public void showDialog(AlertDialog.Builder builder) {
+ if (mOptionsDialog != null) {
+ mOptionsDialog.dismiss();
+ }
+
+ mOptionsDialog = builder.create();
+ Window window = mOptionsDialog.getWindow();
+ WindowManager.LayoutParams dialogLayoutParams = window.getAttributes();
+ dialogLayoutParams.token = getWindowToken();
+ dialogLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
+ window.setAttributes(dialogLayoutParams);
+ window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+
+ mOptionsDialog.show();
+ }
+
+ /**
+ * Close dialog.
+ */
+ public void closeDialog() {
+ if (mOptionsDialog != null) {
+ mOptionsDialog.dismiss();
+ mOptionsDialog = null;
+ }
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/CandidateFilter.java b/src/jp/co/omronsoft/openwnn/CandidateFilter.java
index 993aef1..32181d2 100644
--- a/src/jp/co/omronsoft/openwnn/CandidateFilter.java
+++ b/src/jp/co/omronsoft/openwnn/CandidateFilter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/CandidateTextView.java b/src/jp/co/omronsoft/openwnn/CandidateTextView.java
new file mode 100644
index 0000000..f177441
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/CandidateTextView.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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 jp.co.omronsoft.openwnn;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.text.TextPaint;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/**
+ * The default candidates view manager using {@link TextView}.
+ *
+ * @author Copyright (C) 2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ */
+public class CandidateTextView extends TextView {
+
+ /** Width of fontsize change */
+ private static final int WIDTH_SIZE[] = {0, 50, 100};
+ /** Fontsize corresponding to width */
+ private static final float CUSTOM_FONTSIZE[] = {20.0f, 17.0f, 15.0f};
+ /** Width of fontsize change beginning */
+ private static final int CHANGE_FONTSIZE_WIDTH = 120;
+
+ /** Maximum width of candidate view */
+ private int mMaxWidth;
+ /** Width of fontsize change beginning */
+ private int mChangeFontSize;
+ /** Minimum width of candidate view */
+ private int mCandidateMinimumWidth;
+
+ /** Alert dialog */
+ private Dialog mCandidateDialog = null;
+
+ /**
+ * Constructor
+ * @param context context
+ */
+ public CandidateTextView(Context context) {
+ super(context);
+ setSoundEffectsEnabled(false);
+ }
+
+ /**
+ * Constructor
+ * @param context context
+ * @param candidateMinimumHeight Minimum height of candidate view
+ * @param candidateMinimumWidth Minimum width of candidate view
+ * @param maxWidth Maximum width of candidate view
+ */
+ public CandidateTextView(Context context, int candidateMinimumHeight, int candidateMinimumWidth, int maxWidth) {
+ super(context);
+ setSoundEffectsEnabled(false);
+ setTextColor(getResources().getColor(R.color.candidate_text_1line));
+ setBackgroundResource(R.drawable.cand_back_1line);
+ setGravity(Gravity.CENTER);
+ setSingleLine();
+ setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ 1.0f));
+ setMinHeight(candidateMinimumHeight);
+ setMinimumWidth(candidateMinimumWidth);
+ mCandidateMinimumWidth = candidateMinimumWidth;
+ mMaxWidth = maxWidth;
+ mChangeFontSize = maxWidth - CHANGE_FONTSIZE_WIDTH;
+ }
+
+ /**
+ * Textview is set to the best content for the display of candidate.
+ * @param WnnWord candidate
+ * @param wordCount candidate id
+ * @param OnClickListener Operation when clicking
+ * @param OnClickListener Operation when longclicking
+ * @return Set completion textview
+ */
+ public CandidateTextView setCandidateTextView(WnnWord word, int wordCount,
+ OnClickListener candidateOnClick,
+ OnLongClickListener candidateOnLongClick) {
+ setTextSize(CUSTOM_FONTSIZE[0]);
+ setText(word.candidate);
+ setId(wordCount);
+ setVisibility(View.VISIBLE);
+ setPressed(false);
+ setWidth(0);
+ setEllipsize(null);
+ setOnClickListener(candidateOnClick);
+ setOnLongClickListener(candidateOnLongClick);
+ setCustomCandidate(word);
+ return this;
+ }
+
+ /**
+ * If the text view is set to the best width for the display,
+ * and it is necessary, the character is shortened.
+ * @param WnnWord candidate word
+ * @return int textview width
+ */
+ public int setCustomCandidate(WnnWord word) {
+ TextPaint paint = getPaint();
+ int width = (int)paint.measureText(word.candidate, 0, word.candidate.length());
+ width += getPaddingLeft() + getPaddingRight();
+
+ if (width > mCandidateMinimumWidth) {
+ int i;
+ for (i = 0; i < WIDTH_SIZE.length; i++) {
+ if (width > mChangeFontSize + WIDTH_SIZE[i]) {
+ setTextSize(CUSTOM_FONTSIZE[i]);
+ }
+ }
+
+ width = (int)paint.measureText(word.candidate, 0, word.candidate.length());
+ width += getPaddingLeft() + getPaddingRight();
+
+ if (width >= mMaxWidth) {
+ setWidth(mMaxWidth);
+ width = mMaxWidth;
+ setEllipsize(TextUtils.TruncateAt.START);
+ } else {
+ setWidth(width);
+ }
+ } else {
+ setWidth(mCandidateMinimumWidth);
+ width = mCandidateMinimumWidth;
+ }
+ return width;
+ }
+
+ /** @see View#setBackgroundDrawable */
+ @Override public void setBackgroundDrawable(Drawable d) {
+ super.setBackgroundDrawable(d);
+ setPadding(20, 0, 20, 0);
+ }
+
+ /**
+ * Display Dialog.
+ *
+ * @param builder The Dialog builder,
+ */
+ public void displayCandidateDialog(Dialog builder) {
+ if (mCandidateDialog != null) {
+ mCandidateDialog.dismiss();
+ mCandidateDialog = null;
+ }
+ mCandidateDialog = builder;
+ Window window = mCandidateDialog.getWindow();
+ WindowManager.LayoutParams lp = window.getAttributes();
+ lp.token = getWindowToken();
+ lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
+ window.setAttributes(lp);
+ window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ mCandidateDialog.show();
+ }
+
+ /** @see android.view.View#onWindowVisibilityChanged */
+ @Override protected void onWindowVisibilityChanged(int visibility) {
+ super.onWindowVisibilityChanged(visibility);
+ if ((visibility != VISIBLE) && (mCandidateDialog != null)) {
+ mCandidateDialog.dismiss();
+ }
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/CandidatesViewManager.java b/src/jp/co/omronsoft/openwnn/CandidatesViewManager.java
index 01dee1e..be2b9e6 100644
--- a/src/jp/co/omronsoft/openwnn/CandidatesViewManager.java
+++ b/src/jp/co/omronsoft/openwnn/CandidatesViewManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,15 +16,26 @@
package jp.co.omronsoft.openwnn;
-import android.view.View;
+import android.app.Dialog;
+import android.content.res.Resources;
import android.content.SharedPreferences;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.HorizontalScrollView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.util.TypedValue;
+
+import java.util.ArrayList;
/**
* The interface of candidates view manager used by {@link OpenWnn}.
*
- * @author Copyright (C) 2008, 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2008-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
-public interface CandidatesViewManager {
+public abstract class CandidatesViewManager {
/** Size of candidates view (normal) */
public static final int VIEW_TYPE_NORMAL = 0;
/** Size of candidates view (full) */
@@ -53,6 +64,15 @@
*/
public static final int ATTRIBUTE_AUTO_GENERATED = 4;
+ /** The view of the LongPressDialog */
+ protected View mViewLongPressDialog = null;
+
+ /** Whether candidates long click enable */
+ protected Dialog mDialog = null;
+
+ /** The word pressed */
+ protected WnnWord mWord;
+
/**
* Initialize the candidates view.
*
@@ -62,28 +82,32 @@
*
* @return The candidates view created in the initialize process; {@code null} if cannot create a candidates view.
*/
- public View initView(OpenWnn parent, int width, int height);
+ public abstract View initView(OpenWnn parent, int width, int height);
/**
* Get the candidates view being used currently.
*
* @return The candidates view; {@code null} if no candidates view is used currently.
*/
- public View getCurrentView();
+ public abstract View getCurrentView();
/**
* Set the candidates view type.
*
- * @param type The candidate view type
+ * @param type The candidate view type,
+ * from {@link CandidatesViewManager#VIEW_TYPE_NORMAL} to
+ * {@link CandidatesViewManager#VIEW_TYPE_CLOSE}
*/
- public void setViewType(int type);
+ public abstract void setViewType(int type);
/**
* Get the candidates view type.
*
- * @return The view type
+ * @return The view type,
+ * from {@link CandidatesViewManager#VIEW_TYPE_NORMAL} to
+ * {@link CandidatesViewManager#VIEW_TYPE_CLOSE}
*/
- public int getViewType();
+ public abstract int getViewType();
/**
* Display candidates.
@@ -92,17 +116,77 @@
*
* @see jp.co.omronsoft.openwnn.WnnEngine#getNextCandidate
*/
- public void displayCandidates(WnnEngine converter);
+ public abstract void displayCandidates(WnnEngine converter);
/**
* Clear and hide the candidates view.
*/
- public void clearCandidates();
+ public abstract void clearCandidates();
/**
- * Reflect the preferences in the candidates view.
+ * Replace the preferences in the candidates view.
*
* @param pref The preferences
*/
- public void setPreferences(SharedPreferences pref);
+ public abstract void setPreferences(SharedPreferences pref);
+
+ /**
+ * KeyEvent action for soft key board.
+ *
+ * @param key Key event
+ */
+ public abstract void processMoveKeyEvent(int key);
+
+ /**
+ * Get candidate is focused now.
+ *
+ * @return the Candidate is focused of a flag.
+ */
+ public abstract boolean isFocusCandidate();
+
+ /**
+ * Select candidate that has focus.
+ */
+ public abstract void selectFocusCandidate();
+
+ /**
+ * MSG_SET_CANDIDATES removeMessages.
+ */
+ public abstract void setCandidateMsgRemove();
+
+ /**
+ * Display Dialog.
+ *
+ * @param view View,
+ * @param word Display word,
+ */
+ protected void displayDialog(View view, final WnnWord word) {
+ if ((view instanceof CandidateTextView) && (null != mViewLongPressDialog)) {
+ closeDialog();
+ mDialog = new Dialog(view.getContext(), R.style.Dialog);
+
+ TextView text = (TextView)mViewLongPressDialog.findViewById(R.id.candidate_longpress_dialog_text);
+ text.setText(word.candidate);
+
+ mDialog.setContentView(mViewLongPressDialog);
+ ((CandidateTextView) view).displayCandidateDialog(mDialog);
+ }
+ }
+
+ /**
+ * Close Dialog.
+ *
+ */
+ public void closeDialog() {
+ if (null != mDialog) {
+ mDialog.dismiss();
+ mDialog = null;
+ if (null != mViewLongPressDialog) {
+ ViewGroup parent = (ViewGroup)mViewLongPressDialog.getParent();
+ if (null != parent) {
+ parent.removeView(mViewLongPressDialog);
+ }
+ }
+ }
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/ComposingText.java b/src/jp/co/omronsoft/openwnn/ComposingText.java
index 328efb5..dddab2c 100644
--- a/src/jp/co/omronsoft/openwnn/ComposingText.java
+++ b/src/jp/co/omronsoft/openwnn/ComposingText.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java b/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
index edb308c..096460b 100644
--- a/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
+++ b/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,12 +16,12 @@
package jp.co.omronsoft.openwnn;
+import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
import android.widget.TextView;
-import android.inputmethodservice.Keyboard;
-import android.inputmethodservice.KeyboardView;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.content.res.*;
@@ -31,10 +31,14 @@
import android.util.Log;
+import jp.co.omronsoft.openwnn.Keyboard;
+import jp.co.omronsoft.openwnn.KeyboardView;
+import jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener;
+
/**
* The default software keyboard class.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class DefaultSoftKeyboard implements InputViewManager, KeyboardView.OnKeyboardActionListener {
/*
@@ -104,7 +108,16 @@
public static final int KEYCODE_JP12_HAN_ALPHA = -229;
/** Japanese 12-key keyboard [MODE TOOGLE CHANGE] */
public static final int KEYCODE_JP12_TOGGLE_MODE = -230;
-
+
+ /** Key code for symbol keyboard alt key */
+ public static final int KEYCODE_4KEY_MODE = -300;
+ /** Key code for symbol keyboard up key */
+ public static final int KEYCODE_4KEY_UP = -301;
+ /** Key code for symbol keyboard down key */
+ public static final int KEYCODE_4KEY_DOWN = -302;
+ /** Key code for symbol keyboard del key */
+ public static final int KEYCODE_4KEY_CLEAR = -303;
+
/* for Qwerty keyboard */
/** Qwerty keyboard [DEL] */
public static final int KEYCODE_QWERTY_BACKSPACE = -100;
@@ -146,7 +159,7 @@
protected KeyboardView mKeyboardView;
/** View objects (main side) */
- protected ViewGroup mMainView;
+ protected BaseInputView mMainView;
/** View objects (sub side) */
protected ViewGroup mSubView;
@@ -262,6 +275,15 @@
/** Whether the H/W keyboard is hidden. */
protected boolean mHardKeyboardHidden = true;
+ /** Whether the H/W 12key keyboard. */
+ protected boolean mEnableHardware12Keyboard = false;
+
+ /** Symbol keyboard */
+ protected Keyboard mSymbolKeyboard;
+
+ /** Symbol keyboard state */
+ protected boolean mIsSymbolKeyboard = false;
+
/**
* Status of the composing text
* <br>
@@ -278,6 +300,60 @@
/** Key toggle cycle table currently using */
protected String[] mCurrentCycleTable;
+ /** Event listener for symbol keyboard */
+ private OnKeyboardActionListener mSymbolOnKeyboardAction = new OnKeyboardActionListener() {
+ public void onKey(int primaryCode, int[] keyCodes) {
+ switch (primaryCode) {
+ case KEYCODE_4KEY_MODE:
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_KEY,
+ new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)));
+ break;
+
+ case KEYCODE_4KEY_UP:
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_UP));
+ break;
+
+ case KEYCODE_4KEY_DOWN:
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_DOWN));
+ break;
+
+ case KEYCODE_4KEY_CLEAR:
+ InputConnection connection = mWnn.getCurrentInputConnection();
+ if (connection != null) {
+ connection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
+ }
+ return;
+
+ default:
+ break;
+ }
+ }
+ public void onPress(int primaryCode) {
+ playSoundAndVibration();
+ }
+ public void onText(CharSequence text) { }
+ public void swipeLeft() { }
+ public void swipeRight() { }
+ public void swipeUp() { }
+ public void swipeDown() { }
+ public void onRelease(int primaryCode) { }
+ public boolean onLongPress(Keyboard.Key key) {
+ switch (key.codes[0]) {
+ case KEYCODE_4KEY_UP:
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_UP));
+ return true;
+
+ case KEYCODE_4KEY_DOWN:
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_DOWN));
+ return true;
+
+ default:
+ break;
+ }
+ return false;
+ }
+ };
+
/**
* Constructor
*/
@@ -527,6 +603,9 @@
*/
createKeyboards(parent);
+ /* create symbol keyboard */
+ mSymbolKeyboard = new Keyboard(parent, R.xml.keyboard_4key);
+
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);
String skin = pref.getString("keyboard_skin",
mWnn.getResources().getString(R.string.keyboard_skin_id_default));
@@ -536,14 +615,17 @@
mKeyboardView.setOnKeyboardActionListener(this);
mCurrentKeyboard = null;
- mMainView = (ViewGroup) parent.getLayoutInflater().inflate(R.layout.keyboard_default_main, null);
+ mMainView = (BaseInputView) parent.getLayoutInflater().inflate(R.layout.keyboard_default_main, null);
mSubView = (ViewGroup) parent.getLayoutInflater().inflate(R.layout.keyboard_default_sub, null);
- if (mDisplayMode == LANDSCAPE || !mHardKeyboardHidden) {
- mMainView.addView(mSubView);
+
+ if (!mHardKeyboardHidden) {
+ if (!mEnableHardware12Keyboard) {
+ mMainView.addView(mSubView);
+ }
} else if (mKeyboardView != null) {
mMainView.addView(mKeyboardView);
}
-
+
return mMainView;
}
@@ -624,9 +706,6 @@
/** @see jp.co.omronsoft.openwnn.InputViewManager#getCurrentView */
public View getCurrentView() {
- if (mCurrentKeyboard == null) {
- return null;
- }
return mMainView;
}
@@ -682,7 +761,12 @@
}
/* pop-up preview */
- mKeyboardView.setPreviewEnabled(pref.getBoolean("popup_preview", true));
+ if (OpenWnn.isXLarge()) {
+ mKeyboardView.setPreviewEnabled(false);
+ } else {
+ mKeyboardView.setPreviewEnabled(pref.getBoolean("popup_preview", true));
+ mKeyboardView.clearWindowInfo();
+ }
}
@@ -694,39 +778,63 @@
mDisableKeyInput = true;
}
+ /** @see jp.co.omronsoft.openwnn.InputViewManager#showInputView */
+ public void showInputView() {
+ if (mKeyboardView != null) {
+ mKeyboardView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /** @see jp.co.omronsoft.openwnn.InputViewManager#hideInputView */
+ public void hideInputView() {
+ mKeyboardView.setVisibility(View.GONE);
+ }
+
/***********************************************************************
* onKeyboardActionListener
***********************************************************************/
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#onKey */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onKey */
public void onKey(int primaryCode, int[] keyCodes) { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#swipeRight */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeRight */
public void swipeRight() { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#swipeLeft */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeLeft */
public void swipeLeft() { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#swipeDown */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeDown */
public void swipeDown() { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#swipeUp */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#swipeUp */
public void swipeUp() { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#onRelease */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onRelease */
public void onRelease(int x) { }
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#onPress */
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onPress */
public void onPress(int x) {
+ playSoundAndVibration();
+ }
+
+ /** @see android.jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onLongPress */
+ public boolean onLongPress(Keyboard.Key key) {
+ return false;
+ }
+
+ /**
+ * Play sound & vibration.
+ */
+ private void playSoundAndVibration() {
/* key click sound & vibration */
if (mVibrator != null) {
- try { mVibrator.vibrate(30); } catch (Exception ex) { }
+ try { mVibrator.vibrate(5); } catch (Exception ex) { }
}
if (mSound != null) {
try { mSound.seekTo(0); mSound.start(); } catch (Exception ex) { }
}
}
-
- /** @see android.inputmethodservice.KeyboardView.OnKeyboardActionListener#onText */
+
+ /** @see jp.co.omronsoft.openwnn.KeyboardView.OnKeyboardActionListener#onText */
public void onText(CharSequence text) {}
/**
@@ -757,6 +865,15 @@
}
/**
+ * Set the H/W keyboard's type.
+ *
+ * @param type12Key {@code true} if 12Key.
+ */
+ public void setHardware12Keyboard(boolean type12Key) {
+ mEnableHardware12Keyboard = type12Key;
+ }
+
+ /**
* Get current keyboard view.
*/
public View getKeyboardView() {
@@ -772,4 +889,25 @@
mCurrentKeyboard = null;
changeKeyboard(keyboard);
}
+
+ /**
+ * Set the normal keyboard.
+ */
+ public void setNormalKeyboard() {
+ if (mCurrentKeyboard == null) {
+ return;
+ }
+ mKeyboardView.setKeyboard(mCurrentKeyboard);
+ mKeyboardView.setOnKeyboardActionListener(this);
+ mIsSymbolKeyboard = false;
+ }
+
+ /**
+ * Set the symbol keyboard.
+ */
+ public void setSymbolKeyboard() {
+ mKeyboardView.setKeyboard(mSymbolKeyboard);
+ mKeyboardView.setOnKeyboardActionListener(mSymbolOnKeyboardAction);
+ mIsSymbolKeyboard = true;
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/EN/ClearUserDictionaryDialogPreferenceEN.java b/src/jp/co/omronsoft/openwnn/EN/ClearUserDictionaryDialogPreferenceEN.java
index 10fb86c..aef2c1c 100644
--- a/src/jp/co/omronsoft/openwnn/EN/ClearUserDictionaryDialogPreferenceEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/ClearUserDictionaryDialogPreferenceEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java b/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
index 4cdcc9a..33df09f 100644
--- a/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,12 +18,13 @@
import jp.co.omronsoft.openwnn.*;
import android.content.SharedPreferences;
-import android.inputmethodservice.Keyboard;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
+import jp.co.omronsoft.openwnn.Keyboard;
+
import android.util.Log;
/**
diff --git a/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java b/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
index 4a71690..7efeb7d 100644
--- a/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java b/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
index cb2f1d8..61dc1b0 100644
--- a/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsEditEN.java b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsEditEN.java
index d052f7f..8e3a6d3 100644
--- a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsEditEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsEditEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
index 483b25a..f032d64 100644
--- a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package jp.co.omronsoft.openwnn.EN;
import jp.co.omronsoft.openwnn.*;
+import android.os.Bundle;
import android.view.View;
import android.view.Window;
import java.util.Comparator;
@@ -31,18 +32,18 @@
* Constructor
*/
public UserDictionaryToolsListEN() {
- if (OpenWnnEN.getInstance() == null) {
- new OpenWnnEN(this);
- }
+ if (OpenWnnEN.getInstance() == null) {
+ new OpenWnnEN(this);
+ }
mListViewName = "jp.co.omronsoft.openwnn.EN.UserDictionaryToolsListEN";
mEditViewName = "jp.co.omronsoft.openwnn.EN.UserDictionaryToolsEditEN";
mPackageName = "jp.co.omronsoft.openwnn";
}
- /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#headerCreate */
- @Override protected void headerCreate() {
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
- R.layout.user_dictionary_tools_list_header);
+ /** @see jp.co.omronsoft.iwnnime.ml.UserDictionaryToolsList#onCreate */
+ @Override protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle(R.string.user_dictionary_list_words_en);
}
/** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#createUserDictionaryToolsEdit */
diff --git a/src/jp/co/omronsoft/openwnn/InputViewManager.java b/src/jp/co/omronsoft/openwnn/InputViewManager.java
index f6e15ec..235721a 100644
--- a/src/jp/co/omronsoft/openwnn/InputViewManager.java
+++ b/src/jp/co/omronsoft/openwnn/InputViewManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
/**
* The interface of input view manager used by OpenWnn.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public interface InputViewManager {
/**
@@ -63,4 +63,15 @@
* Close the input view.
*/
public void closing();
+
+ /**
+ * Show the input view.
+ */
+ public void showInputView();
+
+ /**
+ * Hide the input view.
+ */
+ public void hideInputView();
+
}
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/ClearLearnDictionaryDialogPreferenceJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/ClearLearnDictionaryDialogPreferenceJAJP.java
index ff6c27e..7df0a4d 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/ClearLearnDictionaryDialogPreferenceJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/ClearLearnDictionaryDialogPreferenceJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/ClearUserDictionaryDialogPreferenceJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/ClearUserDictionaryDialogPreferenceJAJP.java
index 6e132d2..70aa469 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/ClearUserDictionaryDialogPreferenceJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/ClearUserDictionaryDialogPreferenceJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
index 8079d2f..e3e6cc4 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,14 +16,21 @@
package jp.co.omronsoft.openwnn.JAJP;
+import android.app.AlertDialog;
import jp.co.omronsoft.openwnn.*;
+import android.content.DialogInterface;
+import android.content.res.Resources;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
-import android.inputmethodservice.Keyboard;
import android.util.Log;
import android.view.View;
import android.content.SharedPreferences;
+
+import jp.co.omronsoft.openwnn.Keyboard;
+import jp.co.omronsoft.openwnn.BaseInputView;
+import jp.co.omronsoft.openwnn.R;
+
import java.util.HashMap;
import java.util.Locale;
import java.util.List;
@@ -308,7 +315,11 @@
/** Default constructor */
public DefaultSoftKeyboardJAJP() {
mCurrentLanguage = LANG_JA;
- mCurrentKeyboardType = KEYBOARD_12KEY;
+ if (OpenWnn.isXLarge()) {
+ mCurrentKeyboardType = KEYBOARD_QWERTY;
+ } else {
+ mCurrentKeyboardType = KEYBOARD_12KEY;
+ }
mShiftOn = KEYBOARD_SHIFT_OFF;
mCurrentKeyMode = KEYMODE_JA_FULL_HIRAGANA;
}
@@ -334,6 +345,9 @@
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
}
+ } else if (mEnableHardware12Keyboard) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
} else {
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
@@ -511,7 +525,7 @@
break;
case KEYCODE_JP12_REVERSE:
- if (!mNoInput) {
+ if (!mNoInput && !mEnableHardware12Keyboard) {
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.TOGGLE_REVERSE_CHAR, mCurrentCycleTable));
}
break;
@@ -684,7 +698,13 @@
/** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */
@Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
mPrefEditor = pref.edit();
- boolean isQwerty = pref.getBoolean("opt_enable_qwerty", false);
+ boolean isQwerty;
+ if (OpenWnn.isXLarge()) {
+ isQwerty = pref.getBoolean("opt_enable_qwerty", true);
+ } else {
+ isQwerty = pref.getBoolean("opt_enable_qwerty", false);
+ }
+
if (isQwerty && (mCurrentKeyboardType == KEYBOARD_12KEY)) {
changeKeyboardType(KEYBOARD_QWERTY);
}
@@ -729,6 +749,8 @@
case EditorInfo.TYPE_CLASS_PHONE:
if (mHardKeyboardHidden) {
mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_PHONE};
+ } else if (mEnableHardware12Keyboard) {
+ mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_NUMBER};
} else {
mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET};
}
@@ -836,65 +858,83 @@
*/
private void createKeyboardsPortrait(OpenWnn parent) {
Keyboard[][] keyList;
- /* qwerty shift_off (portrait) */
- keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
- keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+ if (OpenWnn.isXLarge()) {
+ /* qwerty shift_off (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
- /* qwerty shift_on (portrait) */
- keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
- keyList[KEYMODE_JA_HALF_PHONE][0] =
- mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
+ /* qwerty shift_on (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
+ keyList[KEYMODE_JA_HALF_PHONE][0] =
+ mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
+ } else {
+ /* qwerty shift_off (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+
+ /* qwerty shift_on (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
+ keyList[KEYMODE_JA_HALF_PHONE][0] =
+ mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
- /* 12-keys shift_off (portrait) */
- keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
- keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
- keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
- keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
- keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
- keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
- keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+ /* 12-keys shift_off (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
+ keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
+ keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
+ keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
+ keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
+ keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
- /* 12-keys shift_on (portrait) */
- keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
- keyList[KEYMODE_JA_FULL_HIRAGANA]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
- keyList[KEYMODE_JA_FULL_ALPHABET]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
- keyList[KEYMODE_JA_FULL_NUMBER]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
- keyList[KEYMODE_JA_FULL_KATAKANA]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
- keyList[KEYMODE_JA_HALF_ALPHABET]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
- keyList[KEYMODE_JA_HALF_NUMBER]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
- keyList[KEYMODE_JA_HALF_KATAKANA]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
- keyList[KEYMODE_JA_HALF_PHONE]
- = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
-
+ /* 12-keys shift_on (portrait) */
+ keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
+ keyList[KEYMODE_JA_FULL_ALPHABET]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
+ keyList[KEYMODE_JA_FULL_NUMBER]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
+ keyList[KEYMODE_JA_FULL_KATAKANA]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
+ keyList[KEYMODE_JA_HALF_ALPHABET]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
+ keyList[KEYMODE_JA_HALF_NUMBER]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
+ keyList[KEYMODE_JA_HALF_KATAKANA]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
+ keyList[KEYMODE_JA_HALF_PHONE]
+ = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
+ }
}
/**
@@ -903,71 +943,84 @@
* @param parent The context
*/
private void createKeyboardsLandscape(OpenWnn parent) {
- /*
Keyboard[][] keyList;
- */
- /* qwerty shift_off (landscape) */
- /*
- keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_landscape);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_landscape);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_landscape);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_landscape);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_landscape);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_landscape);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_landscape);
- keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone_landscape);
- */
- /* qwerty shift_on (landscape) */
- /*
- keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift_landscape);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift_landscape);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift_landscape);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift_landscape);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift_landscape);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift_landscape);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift_landscape);
- keyList[KEYMODE_JA_HALF_PHONE][0] =
- mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
- */
- /* 12-keys shift_off (landscape) */
- /*
- keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
- keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp_landscape);
- keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input_landscape);
- keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_landscape);
- keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input_landscape);
- keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num_landscape);
- keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_landscape);
- keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input_landscape);
- keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_landscape);
- keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input_landscape);
- keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num_landscape);
- keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_landscape);
- keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input_landscape);
- keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone_landscape);
- */
- /* 12-keys shift_on (landscape) */
- /*
- keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
- keyList[KEYMODE_JA_FULL_HIRAGANA]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
- keyList[KEYMODE_JA_FULL_ALPHABET]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
- keyList[KEYMODE_JA_FULL_NUMBER]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
- keyList[KEYMODE_JA_FULL_KATAKANA]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
- keyList[KEYMODE_JA_HALF_ALPHABET]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
- keyList[KEYMODE_JA_HALF_NUMBER]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
- keyList[KEYMODE_JA_HALF_KATAKANA]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
- keyList[KEYMODE_JA_HALF_PHONE]
- = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
- */
+ if (OpenWnn.isXLarge()) {
+ /* qwerty shift_off (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+
+ /* qwerty shift_on (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
+ keyList[KEYMODE_JA_HALF_PHONE][0] =
+ mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
+ } else {
+ /* qwerty shift_off (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+
+ /* qwerty shift_on (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
+ keyList[KEYMODE_JA_HALF_PHONE][0] =
+ mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
+
+
+ /* 12-keys shift_off (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
+ keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
+ keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
+ keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
+ keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
+ keyList[KEYMODE_JA_FULL_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_full_num);
+ keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
+ keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
+ keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
+ keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
+ keyList[KEYMODE_JA_HALF_NUMBER][0] = new Keyboard(parent, R.xml.keyboard_12key_half_num);
+ keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
+ keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
+ keyList[KEYMODE_JA_HALF_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
+
+ /* 12-keys shift_on (landscape) */
+ keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
+ keyList[KEYMODE_JA_FULL_HIRAGANA]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
+ keyList[KEYMODE_JA_FULL_ALPHABET]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_ALPHABET];
+ keyList[KEYMODE_JA_FULL_NUMBER]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_NUMBER];
+ keyList[KEYMODE_JA_FULL_KATAKANA]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA];
+ keyList[KEYMODE_JA_HALF_ALPHABET]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET];;
+ keyList[KEYMODE_JA_HALF_NUMBER]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_NUMBER];
+ keyList[KEYMODE_JA_HALF_KATAKANA]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
+ keyList[KEYMODE_JA_HALF_PHONE]
+ = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
+ }
}
/**
@@ -1140,13 +1193,19 @@
@Override public void setHardKeyboardHidden(boolean hidden) {
if (mWnn != null) {
if (!hidden) {
- mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
- OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+ if (mEnableHardware12Keyboard) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
+ } else {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+ }
}
if (mHardKeyboardHidden != hidden) {
if ((mLimitedKeyMode != null)
- || ((mCurrentKeyMode != KEYMODE_JA_FULL_HIRAGANA)
+ || (!mEnableHardware12Keyboard
+ && (mCurrentKeyMode != KEYMODE_JA_FULL_HIRAGANA)
&& (mCurrentKeyMode != KEYMODE_JA_HALF_ALPHABET))) {
mLastInputType = EditorInfo.TYPE_NULL;
@@ -1159,6 +1218,22 @@
super.setHardKeyboardHidden(hidden);
}
+ /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setHardware12Keyboard */
+ @Override public void setHardware12Keyboard(boolean type12Key) {
+ if (mWnn != null) {
+ if (mEnableHardware12Keyboard != type12Key) {
+ if (type12Key) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_12KEY));
+ } else {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+ }
+ }
+ }
+ super.setHardware12Keyboard(type12Key);
+ }
+
/**
* Change the key-mode to the allowed one which is restricted
* by the text input field or the type of the keyboard.
@@ -1170,7 +1245,7 @@
int[] limits = mLimitedKeyMode;
if (!mHardKeyboardHidden) { /* for hardware keyboard */
- if ((targetMode != KEYMODE_JA_FULL_HIRAGANA)
+ if (!mEnableHardware12Keyboard && (targetMode != KEYMODE_JA_FULL_HIRAGANA)
&& (targetMode != KEYMODE_JA_HALF_ALPHABET)) {
Locale locale = Locale.getDefault();
@@ -1219,4 +1294,98 @@
return targetMode;
}
+
+ /**
+ * Shows input mode choosing dialog.
+ *
+ * @return boolean
+ */
+ public boolean showInputModeSwitchDialog() {
+ BaseInputView baseInputView = (BaseInputView)getCurrentView();
+ AlertDialog.Builder builder = new AlertDialog.Builder(baseInputView.getContext());
+ builder.setCancelable(true);
+ builder.setNegativeButton(R.string.dialog_button_cancel, null);
+
+ Resources r = baseInputView.getResources();
+ CharSequence itemFullHirakana = r.getString(R.string.ti_input_mode_full_hirakana_title_txt);
+ CharSequence itemFullKatakana = r.getString(R.string.ti_input_mode_full_katakana_title_txt);
+ CharSequence itemHalfKatakana = r.getString(R.string.ti_input_mode_half_katakana_title_txt);
+ CharSequence itemFullAlphabet = r.getString(R.string.ti_input_mode_full_alphabet_title_txt);
+ CharSequence itemHalfAlphabet = r.getString(R.string.ti_input_mode_half_alphabet_title_txt);
+ CharSequence itemFullNumber = r.getString(R.string.ti_input_mode_full_number_title_txt);
+ CharSequence itemHalfNumber = r.getString(R.string.ti_input_mode_half_number_title_txt);
+ final CharSequence[] itemTitles;
+ final int[] itemValues;
+ if (OpenWnn.isXLarge()) {
+ itemTitles = new CharSequence[] {itemFullHirakana, itemHalfAlphabet,
+ itemFullNumber, itemHalfNumber};
+ itemValues = new int[] {KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_HALF_ALPHABET,
+ KEYMODE_JA_FULL_NUMBER, KEYMODE_JA_HALF_NUMBER};
+ } else {
+ itemTitles = new CharSequence[] {itemFullHirakana, itemFullKatakana, itemHalfKatakana,
+ itemFullAlphabet, itemHalfAlphabet, itemFullNumber,
+ itemHalfNumber};
+ itemValues = new int[] {KEYMODE_JA_FULL_HIRAGANA, KEYMODE_JA_FULL_KATAKANA, KEYMODE_JA_HALF_KATAKANA,
+ KEYMODE_JA_FULL_ALPHABET, KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_FULL_NUMBER, KEYMODE_JA_HALF_NUMBER};
+ }
+
+ builder.setSingleChoiceItems(itemTitles, findIndexOfValue(itemValues,
+ mCurrentKeyMode), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface inputModeSwitchDialog, int position) {
+ switch(position){
+ case 0:
+ changeKeyMode(itemValues[0]);
+ break;
+
+ case 1:
+ changeKeyMode(itemValues[1]);
+ break;
+
+ case 2:
+ changeKeyMode(itemValues[2]);
+ break;
+
+ case 3:
+ changeKeyMode(itemValues[3]);
+ break;
+
+ case 4:
+ changeKeyMode(itemValues[4]);
+ break;
+
+ case 5:
+ changeKeyMode(itemValues[5]);
+ break;
+
+ case 6:
+ changeKeyMode(itemValues[6]);
+ break;
+
+ default:
+ break;
+ }
+ inputModeSwitchDialog.dismiss();
+ }
+ });
+
+ builder.setTitle(r.getString(R.string.ti_long_press_dialog_input_mode_txt));
+ baseInputView.showDialog(builder);
+ return true;
+ }
+
+ /**
+ * Finds the index of a value in a int[].
+ *
+ * @param value the int[] to search in,
+ * @param mode the value need to find index,
+ * @return the index of the value.
+ */
+ private int findIndexOfValue(int[] value, int mode) {
+ for (int i = 0; i < value.length; i++) {
+ if (value[i] == mode) {
+ return i;
+ }
+ }
+ return -1;
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java b/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
index 05d1199..a6378bb 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/KeyboardListPreferenceJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/KeyboardListPreferenceJAJP.java
index 2c60599..3c93e0a 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/KeyboardListPreferenceJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/KeyboardListPreferenceJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
index 7114e52..fb0145f 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -539,4 +539,4 @@
private WnnClause defaultClause(String input) {
return (new WnnClause(input, input, mPosDefault, (CLAUSE_COST - 1) * input.length()));
}
-}
+}
\ No newline at end of file
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnEngineJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnEngineJAJP.java
index 1181202..900a4ea 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnEngineJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnEngineJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,7 +38,7 @@
/**
* The OpenWnn engine class for Japanese IME.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class OpenWnnEngineJAJP implements WnnEngine {
/** Current dictionary type */
@@ -78,7 +78,10 @@
public static final int MAX_OUTPUT_LENGTH = 50;
/** Limitation of predicted candidates */
public static final int PREDICT_LIMIT = 100;
-
+
+ /** Limitation of candidates one-line */
+ public static final int LIMIT_OF_CANDIDATES_1LINE = 500;
+
/** OpenWnn dictionary */
private WnnDictionary mDictionaryJP;
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/Romkan.java b/src/jp/co/omronsoft/openwnn/JAJP/Romkan.java
index 797b81e..398b589 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/Romkan.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/Romkan.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java b/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
index 37fd6ed..d070686 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/RomkanHalfKatakana.java b/src/jp/co/omronsoft/openwnn/JAJP/RomkanHalfKatakana.java
index b119fe8..867caf2 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/RomkanHalfKatakana.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/RomkanHalfKatakana.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
index edf5ddd..d94f019 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsEditJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsEditJAJP.java
index 8966038..45d81cd 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsEditJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsEditJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
index 87d1e4d..a5c1c63 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package jp.co.omronsoft.openwnn.JAJP;
import jp.co.omronsoft.openwnn.*;
+import android.os.Bundle;
import android.view.View;
import android.view.Window;
import java.util.Comparator;
@@ -36,10 +37,10 @@
mPackageName = "jp.co.omronsoft.openwnn";
}
- /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#headerCreate */
- @Override protected void headerCreate() {
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
- R.layout.user_dictionary_tools_list_header_ja);
+ /** @see jp.co.omronsoft.iwnnime.ml.UserDictionaryToolsList#onCreate */
+ @Override protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle(R.string.user_dictionary_list_words_ja);
}
/** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#createUserDictionaryToolsEdit */
diff --git a/src/jp/co/omronsoft/openwnn/KeyAction.java b/src/jp/co/omronsoft/openwnn/KeyAction.java
new file mode 100644
index 0000000..b956670
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/KeyAction.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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 jp.co.omronsoft.openwnn;
+
+public class KeyAction {
+ /** KeyDownAction*/
+ boolean mConsumeDownEvent;
+ /** KeyCode*/
+ int mKeyCode;
+}
diff --git a/src/jp/co/omronsoft/openwnn/Keyboard.java b/src/jp/co/omronsoft/openwnn/Keyboard.java
new file mode 100644
index 0000000..1f5f648
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/Keyboard.java
@@ -0,0 +1,861 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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.
+ */
+/*
+ * This file is porting from Android framework.
+ * frameworks/base/core/java/android/inputmethodservice/Keyboard.java
+ *
+ * package android.inputmethodservice;
+ */
+package jp.co.omronsoft.openwnn;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.TypedValue;
+import android.util.Xml;
+import android.util.DisplayMetrics;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Loads an XML description of a keyboard and stores the attributes of the keys. A keyboard
+ * consists of rows of keys.
+ * <p>The layout file for a keyboard contains XML that looks like the following snippet:</p>
+ * <pre>
+ * <Keyboard
+ * android:keyWidth="%10p"
+ * android:keyHeight="50px"
+ * android:horizontalGap="2px"
+ * android:verticalGap="2px" >
+ * <Row android:keyWidth="32px" >
+ * <Key android:keyLabel="A" />
+ * ...
+ * </Row>
+ * ...
+ * </Keyboard>
+ * </pre>
+ */
+public class Keyboard {
+
+ static final String TAG = "Keyboard";
+
+ private static final String TAG_KEYBOARD = "Keyboard";
+ private static final String TAG_ROW = "Row";
+ private static final String TAG_KEY = "Key";
+
+ /** Edge of left */
+ public static final int EDGE_LEFT = 0x01;
+
+ /** Edge of right */
+ public static final int EDGE_RIGHT = 0x02;
+
+ /** Edge of top */
+ public static final int EDGE_TOP = 0x04;
+
+ /** Edge of bottom */
+ public static final int EDGE_BOTTOM = 0x08;
+
+ /** Keycode of SHIFT */
+ public static final int KEYCODE_SHIFT = -1;
+
+ /** Keycode of MODE_CHANGE */
+ public static final int KEYCODE_MODE_CHANGE = -2;
+
+ /** Keycode of CANCEL */
+ public static final int KEYCODE_CANCEL = -3;
+
+ /** Keycode of DONE */
+ public static final int KEYCODE_DONE = -4;
+
+ /** Keycode of DELETE */
+ public static final int KEYCODE_DELETE = -5;
+
+ /** Keycode of ALT */
+ public static final int KEYCODE_ALT = -6;
+
+ /** Keyboard label **/
+ private CharSequence mLabel;
+
+ /** Horizontal gap default for all rows */
+ private int mDefaultHorizontalGap;
+
+ /** Default key width */
+ private int mDefaultWidth;
+
+ /** Default key height */
+ private int mDefaultHeight;
+
+ /** Default gap between rows */
+ private int mDefaultVerticalGap;
+
+ /** Is the keyboard in the shifted state */
+ private boolean mShifted;
+
+ /** Key instance for the shift key, if present */
+ private Key mShiftKey;
+
+ /** Key index for the shift key, if present */
+ private int mShiftKeyIndex = -1;
+
+ /** Current key width, while loading the keyboard */
+ private int mKeyWidth;
+
+ /** Current key height, while loading the keyboard */
+ private int mKeyHeight;
+
+ /** Total height of the keyboard, including the padding and keys */
+ private int mTotalHeight;
+
+ /**
+ * Total width of the keyboard, including left side gaps and keys, but not any gaps on the
+ * right side.
+ */
+ private int mTotalWidth;
+
+ /** List of keys in this keyboard */
+ private List<Key> mKeys;
+
+ /** List of modifier keys such as Shift & Alt, if any */
+ private List<Key> mModifierKeys;
+
+ /** Width of the screen available to fit the keyboard */
+ private int mDisplayWidth;
+
+ /** Height of the screen */
+ private int mDisplayHeight;
+
+ /** Keyboard mode, or zero, if none. */
+ private int mKeyboardMode;
+
+
+ private static final int GRID_WIDTH = 10;
+ private static final int GRID_HEIGHT = 5;
+ private static final int GRID_SIZE = GRID_WIDTH * GRID_HEIGHT;
+ private int mCellWidth;
+ private int mCellHeight;
+ private int[][] mGridNeighbors;
+ private int mProximityThreshold;
+ /** Number of key widths from current touch point to search for nearest keys. */
+ private static float SEARCH_DISTANCE = 1.8f;
+
+ /**
+ * Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
+ * Some of the key size defaults can be overridden per row from what the {@link Keyboard}
+ * defines.
+ */
+ public static class Row {
+ /** Default width of a key in this row. */
+ public int defaultWidth;
+ /** Default height of a key in this row. */
+ public int defaultHeight;
+ /** Default horizontal gap between keys in this row. */
+ public int defaultHorizontalGap;
+ /** Vertical gap following this row. */
+ public int verticalGap;
+ /**
+ * Edge flags for this row of keys. Possible values that can be assigned are
+ * {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM}
+ */
+ public int rowEdgeFlags;
+
+ /** The keyboard mode for this row */
+ public int mode;
+
+ private Keyboard parent;
+
+ /** Constructor */
+ public Row(Keyboard parent) {
+ this.parent = parent;
+ }
+
+ /** Constructor */
+ public Row(Resources res, Keyboard parent, XmlResourceParser parser) {
+ this.parent = parent;
+ TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ android.R.styleable.Keyboard);
+ defaultWidth = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyWidth,
+ parent.mDisplayWidth, parent.mDefaultWidth);
+ defaultHeight = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyHeight,
+ parent.mDisplayHeight, parent.mDefaultHeight);
+ defaultHorizontalGap = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_horizontalGap,
+ parent.mDisplayWidth, parent.mDefaultHorizontalGap);
+ verticalGap = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_verticalGap,
+ parent.mDisplayHeight, parent.mDefaultVerticalGap);
+ a.recycle();
+ a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ android.R.styleable.Keyboard_Row);
+ rowEdgeFlags = a.getInt(android.R.styleable.Keyboard_Row_rowEdgeFlags, 0);
+ mode = a.getResourceId(android.R.styleable.Keyboard_Row_keyboardMode,
+ 0);
+ }
+ }
+
+ /**
+ * Class for describing the position and characteristics of a single key in the keyboard.
+ */
+ public static class Key {
+ /**
+ * All the key codes (unicode or custom code) that this key could generate, zero'th
+ * being the most important.
+ */
+ public int[] codes;
+
+ /** Label to display */
+ public CharSequence label;
+
+ /** Icon to display instead of a label. Icon takes precedence over a label */
+ public Drawable icon;
+ /** Preview version of the icon, for the preview popup */
+ public Drawable iconPreview;
+ /** Width of the key, not including the gap */
+ public int width;
+ /** Height of the key, not including the gap */
+ public int height;
+ /** The horizontal gap before this key */
+ public int gap;
+ /** Whether this key is sticky, i.e., a toggle key */
+ public boolean sticky;
+ /** X coordinate of the key in the keyboard layout */
+ public int x;
+ /** Y coordinate of the key in the keyboard layout */
+ public int y;
+ /** The current pressed state of this key */
+ public boolean pressed;
+ /** If this is a sticky key, is it on? */
+ public boolean on;
+ /** Text to output when pressed. This can be multiple characters, like ".com" */
+ public CharSequence text;
+ /** Popup characters */
+ public CharSequence popupCharacters;
+
+ /**
+ * Flags that specify the anchoring to edges of the keyboard for detecting touch events
+ * that are just out of the boundary of the key. This is a bit mask of
+ * {@link Keyboard#EDGE_LEFT}, {@link Keyboard#EDGE_RIGHT}, {@link Keyboard#EDGE_TOP} and
+ * {@link Keyboard#EDGE_BOTTOM}.
+ */
+ public int edgeFlags;
+ /** Whether this is a modifier key, such as Shift or Alt */
+ public boolean modifier;
+ /** The keyboard that this key belongs to */
+ private Keyboard keyboard;
+ /**
+ * If this key pops up a mini keyboard, this is the resource id for the XML layout for that
+ * keyboard.
+ */
+ public int popupResId;
+ /** Whether this key repeats itself when held down */
+ public boolean repeatable;
+ /** Whether this key is 2nd key */
+ public boolean isSecondKey;
+
+ private final static int[] KEY_STATE_NORMAL_ON = {
+ android.R.attr.state_checkable,
+ android.R.attr.state_checked
+ };
+
+ private final static int[] KEY_STATE_PRESSED_ON = {
+ android.R.attr.state_pressed,
+ android.R.attr.state_checkable,
+ android.R.attr.state_checked
+ };
+
+ private final static int[] KEY_STATE_NORMAL_OFF = {
+ android.R.attr.state_checkable
+ };
+
+ private final static int[] KEY_STATE_PRESSED_OFF = {
+ android.R.attr.state_pressed,
+ android.R.attr.state_checkable
+ };
+
+ private final static int[] KEY_STATE_NORMAL = {
+ };
+
+ private final static int[] KEY_STATE_PRESSED = {
+ android.R.attr.state_pressed
+ };
+
+ /** Create an empty key with no attributes. */
+ public Key(Row parent) {
+ keyboard = parent.parent;
+ height = parent.defaultHeight;
+ width = parent.defaultWidth;
+ gap = parent.defaultHorizontalGap;
+ edgeFlags = parent.rowEdgeFlags;
+ }
+
+ /** Create a key with the given top-left coordinate and extract its attributes from
+ * the XML parser.
+ * @param res resources associated with the caller's context
+ * @param parent the row that this key belongs to. The row must already be attached to
+ * a {@link Keyboard}.
+ * @param x the x coordinate of the top-left
+ * @param y the y coordinate of the top-left
+ * @param parser the XML parser containing the attributes for this key
+ */
+ public Key(Resources res, Row parent, int x, int y, XmlResourceParser parser) {
+ this(parent);
+
+ this.x = x;
+ this.y = y;
+
+ TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ android.R.styleable.Keyboard);
+
+ width = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyWidth,
+ keyboard.mDisplayWidth, parent.defaultWidth);
+ height = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyHeight,
+ keyboard.mDisplayHeight, parent.defaultHeight);
+ gap = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_horizontalGap,
+ keyboard.mDisplayWidth, parent.defaultHorizontalGap);
+ a.recycle();
+ a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ android.R.styleable.Keyboard_Key);
+ this.x += gap;
+ TypedValue codesValue = new TypedValue();
+ a.getValue(android.R.styleable.Keyboard_Key_codes,
+ codesValue);
+ if (codesValue.type == TypedValue.TYPE_INT_DEC
+ || codesValue.type == TypedValue.TYPE_INT_HEX) {
+ codes = new int[] { codesValue.data };
+ } else if (codesValue.type == TypedValue.TYPE_STRING) {
+ codes = parseCSV(codesValue.string.toString());
+ }
+
+ iconPreview = a.getDrawable(android.R.styleable.Keyboard_Key_iconPreview);
+ if (iconPreview != null) {
+ iconPreview.setBounds(0, 0, iconPreview.getIntrinsicWidth(),
+ iconPreview.getIntrinsicHeight());
+ }
+ popupCharacters = a.getText(
+ android.R.styleable.Keyboard_Key_popupCharacters);
+ popupResId = a.getResourceId(
+ android.R.styleable.Keyboard_Key_popupKeyboard, 0);
+ repeatable = a.getBoolean(
+ android.R.styleable.Keyboard_Key_isRepeatable, false);
+ modifier = a.getBoolean(
+ android.R.styleable.Keyboard_Key_isModifier, false);
+ sticky = a.getBoolean(
+ android.R.styleable.Keyboard_Key_isSticky, false);
+ edgeFlags = a.getInt(android.R.styleable.Keyboard_Key_keyEdgeFlags, 0);
+ edgeFlags |= parent.rowEdgeFlags;
+
+ icon = a.getDrawable(
+ android.R.styleable.Keyboard_Key_keyIcon);
+ if (icon != null) {
+ icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
+ }
+ label = a.getText(android.R.styleable.Keyboard_Key_keyLabel);
+ text = a.getText(android.R.styleable.Keyboard_Key_keyOutputText);
+
+ if (codes == null && !TextUtils.isEmpty(label)) {
+ codes = new int[] { label.charAt(0) };
+ }
+ a.recycle();
+ a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.WnnKeyboard_Key);
+ isSecondKey = a.getBoolean(R.styleable.WnnKeyboard_Key_isSecondKey, false);
+ a.recycle();
+ }
+
+ /**
+ * Informs the key that it has been pressed, in case it needs to change its appearance or
+ * state.
+ * @see #onReleased(boolean)
+ */
+ public void onPressed() {
+ pressed = !pressed;
+ }
+
+ /**
+ * Changes the pressed state of the key. If it is a sticky key, it will also change the
+ * toggled state of the key if the finger was release inside.
+ * @param inside whether the finger was released inside the key
+ * @see #onPressed()
+ */
+ public void onReleased(boolean inside) {
+ pressed = !pressed;
+ if (sticky) {
+ on = !on;
+ }
+ }
+
+ int[] parseCSV(String value) {
+ int count = 0;
+ int lastIndex = 0;
+ if (value.length() > 0) {
+ count++;
+ while ((lastIndex = value.indexOf(",", lastIndex + 1)) > 0) {
+ count++;
+ }
+ }
+ int[] values = new int[count];
+ count = 0;
+ StringTokenizer st = new StringTokenizer(value, ",");
+ while (st.hasMoreTokens()) {
+ try {
+ values[count++] = Integer.parseInt(st.nextToken());
+ } catch (NumberFormatException nfe) {
+ Log.e(TAG, "Error parsing keycodes " + value);
+ }
+ }
+ return values;
+ }
+
+ /**
+ * Detects if a point falls inside this key.
+ * @param x the x-coordinate of the point
+ * @param y the y-coordinate of the point
+ * @return whether or not the point falls inside the key. If the key is attached to an edge,
+ * it will assume that all points between the key and the edge are considered to be inside
+ * the key.
+ */
+ public boolean isInside(int x, int y) {
+ boolean leftEdge = (edgeFlags & EDGE_LEFT) > 0;
+ boolean rightEdge = (edgeFlags & EDGE_RIGHT) > 0;
+ boolean topEdge = (edgeFlags & EDGE_TOP) > 0;
+ boolean bottomEdge = (edgeFlags & EDGE_BOTTOM) > 0;
+ if ((x >= this.x || (leftEdge && x <= this.x + this.width))
+ && (x < this.x + this.width || (rightEdge && x >= this.x))
+ && (y >= this.y || (topEdge && y <= this.y + this.height))
+ && (y < this.y + this.height || (bottomEdge && y >= this.y))) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Detects if a area falls inside this key.
+ * @param x the x-coordinate of the area
+ * @param y the y-coordinate of the area
+ * @param w the width of the area
+ * @param h the height of the area
+ * @return whether or not the area falls inside the key.
+ */
+ public boolean isInside(int x, int y, int w, int h) {
+ if ((this.x <= (x + w)) && (x <= (this.x + this.width))
+ && (this.y <= (y + h)) && (y <= (this.y + this.height))) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Returns the square of the distance between the center of the key and the given point.
+ * @param x the x-coordinate of the point
+ * @param y the y-coordinate of the point
+ * @return the square of the distance of the point from the center of the key
+ */
+ public int squaredDistanceFrom(int x, int y) {
+ int xDist = this.x + width / 2 - x;
+ int yDist = this.y + height / 2 - y;
+ return xDist * xDist + yDist * yDist;
+ }
+
+ /**
+ * Returns the drawable state for the key, based on the current state and type of the key.
+ * @return the drawable state of the key.
+ * @see android.graphics.drawable.StateListDrawable#setState(int[])
+ */
+ public int[] getCurrentDrawableState() {
+ int[] states = KEY_STATE_NORMAL;
+
+ if (on) {
+ if (pressed) {
+ states = KEY_STATE_PRESSED_ON;
+ } else {
+ states = KEY_STATE_NORMAL_ON;
+ }
+ } else {
+ if (sticky) {
+ if (pressed) {
+ states = KEY_STATE_PRESSED_OFF;
+ } else {
+ states = KEY_STATE_NORMAL_OFF;
+ }
+ } else {
+ if (pressed) {
+ states = KEY_STATE_PRESSED;
+ }
+ }
+ }
+ return states;
+ }
+ }
+
+ /**
+ * Creates a keyboard from the given xml key layout file.
+ * @param context the application or service context
+ * @param xmlLayoutResId the resource file that contains the keyboard layout and keys.
+ */
+ public Keyboard(Context context, int xmlLayoutResId) {
+ this(context, xmlLayoutResId, 0);
+ }
+
+ /**
+ * Creates a keyboard from the given xml key layout file. Weeds out rows
+ * that have a keyboard mode defined but don't match the specified mode.
+ * @param context the application or service context
+ * @param xmlLayoutResId the resource file that contains the keyboard layout and keys.
+ * @param modeId keyboard mode identifier
+ */
+ public Keyboard(Context context, int xmlLayoutResId, int modeId) {
+ DisplayMetrics dm = context.getResources().getDisplayMetrics();
+ mDisplayWidth = dm.widthPixels;
+ mDisplayHeight = dm.heightPixels;
+
+ mDefaultHorizontalGap = 0;
+ mDefaultWidth = mDisplayWidth / 10;
+ mDefaultVerticalGap = 0;
+ mDefaultHeight = mDefaultWidth;
+ mKeys = new ArrayList<Key>();
+ mModifierKeys = new ArrayList<Key>();
+ mKeyboardMode = modeId;
+ loadKeyboard(context, context.getResources().getXml(xmlLayoutResId));
+ }
+
+ /**
+ * <p>Creates a blank keyboard from the given resource file and populates it with the specified
+ * characters in left-to-right, top-to-bottom fashion, using the specified number of columns.
+ * </p>
+ * <p>If the specified number of columns is -1, then the keyboard will fit as many keys as
+ * possible in each row.</p>
+ * @param context the application or service context
+ * @param layoutTemplateResId the layout template file, containing no keys.
+ * @param characters the list of characters to display on the keyboard. One key will be created
+ * for each character.
+ * @param columns the number of columns of keys to display. If this number is greater than the
+ * number of keys that can fit in a row, it will be ignored. If this number is -1, the
+ * keyboard will fit as many keys as possible in each row.
+ */
+ public Keyboard(Context context, int layoutTemplateResId,
+ CharSequence characters, int columns, int horizontalPadding) {
+ this(context, layoutTemplateResId);
+ int x = 0;
+ int y = 0;
+ int column = 0;
+ mTotalWidth = 0;
+
+ Row row = new Row(this);
+ row.defaultHeight = mDefaultHeight;
+ row.defaultWidth = mDefaultWidth;
+ row.defaultHorizontalGap = mDefaultHorizontalGap;
+ row.verticalGap = mDefaultVerticalGap;
+ row.rowEdgeFlags = EDGE_TOP | EDGE_BOTTOM;
+ final int maxColumns = columns == -1 ? Integer.MAX_VALUE : columns;
+ for (int i = 0; i < characters.length(); i++) {
+ char c = characters.charAt(i);
+ if (column >= maxColumns
+ || x + mDefaultWidth + horizontalPadding > mDisplayWidth) {
+ x = 0;
+ y += mDefaultVerticalGap + mDefaultHeight;
+ column = 0;
+ }
+ final Key key = new Key(row);
+ key.x = x;
+ key.y = y;
+ key.label = String.valueOf(c);
+ key.codes = new int[] { c };
+ column++;
+ x += key.width + key.gap;
+ mKeys.add(key);
+ if (x > mTotalWidth) {
+ mTotalWidth = x;
+ }
+ }
+ mTotalHeight = y + mDefaultHeight;
+ }
+
+ /**
+ * Get the list of keys in this keyboard.
+ *
+ * @return The list of keys.
+ */
+ public List<Key> getKeys() {
+ return mKeys;
+ }
+
+ /**
+ * Get the list of modifier keys such as Shift & Alt, if any.
+ *
+ * @return The list of modifier keys.
+ */
+ public List<Key> getModifierKeys() {
+ return mModifierKeys;
+ }
+
+ protected int getHorizontalGap() {
+ return mDefaultHorizontalGap;
+ }
+
+ protected void setHorizontalGap(int gap) {
+ mDefaultHorizontalGap = gap;
+ }
+
+ protected int getVerticalGap() {
+ return mDefaultVerticalGap;
+ }
+
+ protected void setVerticalGap(int gap) {
+ mDefaultVerticalGap = gap;
+ }
+
+ protected int getKeyHeight() {
+ return mDefaultHeight;
+ }
+
+ protected void setKeyHeight(int height) {
+ mDefaultHeight = height;
+ }
+
+ protected int getKeyWidth() {
+ return mDefaultWidth;
+ }
+
+ protected void setKeyWidth(int width) {
+ mDefaultWidth = width;
+ }
+
+ /**
+ * Returns the total height of the keyboard
+ * @return the total height of the keyboard
+ */
+ public int getHeight() {
+ return mTotalHeight;
+ }
+
+ /**
+ * Returns the total minimum width of the keyboard
+ * @return the total minimum width of the keyboard
+ */
+ public int getMinWidth() {
+ return mTotalWidth;
+ }
+
+ /**
+ * Sets the keyboard to be shifted.
+ *
+ * @param shiftState the keyboard shift state.
+ * @return {@code true} if shift state changed.
+ */
+ public boolean setShifted(boolean shiftState) {
+ if (mShiftKey != null) {
+ mShiftKey.on = shiftState;
+ }
+ if (mShifted != shiftState) {
+ mShifted = shiftState;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns whether keyboard is shift state or not.
+ *
+ * @return {@code true} if keyboard is shift state; otherwise, {@code false}.
+ */
+ public boolean isShifted() {
+ return mShifted;
+ }
+
+ /**
+ * Returns the shift key index.
+ *
+ * @return the shift key index.
+ */
+ public int getShiftKeyIndex() {
+ return mShiftKeyIndex;
+ }
+
+ private void computeNearestNeighbors() {
+ mCellWidth = (getMinWidth() + GRID_WIDTH - 1) / GRID_WIDTH;
+ mCellHeight = (getHeight() + GRID_HEIGHT - 1) / GRID_HEIGHT;
+ mGridNeighbors = new int[GRID_SIZE][];
+ int[] indices = new int[mKeys.size()];
+ final int gridWidth = GRID_WIDTH * mCellWidth;
+ final int gridHeight = GRID_HEIGHT * mCellHeight;
+ for (int x = 0; x < gridWidth; x += mCellWidth) {
+ for (int y = 0; y < gridHeight; y += mCellHeight) {
+ int count = 0;
+ for (int i = 0; i < mKeys.size(); i++) {
+ final Key key = mKeys.get(i);
+ if (key.squaredDistanceFrom(x, y) < mProximityThreshold ||
+ key.squaredDistanceFrom(x + mCellWidth - 1, y) < mProximityThreshold ||
+ key.squaredDistanceFrom(x + mCellWidth - 1, y + mCellHeight - 1)
+ < mProximityThreshold ||
+ key.squaredDistanceFrom(x, y + mCellHeight - 1) < mProximityThreshold ||
+ key.isInside(x, y, mCellWidth, mCellHeight)) {
+ indices[count++] = i;
+ }
+ }
+ int [] cell = new int[count];
+ System.arraycopy(indices, 0, cell, 0, count);
+ mGridNeighbors[(y / mCellHeight) * GRID_WIDTH + (x / mCellWidth)] = cell;
+ }
+ }
+ }
+
+ /**
+ * Returns the indices of the keys that are closest to the given point.
+ * @param x the x-coordinate of the point
+ * @param y the y-coordinate of the point
+ * @return the array of integer indices for the nearest keys to the given point. If the given
+ * point is out of range, then an array of size zero is returned.
+ */
+ public int[] getNearestKeys(int x, int y) {
+ if (mGridNeighbors == null) computeNearestNeighbors();
+ if (x >= 0 && x < getMinWidth() && y >= 0 && y < getHeight()) {
+ int index = (y / mCellHeight) * GRID_WIDTH + (x / mCellWidth);
+ if (index < GRID_SIZE) {
+ return mGridNeighbors[index];
+ }
+ }
+ return new int[0];
+ }
+
+ protected Row createRowFromXml(Resources res, XmlResourceParser parser) {
+ return new Row(res, this, parser);
+ }
+
+ protected Key createKeyFromXml(Resources res, Row parent, int x, int y,
+ XmlResourceParser parser) {
+ return new Key(res, parent, x, y, parser);
+ }
+
+ private void loadKeyboard(Context context, XmlResourceParser parser) {
+ boolean inKey = false;
+ boolean inRow = false;
+ boolean leftMostKey = false;
+ int row = 0;
+ int x = 0;
+ int y = 0;
+ Key key = null;
+ Row currentRow = null;
+ Resources res = context.getResources();
+ boolean skipRow = false;
+
+ try {
+ int event;
+ while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
+ if (event == XmlResourceParser.START_TAG) {
+ String tag = parser.getName();
+ if (TAG_ROW.equals(tag)) {
+ inRow = true;
+ x = 0;
+ currentRow = createRowFromXml(res, parser);
+ skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode;
+ if (skipRow) {
+ skipToEndOfRow(parser);
+ inRow = false;
+ }
+ } else if (TAG_KEY.equals(tag)) {
+ inKey = true;
+ key = createKeyFromXml(res, currentRow, x, y, parser);
+ mKeys.add(key);
+ if (key.codes[0] == KEYCODE_SHIFT) {
+ mShiftKey = key;
+ mShiftKeyIndex = mKeys.size()-1;
+ mModifierKeys.add(key);
+ } else if (key.codes[0] == KEYCODE_ALT) {
+ mModifierKeys.add(key);
+ }
+ } else if (TAG_KEYBOARD.equals(tag)) {
+ parseKeyboardAttributes(res, parser);
+ }
+ } else if (event == XmlResourceParser.END_TAG) {
+ if (inKey) {
+ inKey = false;
+ x += key.gap + key.width;
+ if (x > mTotalWidth) {
+ mTotalWidth = x;
+ }
+ } else if (inRow) {
+ inRow = false;
+ y += currentRow.verticalGap;
+ y += currentRow.defaultHeight;
+ row++;
+ } else {
+ }
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Parse error:" + e);
+ e.printStackTrace();
+ }
+ mTotalHeight = y - mDefaultVerticalGap;
+ }
+
+ private void skipToEndOfRow(XmlResourceParser parser)
+ throws XmlPullParserException, IOException {
+ int event;
+ while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
+ if (event == XmlResourceParser.END_TAG
+ && parser.getName().equals(TAG_ROW)) {
+ break;
+ }
+ }
+ }
+
+ private void parseKeyboardAttributes(Resources res, XmlResourceParser parser) {
+ TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
+ android.R.styleable.Keyboard);
+
+ mDefaultWidth = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyWidth,
+ mDisplayWidth, mDisplayWidth / 10);
+ mDefaultHeight = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_keyHeight,
+ mDisplayHeight, 75);
+ mDefaultHorizontalGap = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_horizontalGap,
+ mDisplayWidth, 0);
+ mDefaultVerticalGap = getDimensionOrFraction(a,
+ android.R.styleable.Keyboard_verticalGap,
+ mDisplayHeight, 0);
+ mProximityThreshold = (int) (mDefaultWidth * SEARCH_DISTANCE);
+ mProximityThreshold = mProximityThreshold * mProximityThreshold;
+ a.recycle();
+ }
+
+ static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) {
+ TypedValue value = a.peekValue(index);
+ if (value == null) return defValue;
+ if (value.type == TypedValue.TYPE_DIMENSION) {
+ return a.getDimensionPixelOffset(index, defValue);
+ } else if (value.type == TypedValue.TYPE_FRACTION) {
+ return Math.round(a.getFraction(index, base, base, defValue));
+ }
+ return defValue;
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/KeyboardView.java b/src/jp/co/omronsoft/openwnn/KeyboardView.java
new file mode 100644
index 0000000..ebacaea
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/KeyboardView.java
@@ -0,0 +1,1517 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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.
+ */
+/* This file is porting from Android framework.
+ * frameworks/base/core/java/android/inputmethodservice/KeyboardView.java
+ *
+ *package android.inputmethodservice;
+ */
+
+package jp.co.omronsoft.openwnn;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.Paint.Align;
+import android.graphics.Region.Op;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import jp.co.omronsoft.openwnn.Keyboard;
+import jp.co.omronsoft.openwnn.Keyboard.Key;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A view that renders a virtual {@link Keyboard}. It handles rendering of keys and
+ * detecting key presses and touch movements.
+ */
+public class KeyboardView extends View implements View.OnClickListener {
+
+ /**
+ * Listener for virtual keyboard events.
+ */
+ public interface OnKeyboardActionListener {
+
+ /**
+ * Called when the user presses a key. This is sent before the {@link #onKey} is called.
+ * For keys that repeat, this is only called once.
+ * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid
+ * key, the value will be zero.
+ */
+ void onPress(int primaryCode);
+
+ /**
+ * Called when the user releases a key. This is sent after the {@link #onKey} is called.
+ * For keys that repeat, this is only called once.
+ * @param primaryCode the code of the key that was released
+ */
+ void onRelease(int primaryCode);
+
+ /**
+ * Send a key press to the listener.
+ * @param primaryCode this is the key that was pressed
+ * @param keyCodes the codes for all the possible alternative keys
+ * with the primary code being the first. If the primary key code is
+ * a single character such as an alphabet or number or symbol, the alternatives
+ * will include other characters that may be on the same key or adjacent keys.
+ * These codes are useful to correct for accidental presses of a key adjacent to
+ * the intended key.
+ */
+ void onKey(int primaryCode, int[] keyCodes);
+
+ /**
+ * Sends a sequence of characters to the listener.
+ * @param text the sequence of characters to be displayed.
+ */
+ void onText(CharSequence text);
+
+ /**
+ * Called when the user quickly moves the finger from right to left.
+ */
+ void swipeLeft();
+
+ /**
+ * Called when the user quickly moves the finger from left to right.
+ */
+ void swipeRight();
+
+ /**
+ * Called when the user quickly moves the finger from up to down.
+ */
+ void swipeDown();
+
+ /**
+ * Called when the user quickly moves the finger from down to up.
+ */
+ void swipeUp();
+
+ /**
+ * Called when the user long presses a key.
+ * @param popupKey the key that was long pressed
+ * @return true if the long press is handled, false otherwise.
+ */
+ boolean onLongPress(Keyboard.Key key);
+ }
+
+ private static final int NOT_A_KEY = -1;
+ private static final int[] KEY_DELETE = { Keyboard.KEYCODE_DELETE };
+ private static final int[] LONG_PRESSABLE_STATE_SET = {
+ android.R.attr.state_long_pressable
+ };
+
+ private Keyboard mKeyboard;
+ private int mCurrentKeyIndex = NOT_A_KEY;
+ private int mLabelTextSize;
+ private int mKeyTextSize;
+ private int mKeyTextColor;
+ private int mKeyTextColor2nd;
+ private float mShadowRadius;
+ private int mShadowColor;
+ private float mBackgroundDimAmount;
+
+ private TextView mPreviewText;
+ private PopupWindow mPreviewPopup;
+ private int mPreviewTextSizeLarge;
+ private int mPreviewOffset;
+ private int mPreviewHeight;
+ private int[] mOffsetInWindow;
+
+ private PopupWindow mPopupKeyboard;
+ private View mMiniKeyboardContainer;
+ private KeyboardView mMiniKeyboard;
+ private boolean mMiniKeyboardOnScreen;
+ private View mPopupParent;
+ private int mMiniKeyboardOffsetX;
+ private int mMiniKeyboardOffsetY;
+ private Map<Key,View> mMiniKeyboardCache;
+ private int[] mWindowOffset;
+ private Key[] mKeys;
+
+ /** Listener for {@link OnKeyboardActionListener}. */
+ private OnKeyboardActionListener mKeyboardActionListener;
+
+ private static final int MSG_SHOW_PREVIEW = 1;
+ private static final int MSG_REMOVE_PREVIEW = 2;
+ private static final int MSG_REPEAT = 3;
+ private static final int MSG_LONGPRESS = 4;
+
+ private static final int DELAY_BEFORE_PREVIEW = 0;
+ private static final int DELAY_AFTER_PREVIEW = 70;
+ private static final int DEBOUNCE_TIME = 70;
+
+ private int mVerticalCorrection;
+ private int mProximityThreshold;
+
+ private boolean mPreviewCentered = false;
+ private boolean mShowPreview = true;
+ private boolean mShowTouchPoints = true;
+ private int mPopupPreviewX;
+ private int mPopupPreviewY;
+ private int mWindowY;
+
+ private int mLastX;
+ private int mLastY;
+ private int mStartX;
+ private int mStartY;
+
+ private boolean mProximityCorrectOn;
+
+ private Paint mPaint;
+ private Rect mPadding;
+
+ private long mDownTime;
+ private long mLastMoveTime;
+ private int mLastKey;
+ private int mLastCodeX;
+ private int mLastCodeY;
+ private int mCurrentKey = NOT_A_KEY;
+ private int mDownKey = NOT_A_KEY;
+ private long mLastKeyTime;
+ private long mCurrentKeyTime;
+ private int[] mKeyIndices = new int[12];
+ private GestureDetector mGestureDetector;
+ private int mPopupX;
+ private int mPopupY;
+ private int mRepeatKeyIndex = NOT_A_KEY;
+ private int mPopupLayout;
+ private boolean mAbortKey;
+ private Key mInvalidatedKey;
+ private Rect mClipRegion = new Rect(0, 0, 0, 0);
+ private boolean mPossiblePoly;
+ private SwipeTracker mSwipeTracker = new SwipeTracker();
+ private int mSwipeThreshold;
+ private boolean mDisambiguateSwipe;
+
+ private int mOldPointerCount = 1;
+ private float mOldPointerX;
+ private float mOldPointerY;
+
+ private Drawable mKeyBackground;
+ private Drawable mKeyBackground2nd;
+
+ private static final int REPEAT_INTERVAL = 50;
+ private static final int REPEAT_START_DELAY = 400;
+ private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
+
+ private static int MAX_NEARBY_KEYS = 12;
+ private int[] mDistances = new int[MAX_NEARBY_KEYS];
+
+ private int mLastSentIndex;
+ private int mTapCount;
+ private long mLastTapTime;
+ private boolean mInMultiTap;
+ private static final int MULTITAP_INTERVAL = 800;
+ private StringBuilder mPreviewLabel = new StringBuilder(1);
+
+ /** Whether the keyboard bitmap needs to be redrawn before it's blitted. **/
+ private boolean mDrawPending;
+ /** The dirty region in the keyboard bitmap */
+ private Rect mDirtyRect = new Rect();
+ /** The keyboard bitmap for faster updates */
+ private Bitmap mBuffer;
+ /** Notes if the keyboard just changed, so that we could possibly reallocate the mBuffer. */
+ private boolean mKeyboardChanged;
+ /** The canvas for the above mutable keyboard bitmap */
+ private Canvas mCanvas;
+
+ Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_SHOW_PREVIEW:
+ showKey(msg.arg1);
+ break;
+ case MSG_REMOVE_PREVIEW:
+ mPreviewText.setVisibility(INVISIBLE);
+ break;
+ case MSG_REPEAT:
+ if (repeatKey()) {
+ Message repeat = Message.obtain(this, MSG_REPEAT);
+ sendMessageDelayed(repeat, REPEAT_INTERVAL);
+ }
+ break;
+ case MSG_LONGPRESS:
+ openPopupIfRequired((MotionEvent) msg.obj);
+ break;
+ }
+ }
+ };
+
+ /** Constructor */
+ public KeyboardView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ /** Constructor */
+ public KeyboardView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a =
+ context.obtainStyledAttributes(
+ attrs, android.R.styleable.KeyboardView, defStyle, R.style.WnnKeyboardView);
+
+ LayoutInflater inflate =
+ (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ int previewLayout = 0;
+ int keyTextSize = 0;
+
+ int n = a.getIndexCount();
+
+ for (int i = 0; i < n; i++) {
+ int attr = a.getIndex(i);
+
+ switch (attr) {
+ case android.R.styleable.KeyboardView_keyBackground:
+ mKeyBackground = a.getDrawable(attr);
+ break;
+ case android.R.styleable.KeyboardView_verticalCorrection:
+ mVerticalCorrection = a.getDimensionPixelOffset(attr, 0);
+ break;
+ case android.R.styleable.KeyboardView_keyPreviewLayout:
+ previewLayout = a.getResourceId(attr, 0);
+ break;
+ case android.R.styleable.KeyboardView_keyPreviewOffset:
+ mPreviewOffset = a.getDimensionPixelOffset(attr, 0);
+ break;
+ case android.R.styleable.KeyboardView_keyPreviewHeight:
+ mPreviewHeight = a.getDimensionPixelSize(attr, 80);
+ break;
+ case android.R.styleable.KeyboardView_keyTextSize:
+ mKeyTextSize = a.getDimensionPixelSize(attr, 18);
+ break;
+ case android.R.styleable.KeyboardView_keyTextColor:
+ mKeyTextColor = a.getColor(attr, 0xFF000000);
+ break;
+ case android.R.styleable.KeyboardView_labelTextSize:
+ mLabelTextSize = a.getDimensionPixelSize(attr, 14);
+ break;
+ case android.R.styleable.KeyboardView_popupLayout:
+ mPopupLayout = a.getResourceId(attr, 0);
+ break;
+ case android.R.styleable.KeyboardView_shadowColor:
+ mShadowColor = a.getColor(attr, 0);
+ break;
+ case android.R.styleable.KeyboardView_shadowRadius:
+ mShadowRadius = a.getFloat(attr, 0f);
+ break;
+ }
+ }
+
+ a.recycle();
+ a = context.obtainStyledAttributes(attrs, R.styleable.WnnKeyboardView, 0, 0);
+ mKeyBackground2nd = a.getDrawable(R.styleable.WnnKeyboardView_keyBackground2nd);
+ mKeyTextColor2nd = a.getColor(R.styleable.WnnKeyboardView_keyTextColor2nd, 0xFF000000);
+
+ a.recycle();
+ a = mContext.obtainStyledAttributes(
+ android.R.styleable.Theme);
+ mBackgroundDimAmount = a.getFloat(android.R.styleable.Theme_backgroundDimAmount, 0.5f);
+
+ mPreviewPopup = new PopupWindow(context);
+ if (previewLayout != 0) {
+ mPreviewText = (TextView) inflate.inflate(previewLayout, null);
+ mPreviewTextSizeLarge = (int) mPreviewText.getTextSize();
+ mPreviewPopup.setContentView(mPreviewText);
+ mPreviewPopup.setBackgroundDrawable(null);
+ } else {
+ mShowPreview = false;
+ }
+
+ mPreviewPopup.setTouchable(false);
+
+ mPopupKeyboard = new PopupWindow(context);
+ mPopupKeyboard.setBackgroundDrawable(null);
+
+ mPopupParent = this;
+
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setTextSize(keyTextSize);
+ mPaint.setTextAlign(Align.CENTER);
+ mPaint.setAlpha(255);
+
+ mPadding = new Rect(0, 0, 0, 0);
+ mMiniKeyboardCache = new HashMap<Key,View>();
+ mKeyBackground.getPadding(mPadding);
+
+ mSwipeThreshold = (int) (500 * getResources().getDisplayMetrics().density);
+
+ mDisambiguateSwipe = true;
+
+ resetMultiTap();
+ initGestureDetector();
+ }
+
+ private void initGestureDetector() {
+ mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
+ @Override
+ public boolean onFling(MotionEvent me1, MotionEvent me2,
+ float velocityX, float velocityY) {
+ if (mPossiblePoly) return false;
+ final float absX = Math.abs(velocityX);
+ final float absY = Math.abs(velocityY);
+ float deltaX = me2.getX() - me1.getX();
+ float deltaY = me2.getY() - me1.getY();
+ int travelX = getWidth() / 2;
+ int travelY = getHeight() / 2;
+ mSwipeTracker.computeCurrentVelocity(1000);
+ final float endingVelocityX = mSwipeTracker.getXVelocity();
+ final float endingVelocityY = mSwipeTracker.getYVelocity();
+ boolean sendDownKey = false;
+ if (velocityX > mSwipeThreshold && absY < absX && deltaX > travelX) {
+ if (mDisambiguateSwipe && endingVelocityX < velocityX / 4) {
+ sendDownKey = true;
+ } else {
+ swipeRight();
+ return true;
+ }
+ } else if (velocityX < -mSwipeThreshold && absY < absX && deltaX < -travelX) {
+ if (mDisambiguateSwipe && endingVelocityX > velocityX / 4) {
+ sendDownKey = true;
+ } else {
+ swipeLeft();
+ return true;
+ }
+ } else if (velocityY < -mSwipeThreshold && absX < absY && deltaY < -travelY) {
+ if (mDisambiguateSwipe && endingVelocityY > velocityY / 4) {
+ sendDownKey = true;
+ } else {
+ swipeUp();
+ return true;
+ }
+ } else if (velocityY > mSwipeThreshold && absX < absY / 2 && deltaY > travelY) {
+ if (mDisambiguateSwipe && endingVelocityY < velocityY / 4) {
+ sendDownKey = true;
+ } else {
+ swipeDown();
+ return true;
+ }
+ }
+
+ if (sendDownKey) {
+ detectAndSendKey(mDownKey, mStartX, mStartY, me1.getEventTime());
+ }
+ return false;
+ }
+ });
+
+ mGestureDetector.setIsLongpressEnabled(false);
+ }
+
+ /**
+ * Set the {@link OnKeyboardActionListener} object.
+ * @param listener The OnKeyboardActionListener to set.
+ */
+ public void setOnKeyboardActionListener(OnKeyboardActionListener listener) {
+ mKeyboardActionListener = listener;
+ }
+
+ /**
+ * Returns the {@link OnKeyboardActionListener} object.
+ * @return the listener attached to this keyboard
+ */
+ protected OnKeyboardActionListener getOnKeyboardActionListener() {
+ return mKeyboardActionListener;
+ }
+
+ /**
+ * Attaches a keyboard to this view. The keyboard can be switched at any time and the
+ * view will re-layout itself to accommodate the keyboard.
+ * @see Keyboard
+ * @see #getKeyboard()
+ * @param keyboard the keyboard to display in this view
+ */
+ public void setKeyboard(Keyboard keyboard) {
+ if (!keyboard.equals(mKeyboard)) {
+ clearWindowInfo();
+ }
+ int oldRepeatKeyCode = NOT_A_KEY;
+ if (mKeyboard != null) {
+ showPreview(NOT_A_KEY);
+ if ((mRepeatKeyIndex != NOT_A_KEY) && (mRepeatKeyIndex < mKeys.length)) {
+ oldRepeatKeyCode = mKeys[mRepeatKeyIndex].codes[0];
+ }
+ }
+ removeMessages();
+ mKeyboard = keyboard;
+ List<Key> keys = mKeyboard.getKeys();
+ mKeys = keys.toArray(new Key[keys.size()]);
+ requestLayout();
+ mKeyboardChanged = true;
+ invalidateAllKeys();
+ computeProximityThreshold(keyboard);
+ mMiniKeyboardCache.clear();
+ boolean abort = true;
+ if (oldRepeatKeyCode != NOT_A_KEY) {
+ int keyIndex = getKeyIndices(mStartX, mStartY, null);
+ if ((keyIndex != NOT_A_KEY)
+ && (keyIndex < mKeys.length)
+ && (oldRepeatKeyCode == mKeys[keyIndex].codes[0])) {
+ abort = false;
+ mRepeatKeyIndex = keyIndex;
+ }
+ }
+ if (abort) {
+ mHandler.removeMessages(MSG_REPEAT);
+ }
+ mAbortKey = abort;
+ }
+
+ /**
+ * Returns the current keyboard being displayed by this view.
+ * @return the currently attached keyboard
+ * @see #setKeyboard(Keyboard)
+ */
+ public Keyboard getKeyboard() {
+ return mKeyboard;
+ }
+
+ /**
+ * Sets the state of the shift key of the keyboard, if any.
+ * @param shifted whether or not to enable the state of the shift key
+ * @return true if the shift key state changed, false if there was no change
+ * @see KeyboardView#isShifted()
+ */
+ public boolean setShifted(boolean shifted) {
+ if (mKeyboard != null) {
+ if (mKeyboard.setShifted(shifted)) {
+ invalidateAllKeys();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the state of the shift key of the keyboard, if any.
+ * @return true if the shift is in a pressed state, false otherwise. If there is
+ * no shift key on the keyboard or there is no keyboard attached, it returns false.
+ * @see KeyboardView#setShifted(boolean)
+ */
+ public boolean isShifted() {
+ if (mKeyboard != null) {
+ return mKeyboard.isShifted();
+ }
+ return false;
+ }
+
+ /**
+ * Enables or disables the key feedback popup. This is a popup that shows a magnified
+ * version of the depressed key. By default the preview is enabled.
+ * @param previewEnabled whether or not to enable the key feedback popup
+ * @see #isPreviewEnabled()
+ */
+ public void setPreviewEnabled(boolean previewEnabled) {
+ mShowPreview = previewEnabled;
+ }
+
+ /**
+ * Returns the enabled state of the key feedback popup.
+ * @return whether or not the key feedback popup is enabled
+ * @see #setPreviewEnabled(boolean)
+ */
+ public boolean isPreviewEnabled() {
+ return mShowPreview;
+ }
+
+ /**
+ * Returns the root parent has the enabled state of the key feedback popup.
+ * @return whether or not the key feedback popup is enabled
+ * @see #setPreviewEnabled(boolean)
+ */
+ public boolean isParentPreviewEnabled() {
+ if ((mPopupParent != null) && (mPopupParent != this)
+ && (mPopupParent instanceof KeyboardView)) {
+ return ((KeyboardView)mPopupParent).isParentPreviewEnabled();
+ } else {
+ return mShowPreview;
+ }
+ }
+
+ public void setVerticalCorrection(int verticalOffset) {
+
+ }
+
+ /**
+ * Set View on the PopupParent.
+ * @param v The View to set.
+ */
+ public void setPopupParent(View v) {
+ mPopupParent = v;
+ }
+
+ /**
+ * Set parameters on the KeyboardOffset.
+ * @param x The value of KeyboardOffset.
+ * @param y The value of KeyboardOffset.
+ */
+ public void setPopupOffset(int x, int y) {
+ mMiniKeyboardOffsetX = x;
+ mMiniKeyboardOffsetY = y;
+ if (mPreviewPopup.isShowing()) {
+ mPreviewPopup.dismiss();
+ }
+ }
+
+ /**
+ * When enabled, calls to {@link OnKeyboardActionListener#onKey} will include key
+ * codes for adjacent keys. When disabled, only the primary key code will be
+ * reported.
+ * @param enabled whether or not the proximity correction is enabled
+ */
+ public void setProximityCorrectionEnabled(boolean enabled) {
+ mProximityCorrectOn = enabled;
+ }
+
+ /**
+ * Returns true if proximity correction is enabled.
+ */
+ public boolean isProximityCorrectionEnabled() {
+ return mProximityCorrectOn;
+ }
+
+ /**
+ * Popup keyboard close button clicked.
+ * @hide
+ */
+ public void onClick(View v) {
+ dismissPopupKeyboard();
+ }
+
+ private CharSequence adjustCase(CharSequence label) {
+ if (mKeyboard.isShifted() && label != null && label.length() < 3
+ && Character.isLowerCase(label.charAt(0))) {
+ label = label.toString().toUpperCase();
+ }
+ return label;
+ }
+
+ @Override
+ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (mKeyboard == null) {
+ setMeasuredDimension(mPaddingLeft + mPaddingRight, mPaddingTop + mPaddingBottom);
+ } else {
+ int width = mKeyboard.getMinWidth() + mPaddingLeft + mPaddingRight;
+ if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) {
+ width = MeasureSpec.getSize(widthMeasureSpec);
+ }
+ setMeasuredDimension(width, mKeyboard.getHeight() + mPaddingTop + mPaddingBottom);
+ }
+ }
+
+ /**
+ * Compute the average distance between adjacent keys (horizontally and vertically)
+ * and square it to get the proximity threshold. We use a square here and in computing
+ * the touch distance from a key's center to avoid taking a square root.
+ * @param keyboard
+ */
+ private void computeProximityThreshold(Keyboard keyboard) {
+ if (keyboard == null) return;
+ final Key[] keys = mKeys;
+ if (keys == null) return;
+ int length = keys.length;
+ int dimensionSum = 0;
+ for (int i = 0; i < length; i++) {
+ Key key = keys[i];
+ dimensionSum += Math.min(key.width, key.height) + key.gap;
+ }
+ if (dimensionSum < 0 || length == 0) return;
+ mProximityThreshold = (int) (dimensionSum * 1.4f / length);
+ mProximityThreshold *= mProximityThreshold;
+ }
+
+ @Override
+ public void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ mBuffer = null;
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ if (mDrawPending || mBuffer == null || mKeyboardChanged) {
+ onBufferDraw();
+ }
+ canvas.drawBitmap(mBuffer, 0, 0, null);
+ }
+
+ private void onBufferDraw() {
+ boolean isBufferNull = (mBuffer == null);
+ if (isBufferNull || mKeyboardChanged) {
+ if (isBufferNull || mKeyboardChanged &&
+ (mBuffer.getWidth() != getWidth() || mBuffer.getHeight() != getHeight())) {
+ final int width = Math.max(1, getWidth());
+ final int height = Math.max(1, getHeight());
+ mBuffer = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ mCanvas = new Canvas(mBuffer);
+ }
+ invalidateAllKeys();
+ mKeyboardChanged = false;
+ }
+ final Canvas canvas = mCanvas;
+ canvas.clipRect(mDirtyRect, Op.REPLACE);
+
+ if (mKeyboard == null) return;
+
+ final Paint paint = mPaint;
+ final Rect clipRegion = mClipRegion;
+ final Rect padding = mPadding;
+ final int kbdPaddingLeft = mPaddingLeft;
+ final int kbdPaddingTop = mPaddingTop;
+ final Key[] keys = mKeys;
+ final Key invalidKey = mInvalidatedKey;
+
+ paint.setColor(mKeyTextColor);
+ boolean drawSingleKey = false;
+ if (invalidKey != null && canvas.getClipBounds(clipRegion)) {
+ if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left &&
+ invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top &&
+ invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right &&
+ invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) {
+ drawSingleKey = true;
+ }
+ }
+ canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
+ final int keyCount = keys.length;
+ for (int i = 0; i < keyCount; i++) {
+ final Key key = keys[i];
+ if (drawSingleKey && invalidKey != key) {
+ continue;
+ }
+
+ paint.setColor(key.isSecondKey ? mKeyTextColor2nd : mKeyTextColor);
+ Drawable keyBackground = key.isSecondKey ? mKeyBackground2nd : mKeyBackground;
+ int[] drawableState = key.getCurrentDrawableState();
+ keyBackground.setState(drawableState);
+
+ String label = key.label == null? null : adjustCase(key.label).toString();
+
+ final Rect bounds = keyBackground.getBounds();
+ if (key.width != bounds.right ||
+ key.height != bounds.bottom) {
+ keyBackground.setBounds(0, 0, key.width, key.height);
+ }
+ canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop);
+ keyBackground.draw(canvas);
+
+ if (label != null) {
+ if (OpenWnn.isXLarge()) {
+ if (label.length() > 1 && key.codes.length < 2) {
+ paint.setTextSize(mLabelTextSize);
+ paint.setTypeface(Typeface.DEFAULT);
+ } else {
+ paint.setTextSize(mKeyTextSize);
+ paint.setTypeface(Typeface.DEFAULT_BOLD);
+ }
+ } else {
+ if (label.length() > 1 && key.codes.length < 2) {
+ paint.setTextSize(mLabelTextSize);
+ paint.setTypeface(Typeface.DEFAULT_BOLD);
+ } else {
+ paint.setTextSize(mKeyTextSize);
+ paint.setTypeface(Typeface.DEFAULT_BOLD);
+ }
+ }
+ paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor);
+ if (OpenWnn.isXLarge()) {
+ canvas.drawText(label,
+ (key.width - padding.left + 7 - padding.right) / 2
+ + padding.left,
+ (key.height - padding.top + 7 - padding.bottom) / 2
+ + (paint.getTextSize() - paint.descent()) / 2 + padding.top,
+ paint);
+ } else {
+ canvas.drawText(label,
+ (key.width - padding.left - padding.right) / 2
+ + padding.left,
+ (key.height - padding.top - padding.bottom) / 2
+ + (paint.getTextSize() - paint.descent()) / 2 + padding.top,
+ paint);
+ }
+ paint.setShadowLayer(0, 0, 0, 0);
+ } else if (key.icon != null) {
+ int drawableX;
+ int drawableY;
+ if (OpenWnn.isXLarge()) {
+ drawableX = (key.width - padding.left + 12 - padding.right
+ - key.icon.getIntrinsicWidth()) / 2 + padding.left;
+ drawableY = (key.height - padding.top + 9 - padding.bottom
+ - key.icon.getIntrinsicHeight()) / 2 + padding.top;
+ } else {
+ drawableX = (key.width - padding.left - padding.right
+ - key.icon.getIntrinsicWidth()) / 2 + padding.left;
+ drawableY = (key.height - padding.top - padding.bottom
+ - key.icon.getIntrinsicHeight()) / 2 + padding.top;
+ }
+ canvas.translate(drawableX, drawableY);
+ key.icon.setBounds(0, 0,
+ key.icon.getIntrinsicWidth(), key.icon.getIntrinsicHeight());
+ key.icon.draw(canvas);
+ canvas.translate(-drawableX, -drawableY);
+ }
+ canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop);
+ }
+ mInvalidatedKey = null;
+ if (mMiniKeyboardOnScreen) {
+ paint.setColor((int) (mBackgroundDimAmount * 0xFF) << 24);
+ canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
+ }
+
+ mDrawPending = false;
+ mDirtyRect.setEmpty();
+ }
+
+ private int getKeyIndices(int x, int y, int[] allKeys) {
+ final Key[] keys = mKeys;
+ int primaryIndex = NOT_A_KEY;
+ int closestKey = NOT_A_KEY;
+ int closestKeyDist = mProximityThreshold + 1;
+ java.util.Arrays.fill(mDistances, Integer.MAX_VALUE);
+ int [] nearestKeyIndices = mKeyboard.getNearestKeys(x, y);
+ final int keyCount = nearestKeyIndices.length;
+ for (int i = 0; i < keyCount; i++) {
+ final Key key = keys[nearestKeyIndices[i]];
+ int dist = 0;
+ boolean isInside = key.isInside(x,y);
+ if (isInside) {
+ primaryIndex = nearestKeyIndices[i];
+ }
+
+ if (((mProximityCorrectOn
+ && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold)
+ || isInside)
+ && key.codes[0] > 32) {
+ final int nCodes = key.codes.length;
+ if (dist < closestKeyDist) {
+ closestKeyDist = dist;
+ closestKey = nearestKeyIndices[i];
+ }
+
+ if (allKeys == null) continue;
+
+ for (int j = 0; j < mDistances.length; j++) {
+ if (mDistances[j] > dist) {
+ System.arraycopy(mDistances, j, mDistances, j + nCodes,
+ mDistances.length - j - nCodes);
+ System.arraycopy(allKeys, j, allKeys, j + nCodes,
+ allKeys.length - j - nCodes);
+ for (int c = 0; c < nCodes; c++) {
+ allKeys[j + c] = key.codes[c];
+ mDistances[j + c] = dist;
+ }
+ break;
+ }
+ }
+ }
+ }
+ if (primaryIndex == NOT_A_KEY) {
+ primaryIndex = closestKey;
+ }
+ return primaryIndex;
+ }
+
+ private void detectAndSendKey(int index, int x, int y, long eventTime) {
+ if (index != NOT_A_KEY && index < mKeys.length) {
+ final Key key = mKeys[index];
+ if (key.text != null) {
+ mKeyboardActionListener.onText(key.text);
+ mKeyboardActionListener.onRelease(NOT_A_KEY);
+ } else {
+ int code = key.codes[0];
+ int[] codes = new int[MAX_NEARBY_KEYS];
+ Arrays.fill(codes, NOT_A_KEY);
+ getKeyIndices(x, y, codes);
+ if (mInMultiTap) {
+ if (mTapCount != -1) {
+ mKeyboardActionListener.onKey(Keyboard.KEYCODE_DELETE, KEY_DELETE);
+ } else {
+ mTapCount = 0;
+ }
+ code = key.codes[mTapCount];
+ }
+ mKeyboardActionListener.onKey(code, codes);
+ mKeyboardActionListener.onRelease(code);
+ }
+ mLastSentIndex = index;
+ mLastTapTime = eventTime;
+ }
+ }
+
+ /**
+ * Handle multi-tap keys by producing the key label for the current multi-tap state.
+ */
+ private CharSequence getPreviewText(Key key) {
+ if (mInMultiTap) {
+ mPreviewLabel.setLength(0);
+ mPreviewLabel.append((char) key.codes[mTapCount < 0 ? 0 : mTapCount]);
+ return adjustCase(mPreviewLabel);
+ } else {
+ return adjustCase(key.label);
+ }
+ }
+
+ private void showPreview(int keyIndex) {
+ int oldKeyIndex = mCurrentKeyIndex;
+ final PopupWindow previewPopup = mPreviewPopup;
+
+ mCurrentKeyIndex = keyIndex;
+ final Key[] keys = mKeys;
+ if (oldKeyIndex != mCurrentKeyIndex) {
+ if (oldKeyIndex != NOT_A_KEY && keys.length > oldKeyIndex) {
+ keys[oldKeyIndex].onReleased(mCurrentKeyIndex == NOT_A_KEY);
+ invalidateKey(oldKeyIndex);
+ }
+ if (mCurrentKeyIndex != NOT_A_KEY && keys.length > mCurrentKeyIndex) {
+ keys[mCurrentKeyIndex].onPressed();
+ invalidateKey(mCurrentKeyIndex);
+ }
+ }
+ if (oldKeyIndex != mCurrentKeyIndex && mShowPreview && isParentPreviewEnabled()) {
+ mHandler.removeMessages(MSG_SHOW_PREVIEW);
+ if (previewPopup.isShowing()) {
+ if (keyIndex == NOT_A_KEY) {
+ mHandler.sendMessageDelayed(mHandler
+ .obtainMessage(MSG_REMOVE_PREVIEW),
+ DELAY_AFTER_PREVIEW);
+ }
+ }
+ if (keyIndex != NOT_A_KEY) {
+ if (previewPopup.isShowing() && mPreviewText.getVisibility() == VISIBLE) {
+ showKey(keyIndex);
+ } else {
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0),
+ DELAY_BEFORE_PREVIEW);
+ }
+ }
+ }
+ }
+
+ private void showKey(final int keyIndex) {
+ final PopupWindow previewPopup = mPreviewPopup;
+ final Key[] keys = mKeys;
+ if (keyIndex < 0 || keyIndex >= mKeys.length) return;
+ Key key = keys[keyIndex];
+
+ mPreviewText.setBackgroundDrawable(getContext().getResources().getDrawable(R.drawable.keyboard_key_feedback));
+
+ if (key.icon != null) {
+ mPreviewText.setCompoundDrawables(null, null, null,
+ key.iconPreview != null ? key.iconPreview : key.icon);
+ mPreviewText.setText(null);
+ mPreviewText.setPadding(5, 0, 5, 20);
+ } else {
+ mPreviewText.setCompoundDrawables(null, null, null, null);
+ mPreviewText.setText(getPreviewText(key));
+ if (key.label.length() > 1 && key.codes.length < 2) {
+ mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mKeyTextSize);
+ mPreviewText.setTypeface(Typeface.DEFAULT_BOLD);
+ } else {
+ mPreviewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mPreviewTextSizeLarge);
+ mPreviewText.setTypeface(Typeface.DEFAULT);
+ }
+ mPreviewText.setPadding(0, 0, 0, 10);
+ }
+ mPreviewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ int popupWidth = Math.max(mPreviewText.getMeasuredWidth(), key.width
+ + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight());
+ final int popupHeight = mPreviewHeight;
+ LayoutParams lp = mPreviewText.getLayoutParams();
+ if (lp != null) {
+ lp.width = popupWidth;
+ lp.height = popupHeight;
+ }
+ if (!mPreviewCentered) {
+ mPopupPreviewX = key.x - (Math.abs(popupWidth - key.width) / 2 );
+ mPopupPreviewY = key.y - popupHeight + mPreviewOffset;
+ } else {
+ mPopupPreviewX = 160 - mPreviewText.getMeasuredWidth() / 2;
+ mPopupPreviewY = - mPreviewText.getMeasuredHeight();
+ }
+ mPopupPreviewY = mPopupPreviewY + 20;
+ mHandler.removeMessages(MSG_REMOVE_PREVIEW);
+ if (mOffsetInWindow == null) {
+ mOffsetInWindow = new int[2];
+ getLocationInWindow(mOffsetInWindow);
+ mOffsetInWindow[0] += mMiniKeyboardOffsetX;
+ mOffsetInWindow[1] += mMiniKeyboardOffsetY;
+ int[] mWindowLocation = new int[2];
+ getLocationOnScreen(mWindowLocation);
+ mWindowY = mWindowLocation[1];
+ }
+ mPreviewText.getBackground().setState(
+ key.popupResId != 0 ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET);
+ mPopupPreviewX += mOffsetInWindow[0];
+ mPopupPreviewY += mOffsetInWindow[1];
+
+ if (mPopupPreviewY + mWindowY < 0) {
+ if (key.x + key.width <= getWidth() / 2) {
+ mPopupPreviewX += (int) (key.width * 2.5);
+ } else {
+ mPopupPreviewX -= (int) (key.width * 2.5);
+ }
+ mPopupPreviewY += popupHeight;
+ }
+
+ if (previewPopup.isShowing()) {
+ previewPopup.update(mPopupPreviewX, mPopupPreviewY,
+ popupWidth, popupHeight);
+ } else {
+ previewPopup.setWidth(popupWidth);
+ previewPopup.setHeight(popupHeight);
+ previewPopup.showAtLocation(mPopupParent, Gravity.NO_GRAVITY,
+ mPopupPreviewX, mPopupPreviewY);
+ }
+ mPreviewText.setVisibility(VISIBLE);
+ }
+
+ /**
+ * Requests a redraw of the entire keyboard. Calling {@link #invalidate} is not sufficient
+ * because the keyboard renders the keys to an off-screen buffer and an invalidate() only
+ * draws the cached buffer.
+ * @see #invalidateKey(int)
+ */
+ public void invalidateAllKeys() {
+ mDirtyRect.union(0, 0, getWidth(), getHeight());
+ mDrawPending = true;
+ invalidate();
+ }
+
+ /**
+ * Invalidates a key so that it will be redrawn on the next repaint. Use this method if only
+ * one key is changing it's content. Any changes that affect the position or size of the key
+ * may not be honored.
+ * @param keyIndex the index of the key in the attached {@link Keyboard}.
+ * @see #invalidateAllKeys
+ */
+ public void invalidateKey(int keyIndex) {
+ if (mKeys == null) return;
+ if (keyIndex < 0 || keyIndex >= mKeys.length) {
+ return;
+ }
+ final Key key = mKeys[keyIndex];
+ mInvalidatedKey = key;
+ mDirtyRect.union(key.x + mPaddingLeft, key.y + mPaddingTop,
+ key.x + key.width + mPaddingLeft, key.y + key.height + mPaddingTop);
+ onBufferDraw();
+ invalidate(key.x + mPaddingLeft, key.y + mPaddingTop,
+ key.x + key.width + mPaddingLeft, key.y + key.height + mPaddingTop);
+ }
+
+ private boolean openPopupIfRequired(MotionEvent me) {
+ if (mPopupLayout == 0) {
+ return false;
+ }
+ if (mCurrentKey < 0 || mCurrentKey >= mKeys.length) {
+ return false;
+ }
+
+ Key popupKey = mKeys[mCurrentKey];
+ boolean result = onLongPress(popupKey);
+ if (result) {
+ mAbortKey = true;
+ showPreview(NOT_A_KEY);
+ }
+ return result;
+ }
+
+ /**
+ * Called when a key is long pressed. By default this will open any popup keyboard associated
+ * with this key through the attributes popupLayout and popupCharacters.
+ * @param popupKey the key that was long pressed
+ * @return true if the long press is handled, false otherwise. Subclasses should call the
+ * method on the base class if the subclass doesn't wish to handle the call.
+ */
+ protected boolean onLongPress(Key popupKey) {
+ if (mKeyboardActionListener.onLongPress(popupKey)) {
+ return true;
+ }
+ int popupKeyboardId = popupKey.popupResId;
+ if (popupKeyboardId != 0) {
+ mMiniKeyboardContainer = mMiniKeyboardCache.get(popupKey);
+ if (mMiniKeyboardContainer == null) {
+ LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ mMiniKeyboardContainer = inflater.inflate(mPopupLayout, null);
+ mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById(R.id.keyboardView);
+ View closeButton = mMiniKeyboardContainer.findViewById(R.id.closeButton);
+ if (closeButton != null) closeButton.setOnClickListener(this);
+ mMiniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() {
+ public void onKey(int primaryCode, int[] keyCodes) {
+ mKeyboardActionListener.onKey(primaryCode, keyCodes);
+ dismissPopupKeyboard();
+ }
+
+ public void onText(CharSequence text) {
+ mKeyboardActionListener.onText(text);
+ dismissPopupKeyboard();
+ }
+
+ public void swipeLeft() { }
+ public void swipeRight() { }
+ public void swipeUp() { }
+ public void swipeDown() { }
+ public void onPress(int primaryCode) {
+ mKeyboardActionListener.onPress(primaryCode);
+ }
+ public void onRelease(int primaryCode) {
+ mKeyboardActionListener.onRelease(primaryCode);
+ }
+ public boolean onLongPress(Keyboard.Key key) {
+ return false;
+ }
+ });
+ Keyboard keyboard;
+ if (popupKey.popupCharacters != null) {
+ keyboard = new Keyboard(getContext(), popupKeyboardId,
+ popupKey.popupCharacters, -1, getPaddingLeft() + getPaddingRight());
+ } else {
+ keyboard = new Keyboard(getContext(), popupKeyboardId);
+ }
+ mMiniKeyboard.setKeyboard(keyboard);
+ mMiniKeyboard.setPopupParent(this);
+ mMiniKeyboardContainer.measure(
+ MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
+
+ mMiniKeyboardCache.put(popupKey, mMiniKeyboardContainer);
+ } else {
+ mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById(R.id.keyboardView);
+ }
+ if (mWindowOffset == null) {
+ mWindowOffset = new int[2];
+ getLocationInWindow(mWindowOffset);
+ }
+ mPopupX = popupKey.x + mPaddingLeft;
+ mPopupY = popupKey.y + mPaddingTop;
+ mPopupX = mPopupX + popupKey.width - mMiniKeyboardContainer.getMeasuredWidth();
+ mPopupY = mPopupY - mMiniKeyboardContainer.getMeasuredHeight();
+ final int x = mPopupX + mMiniKeyboardContainer.getPaddingRight() + mWindowOffset[0];
+ final int y = mPopupY + mMiniKeyboardContainer.getPaddingBottom() + mWindowOffset[1];
+ mMiniKeyboard.setPopupOffset(x < 0 ? 0 : x, y);
+ mMiniKeyboard.setShifted(isShifted());
+ mPopupKeyboard.setContentView(mMiniKeyboardContainer);
+ mPopupKeyboard.setWidth(mMiniKeyboardContainer.getMeasuredWidth());
+ mPopupKeyboard.setHeight(mMiniKeyboardContainer.getMeasuredHeight());
+ mPopupKeyboard.showAtLocation(this, Gravity.NO_GRAVITY, x, y);
+ mMiniKeyboardOnScreen = true;
+ invalidateAllKeys();
+ return true;
+ }
+ return false;
+ }
+
+ private long mOldEventTime;
+ private boolean mUsedVelocity;
+
+ @Override
+ public boolean onTouchEvent(MotionEvent me) {
+ final int pointerCount = me.getPointerCount();
+ final int action = me.getAction();
+ boolean result = false;
+ final long now = me.getEventTime();
+ final boolean isPointerCountOne = (pointerCount == 1);
+
+ if (pointerCount != mOldPointerCount) {
+ if (isPointerCountOne) {
+ MotionEvent down = MotionEvent.obtain(now, now, MotionEvent.ACTION_DOWN,
+ me.getX(), me.getY(), me.getMetaState());
+ result = onModifiedTouchEvent(down, false);
+ down.recycle();
+ if (action == MotionEvent.ACTION_UP) {
+ result = onModifiedTouchEvent(me, true);
+ }
+ } else {
+ MotionEvent up = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP,
+ mOldPointerX, mOldPointerY, me.getMetaState());
+ result = onModifiedTouchEvent(up, true);
+ up.recycle();
+ }
+ } else {
+ if (isPointerCountOne) {
+ result = onModifiedTouchEvent(me, false);
+ mOldPointerX = me.getX();
+ mOldPointerY = me.getY();
+ } else {
+ result = true;
+ }
+ }
+ mOldPointerCount = pointerCount;
+
+ return result;
+ }
+
+ private boolean onModifiedTouchEvent(MotionEvent me, boolean possiblePoly) {
+ int touchX = (int) me.getX() - mPaddingLeft;
+ int touchY = (int) me.getY() + mVerticalCorrection - mPaddingTop;
+ final int action = me.getAction();
+ final long eventTime = me.getEventTime();
+ mOldEventTime = eventTime;
+ int keyIndex = getKeyIndices(touchX, touchY, null);
+ mPossiblePoly = possiblePoly;
+
+ if (action == MotionEvent.ACTION_DOWN) mSwipeTracker.clear();
+ mSwipeTracker.addMovement(me);
+
+ if (mAbortKey
+ && action != MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_CANCEL) {
+ return true;
+ }
+
+ if (mGestureDetector.onTouchEvent(me)) {
+ showPreview(NOT_A_KEY);
+ mHandler.removeMessages(MSG_REPEAT);
+ mHandler.removeMessages(MSG_LONGPRESS);
+ return true;
+ }
+
+ if (mMiniKeyboardOnScreen && action != MotionEvent.ACTION_CANCEL) {
+ return true;
+ }
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ mAbortKey = false;
+ mStartX = touchX;
+ mStartY = touchY;
+ mLastCodeX = touchX;
+ mLastCodeY = touchY;
+ mLastKeyTime = 0;
+ mCurrentKeyTime = 0;
+ mLastKey = NOT_A_KEY;
+ mCurrentKey = keyIndex;
+ mDownKey = keyIndex;
+ mDownTime = me.getEventTime();
+ mLastMoveTime = mDownTime;
+ checkMultiTap(eventTime, keyIndex);
+ mKeyboardActionListener.onPress(keyIndex != NOT_A_KEY ?
+ mKeys[keyIndex].codes[0] : 0);
+ if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) {
+ mRepeatKeyIndex = mCurrentKey;
+ Message msg = mHandler.obtainMessage(MSG_REPEAT);
+ mHandler.sendMessageDelayed(msg, REPEAT_START_DELAY);
+ repeatKey();
+ if (mAbortKey) {
+ mRepeatKeyIndex = NOT_A_KEY;
+ break;
+ }
+ }
+ if (mCurrentKey != NOT_A_KEY) {
+ Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me);
+ mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT);
+ }
+ showPreview(keyIndex);
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ boolean continueLongPress = false;
+ if (keyIndex != NOT_A_KEY) {
+ if (mCurrentKey == NOT_A_KEY) {
+ mCurrentKey = keyIndex;
+ mCurrentKeyTime = eventTime - mDownTime;
+ } else {
+ if (keyIndex == mCurrentKey) {
+ mCurrentKeyTime += eventTime - mLastMoveTime;
+ continueLongPress = true;
+ } else if (mRepeatKeyIndex == NOT_A_KEY) {
+ resetMultiTap();
+ mLastKey = mCurrentKey;
+ mLastCodeX = mLastX;
+ mLastCodeY = mLastY;
+ mLastKeyTime =
+ mCurrentKeyTime + eventTime - mLastMoveTime;
+ mCurrentKey = keyIndex;
+ mCurrentKeyTime = 0;
+ }
+ }
+ }
+ if (!continueLongPress) {
+ mHandler.removeMessages(MSG_LONGPRESS);
+ if (keyIndex != NOT_A_KEY) {
+ Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me);
+ mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT);
+ }
+ }
+ showPreview(mCurrentKey);
+ mLastMoveTime = eventTime;
+ break;
+
+ case MotionEvent.ACTION_UP:
+ removeMessages();
+ if (keyIndex == mCurrentKey) {
+ mCurrentKeyTime += eventTime - mLastMoveTime;
+ } else {
+ resetMultiTap();
+ mLastKey = mCurrentKey;
+ mLastKeyTime = mCurrentKeyTime + eventTime - mLastMoveTime;
+ mCurrentKey = keyIndex;
+ mCurrentKeyTime = 0;
+ }
+ if (mCurrentKeyTime < mLastKeyTime && mCurrentKeyTime < DEBOUNCE_TIME
+ && mLastKey != NOT_A_KEY) {
+ mCurrentKey = mLastKey;
+ touchX = mLastCodeX;
+ touchY = mLastCodeY;
+ }
+ showPreview(NOT_A_KEY);
+ Arrays.fill(mKeyIndices, NOT_A_KEY);
+ if (mRepeatKeyIndex == NOT_A_KEY && !mMiniKeyboardOnScreen && !mAbortKey) {
+ detectAndSendKey(mCurrentKey, touchX, touchY, eventTime);
+ }
+ invalidateKey(keyIndex);
+ mRepeatKeyIndex = NOT_A_KEY;
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ removeMessages();
+ dismissPopupKeyboard();
+ mAbortKey = true;
+ showPreview(NOT_A_KEY);
+ invalidateKey(mCurrentKey);
+ break;
+ }
+ mLastX = touchX;
+ mLastY = touchY;
+ return true;
+ }
+
+ private boolean repeatKey() {
+ Key key = mKeys[mRepeatKeyIndex];
+ detectAndSendKey(mCurrentKey, key.x, key.y, mLastTapTime);
+ return true;
+ }
+
+ protected void swipeRight() {
+ mKeyboardActionListener.swipeRight();
+ }
+
+ protected void swipeLeft() {
+ mKeyboardActionListener.swipeLeft();
+ }
+
+ protected void swipeUp() {
+ mKeyboardActionListener.swipeUp();
+ }
+
+ protected void swipeDown() {
+ mKeyboardActionListener.swipeDown();
+ }
+
+ public void closing() {
+ if (mPreviewPopup.isShowing()) {
+ mPreviewPopup.dismiss();
+ }
+ removeMessages();
+
+ dismissPopupKeyboard();
+ mBuffer = null;
+ mCanvas = null;
+ mMiniKeyboardCache.clear();
+ }
+
+ private void removeMessages() {
+ mHandler.removeMessages(MSG_REPEAT);
+ mHandler.removeMessages(MSG_LONGPRESS);
+ mHandler.removeMessages(MSG_SHOW_PREVIEW);
+ }
+
+ @Override
+ public void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ closing();
+ }
+
+ private void dismissPopupKeyboard() {
+ if (mPopupKeyboard.isShowing()) {
+ mPopupKeyboard.dismiss();
+ mMiniKeyboardOnScreen = false;
+ invalidateAllKeys();
+ }
+ }
+
+ public boolean handleBack() {
+ if (mPopupKeyboard.isShowing()) {
+ dismissPopupKeyboard();
+ return true;
+ }
+ return false;
+ }
+
+ private void resetMultiTap() {
+ mLastSentIndex = NOT_A_KEY;
+ mTapCount = 0;
+ mLastTapTime = -1;
+ mInMultiTap = false;
+ }
+
+ private void checkMultiTap(long eventTime, int keyIndex) {
+ if (keyIndex == NOT_A_KEY) return;
+ Key key = mKeys[keyIndex];
+ if (key.codes.length > 1) {
+ mInMultiTap = true;
+ if (eventTime < mLastTapTime + MULTITAP_INTERVAL
+ && keyIndex == mLastSentIndex) {
+ mTapCount = (mTapCount + 1) % key.codes.length;
+ return;
+ } else {
+ mTapCount = -1;
+ return;
+ }
+ }
+ if (eventTime > mLastTapTime + MULTITAP_INTERVAL || keyIndex != mLastSentIndex) {
+ resetMultiTap();
+ }
+ }
+
+ private static class SwipeTracker {
+
+ static final int NUM_PAST = 4;
+ static final int LONGEST_PAST_TIME = 200;
+
+ final float mPastX[] = new float[NUM_PAST];
+ final float mPastY[] = new float[NUM_PAST];
+ final long mPastTime[] = new long[NUM_PAST];
+
+ float mYVelocity;
+ float mXVelocity;
+
+ public void clear() {
+ mPastTime[0] = 0;
+ }
+
+ public void addMovement(MotionEvent ev) {
+ long time = ev.getEventTime();
+ final int N = ev.getHistorySize();
+ for (int i=0; i<N; i++) {
+ addPoint(ev.getHistoricalX(i), ev.getHistoricalY(i),
+ ev.getHistoricalEventTime(i));
+ }
+ addPoint(ev.getX(), ev.getY(), time);
+ }
+
+ private void addPoint(float x, float y, long time) {
+ int drop = -1;
+ int i;
+ final long[] pastTime = mPastTime;
+ for (i=0; i<NUM_PAST; i++) {
+ if (pastTime[i] == 0) {
+ break;
+ } else if (pastTime[i] < time-LONGEST_PAST_TIME) {
+ drop = i;
+ }
+ }
+ if (i == NUM_PAST && drop < 0) {
+ drop = 0;
+ }
+ if (drop == i) drop--;
+ final float[] pastX = mPastX;
+ final float[] pastY = mPastY;
+ if (drop >= 0) {
+ final int start = drop+1;
+ final int count = NUM_PAST-drop-1;
+ System.arraycopy(pastX, start, pastX, 0, count);
+ System.arraycopy(pastY, start, pastY, 0, count);
+ System.arraycopy(pastTime, start, pastTime, 0, count);
+ i -= (drop+1);
+ }
+ pastX[i] = x;
+ pastY[i] = y;
+ pastTime[i] = time;
+ i++;
+ if (i < NUM_PAST) {
+ pastTime[i] = 0;
+ }
+ }
+
+ public void computeCurrentVelocity(int units) {
+ computeCurrentVelocity(units, Float.MAX_VALUE);
+ }
+
+ public void computeCurrentVelocity(int units, float maxVelocity) {
+ final float[] pastX = mPastX;
+ final float[] pastY = mPastY;
+ final long[] pastTime = mPastTime;
+
+ final float oldestX = pastX[0];
+ final float oldestY = pastY[0];
+ final long oldestTime = pastTime[0];
+ float accumX = 0;
+ float accumY = 0;
+ int N=0;
+ while (N < NUM_PAST) {
+ if (pastTime[N] == 0) {
+ break;
+ }
+ N++;
+ }
+
+ for (int i=1; i < N; i++) {
+ final int dur = (int)(pastTime[i] - oldestTime);
+ if (dur == 0) continue;
+ float dist = pastX[i] - oldestX;
+ float vel = (dist/dur) * units;
+ if (accumX == 0) accumX = vel;
+ else accumX = (accumX + vel) * .5f;
+
+ dist = pastY[i] - oldestY;
+ vel = (dist/dur) * units;
+ if (accumY == 0) accumY = vel;
+ else accumY = (accumY + vel) * .5f;
+ }
+ mXVelocity = accumX < 0.0f ? Math.max(accumX, -maxVelocity)
+ : Math.min(accumX, maxVelocity);
+ mYVelocity = accumY < 0.0f ? Math.max(accumY, -maxVelocity)
+ : Math.min(accumY, maxVelocity);
+ }
+
+ public float getXVelocity() {
+ return mXVelocity;
+ }
+
+ public float getYVelocity() {
+ return mYVelocity;
+ }
+ }
+
+ /**
+ * Clear window info.
+ */
+ public void clearWindowInfo() {
+ mOffsetInWindow = null;
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/LetterConverter.java b/src/jp/co/omronsoft/openwnn/LetterConverter.java
index adb6226..15f0bfb 100644
--- a/src/jp/co/omronsoft/openwnn/LetterConverter.java
+++ b/src/jp/co/omronsoft/openwnn/LetterConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnn.java b/src/jp/co/omronsoft/openwnn/OpenWnn.java
index fdc643b..12ca226 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnn.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnn.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
package jp.co.omronsoft.openwnn;
+import jp.co.omronsoft.openwnn.JAJP.*;
import android.inputmethodservice.InputMethodService;
import android.view.WindowManager;
import android.content.Context;
@@ -32,10 +33,15 @@
import android.graphics.*;
import android.graphics.drawable.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import jp.co.omronsoft.openwnn.KeyAction;
+
/**
* The OpenWnn IME's base class.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class OpenWnn extends InputMethodService {
@@ -59,6 +65,21 @@
/** Flag for checking if the previous down key event is consumed by OpenWnn */
private boolean mConsumeDownEvent;
+ /** for isXLarge */
+ private static boolean mIsXLarge = false;
+
+ /** TextCandidatesViewManager */
+ protected TextCandidatesViewManager mTextCandidatesViewManager = null;
+
+ /** TextCandidates1LineViewManager */
+ protected TextCandidates1LineViewManager mTextCandidates1LineViewManager = null;
+
+ /** The instance of current IME */
+ private static OpenWnn mCurrentIme;
+
+ /** KeyAction list */
+ private List<KeyAction> KeyActionList = new ArrayList<KeyAction>();
+
/**
* Constructor
*/
@@ -71,10 +92,22 @@
**********************************************************************/
/** @see android.inputmethodservice.InputMethodService#onCreate */
@Override public void onCreate() {
+ updateXLargeMode();
super.onCreate();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
+ mCurrentIme = this;
+
+
+ mTextCandidatesViewManager = new TextCandidatesViewManager(-1);
+ if (isXLarge()) {
+ mTextCandidates1LineViewManager =
+ new TextCandidates1LineViewManager(OpenWnnEngineJAJP.LIMIT_OF_CANDIDATES_1LINE);
+ mCandidatesViewManager = mTextCandidates1LineViewManager;
+ } else {
+ mCandidatesViewManager = mTextCandidatesViewManager;
+ }
if (mConverter != null) { mConverter.init(); }
if (mComposingText != null) { mComposingText.clear(); }
@@ -84,6 +117,14 @@
@Override public View onCreateCandidatesView() {
if (mCandidatesViewManager != null) {
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
+ if (isXLarge()) {
+ mCandidatesViewManager = mTextCandidates1LineViewManager;
+ mTextCandidatesViewManager.initView(this,
+ wm.getDefaultDisplay().getWidth(),
+ wm.getDefaultDisplay().getHeight());
+ } else {
+ mCandidatesViewManager = mTextCandidatesViewManager;
+ }
View view = mCandidatesViewManager.initView(this,
wm.getDefaultDisplay().getWidth(),
wm.getDefaultDisplay().getHeight());
@@ -112,13 +153,28 @@
/** @see android.inputmethodservice.InputMethodService#onDestroy */
@Override public void onDestroy() {
super.onDestroy();
-
+ mCurrentIme = null;
close();
}
/** @see android.inputmethodservice.InputMethodService#onKeyDown */
@Override public boolean onKeyDown(int keyCode, KeyEvent event) {
mConsumeDownEvent = onEvent(new OpenWnnEvent(event));
+
+ KeyAction Keycodeinfo = new KeyAction();
+ Keycodeinfo.mConsumeDownEvent = mConsumeDownEvent;
+ Keycodeinfo.mKeyCode = keyCode;
+
+ int cnt = KeyActionList.size();
+ if (cnt != 0) {
+ for (int i = 0; i < cnt; i++) {
+ if (KeyActionList.get(i).mKeyCode == keyCode) {
+ KeyActionList.remove(i);
+ break;
+ }
+ }
+ }
+ KeyActionList.add(Keycodeinfo);
if (!mConsumeDownEvent) {
return super.onKeyDown(keyCode, event);
}
@@ -128,13 +184,38 @@
/** @see android.inputmethodservice.InputMethodService#onKeyUp */
@Override public boolean onKeyUp(int keyCode, KeyEvent event) {
boolean ret = mConsumeDownEvent;
+ int cnt = KeyActionList.size();
+ for (int i = 0; i < cnt; i++) {
+ KeyAction Keycodeinfo = KeyActionList.get(i);
+ if (Keycodeinfo.mKeyCode == keyCode) {
+ ret = Keycodeinfo.mConsumeDownEvent;
+ KeyActionList.remove(i);
+ break;
+ }
+ }
if (!ret) {
ret = super.onKeyUp(keyCode, event);
}else{
- onEvent(new OpenWnnEvent(event));
+ ret = onEvent(new OpenWnnEvent(event));
}
return ret;
}
+
+ /**
+ * Called when the key long press event occurred.
+ *
+ * @see android.inputmethodservice.InputMethodService#onKeyLongPress
+ */
+ @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) {
+ if (mCurrentIme == null) {
+ Log.e("iWnn", "OpenWnn::onKeyLongPress() Unprocessing onCreate() ");
+ return super.onKeyLongPress(keyCode, event);
+ }
+
+ OpenWnnEvent wnnEvent = new OpenWnnEvent(event);
+ wnnEvent.code = OpenWnnEvent.KEYLONGPRESS;
+ return onEvent(wnnEvent);
+ }
/** @see android.inputmethodservice.InputMethodService#onStartInput */
@Override public void onStartInput(EditorInfo attribute, boolean restarting) {
@@ -247,4 +328,99 @@
protected void close() {
if (mConverter != null) { mConverter.close(); }
}
+
+ /**
+ * Whether the x large mode.
+ *
+ * @return {@code true} if x large; {@code false} if not x large.
+ */
+ public static boolean isXLarge() {
+ return mIsXLarge;
+ }
+
+ /**
+ * Update the x large mode.
+ */
+ public void updateXLargeMode() {
+ mIsXLarge = ((getResources().getConfiguration().screenLayout &
+ Configuration.SCREENLAYOUT_SIZE_MASK)
+ == Configuration.SCREENLAYOUT_SIZE_XLARGE);
+ }
+
+ /**
+ * Get the instance of current IME.
+ *
+ * @return the instance of current IME, See {@link jp.co.omronsoft.openwnn.OpenWnn}
+ */
+ public static OpenWnn getCurrentIme() {
+ return mCurrentIme;
+ }
+
+ /**
+ * Check through key code in IME.
+ *
+ * @param keyCode check key code.
+ * @return {@code true} if through key code; {@code false} otherwise.
+ */
+ protected boolean isThroughKeyCode(int keyCode) {
+ boolean result;
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_CALL:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
+ case KeyEvent.KEYCODE_MEDIA_NEXT:
+ case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+ case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+ case KeyEvent.KEYCODE_MEDIA_REWIND:
+ case KeyEvent.KEYCODE_MEDIA_STOP:
+ case KeyEvent.KEYCODE_MUTE:
+ case KeyEvent.KEYCODE_HEADSETHOOK:
+ case KeyEvent.KEYCODE_VOLUME_MUTE:
+ case KeyEvent.KEYCODE_MEDIA_CLOSE:
+ case KeyEvent.KEYCODE_MEDIA_EJECT:
+ case KeyEvent.KEYCODE_MEDIA_PAUSE:
+ case KeyEvent.KEYCODE_MEDIA_PLAY:
+ case KeyEvent.KEYCODE_MEDIA_RECORD:
+ case KeyEvent.KEYCODE_MANNER_MODE:
+ result = true;
+ break;
+
+ default:
+ result = false;
+ break;
+
+ }
+ return result;
+ }
+
+ /**
+ * Check ten-key code.
+ *
+ * @param keyCode check key code.
+ * @return {@code true} if ten-key code; {@code false} not ten-key code.
+ */
+ protected boolean isTenKeyCode(int keyCode) {
+ boolean result = false;
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_NUMPAD_0:
+ case KeyEvent.KEYCODE_NUMPAD_1:
+ case KeyEvent.KEYCODE_NUMPAD_2:
+ case KeyEvent.KEYCODE_NUMPAD_3:
+ case KeyEvent.KEYCODE_NUMPAD_4:
+ case KeyEvent.KEYCODE_NUMPAD_5:
+ case KeyEvent.KEYCODE_NUMPAD_6:
+ case KeyEvent.KEYCODE_NUMPAD_7:
+ case KeyEvent.KEYCODE_NUMPAD_8:
+ case KeyEvent.KEYCODE_NUMPAD_9:
+ case KeyEvent.KEYCODE_NUMPAD_DOT:
+ result = true;
+ break;
+
+ default:
+ break;
+
+ }
+ return result;
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnControlPanelJAJP.java b/src/jp/co/omronsoft/openwnn/OpenWnnControlPanelJAJP.java
index 9a4c205..9fe9263 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnControlPanelJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnControlPanelJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
index e5b7fe0..4b8ac2c 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -137,6 +137,8 @@
protected SQLiteDatabase mDbDic = null;
/** The search cursor of the writable dictionary */
protected SQLiteCursor mDbCursor = null;
+ /** The writable dictionary object Access helper */
+ protected OpenWnnSQLiteOpenHelper mDbOpenHelper = null;
/** The number of queried items */
protected int mCountCursor = 0;
/** The type of the search cursor object */
@@ -322,6 +324,7 @@
/* The SQLiteDataBase object must close() before releasing. */
mDbDic.close();
mDbDic = null;
+ mDbOpenHelper = null;
}
}
/**
@@ -351,7 +354,8 @@
public void setInUseState( boolean flag ) {
if( flag ) {
if( mDbDic == null ) {
- mDbDic = SQLiteDatabase.openOrCreateDatabase( mDicFilePath, null );
+ mDbOpenHelper = new OpenWnnSQLiteOpenHelper(OpenWnn.getCurrentIme(), mDicFilePath);
+ mDbDic = mDbOpenHelper.getWritableDatabase();
}
} else {
freeDatabase();
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImplJni.java b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImplJni.java
index 34d533f..4d49a8b 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImplJni.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImplJni.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnEN.java b/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
index 6bcce4f..0b9ae15 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -167,7 +167,13 @@
mComposingText = new ComposingText();
mCandidatesViewManager = new TextCandidatesViewManager(-1);
mInputViewManager = new DefaultSoftKeyboardEN();
- mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+
+ if (OpenWnn.getCurrentIme() != null) {
+ if (mConverterEN == null) {
+ mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+ }
+ }
+
mConverter = mConverterEN;
mSymbolList = null;
@@ -281,6 +287,10 @@
super.onCreate();
mWordSeparators = getResources().getString(R.string.en_word_separators);
+ if (mConverterEN == null) {
+ mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+ }
+
if (mSymbolList == null) {
mSymbolList = new SymbolList(this, SymbolList.LANG_EN);
}
@@ -327,10 +337,15 @@
fitInputType(pref, attribute);
((DefaultSoftKeyboard) mInputViewManager).resetCurrentKeyboard();
+
+ if (OpenWnn.isXLarge()) {
+ mTextCandidatesViewManager.setPreferences(pref);
+ }
}
/** @see jp.co.omronsoft.openwnn.OpenWnn#hideWindow */
@Override public void hideWindow() {
+ ((BaseInputView)((DefaultSoftKeyboard) mInputViewManager).getCurrentView()).closeDialog();
mComposingText.clear();
mInputViewManager.onUpdateState(this);
mHandler.removeMessages(MSG_START_TUTORIAL);
@@ -521,7 +536,7 @@
ret = processKeyEvent(ev.keyEvent);
if (!ret) {
int code = keyEvent.getKeyCode();
- if (code == KeyEvent.KEYCODE_ENTER) {
+ if (code == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER) {
sendKeyChar('\n');
} else {
mInputConnection.sendKeyEvent(keyEvent);
@@ -705,6 +720,7 @@
return true;
case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
case KeyEvent.KEYCODE_DPAD_CENTER:
commitText(1);
mComposingText.clear();
@@ -715,7 +731,7 @@
return true;
default:
- break;
+ return !isThroughKeyCode(key);
}
} else {
/* if there is no composing string. */
@@ -732,6 +748,7 @@
switch (key) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
if (mEnableAutoHideKeyboard) {
mInputViewManager.closing();
requestHideSelf(0);
@@ -823,9 +840,9 @@
mDisplayText.setSpan(SPAN_REMAIN_BGCOLOR_HL, cursor, disp.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mDisplayText.setSpan(SPAN_TEXTCOLOR, 0, disp.length(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
-
+
disp.setSpan(SPAN_UNDERLINE, 0, disp.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java b/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
index 06260e1..030fa57 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
/**
* The definition class of event message used by OpenWnn framework.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class OpenWnnEvent {
/** Offset value for private events */
@@ -127,6 +127,11 @@
public static final int CHANGE_MODE = 0xF000000F;
/**
+ * Key long press event.
+ */
+ public static final int KEYLONGPRESS = 0xF0000024;
+
+ /**
* The definition class of engine's mode.
*/
public static final class Mode {
@@ -224,6 +229,36 @@
*/
public static final int TOUCH_OTHER_KEY = 0xF0000020;
+ /**
+ * Start focus candidate.
+ */
+ public static final int FOCUS_CANDIDATE_START = 0xF0002000;
+
+ /**
+ * End focus candidate.
+ */
+ public static final int FOCUS_CANDIDATE_END = 0xF0002001;
+
+ /**
+ * Scroll up for symbol keyboard.
+ */
+ public static final int CANDIDATE_VIEW_SCROLL_UP = 0xF0001000;
+
+ /**
+ * Scroll down for symbol keyboard.
+ */
+ public static final int CANDIDATE_VIEW_SCROLL_DOWN = 0xF0001001;
+
+ /**
+ * Scroll full up for symbol keyboard.
+ */
+ public static final int CANDIDATE_VIEW_SCROLL_FULL_UP = 0xF0001002;
+
+ /**
+ * Scroll full down for symbol keyboard.
+ */
+ public static final int CANDIDATE_VIEW_SCROLL_FULL_DOWN = 0xF0001003;
+
/** Event code */
public int code = UNDEFINED;
/** Detail mode of the event */
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java b/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
index 880fd11..cbcc074 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
import jp.co.omronsoft.openwnn.JAJP.*;
import android.content.SharedPreferences;
import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.os.Handler;
import android.os.Message;
@@ -34,18 +35,23 @@
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
import android.view.MotionEvent;
import android.view.View;
import android.view.KeyCharacterMap;
import android.text.method.MetaKeyKeyListener;
+import jp.co.omronsoft.openwnn.BaseInputView;
+import jp.co.omronsoft.openwnn.OpenWnnControlPanelJAJP;
+
+import java.util.HashMap;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
* The OpenWnn Japanese IME class
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
public class OpenWnnJAJP extends OpenWnn {
/**
@@ -70,7 +76,9 @@
* Mode of the convert engine (Symbol list).
* Use with {@code OpenWnn.CHANGE_MODE} event.
*/
- public static final int ENGINE_MODE_SYMBOL = 104;
+ public static final int ENGINE_MODE_SYMBOL_NONE = 1040;
+ public static final int ENGINE_MODE_SYMBOL = 1041;
+ public static final int ENGINE_MODE_SYMBOL_KAO_MOJI = 1042;
/**
* Mode of the convert engine (Keyboard type is QWERTY).
@@ -143,6 +151,24 @@
/** Delay time(msec.) to start prediction after key input when the candidates view is shown. */
private static final int PREDICTION_DELAY_MS_SHOWING_CANDIDATE = 200;
+ /** H/W 12Keyboard keycode replace table */
+ private static final HashMap<Integer, Integer> HW12KEYBOARD_KEYCODE_REPLACE_TABLE
+ = new HashMap<Integer, Integer>() {{
+ put(KeyEvent.KEYCODE_0, DefaultSoftKeyboard.KEYCODE_JP12_0);
+ put(KeyEvent.KEYCODE_1, DefaultSoftKeyboard.KEYCODE_JP12_1);
+ put(KeyEvent.KEYCODE_2, DefaultSoftKeyboard.KEYCODE_JP12_2);
+ put(KeyEvent.KEYCODE_3, DefaultSoftKeyboard.KEYCODE_JP12_3);
+ put(KeyEvent.KEYCODE_4, DefaultSoftKeyboard.KEYCODE_JP12_4);
+ put(KeyEvent.KEYCODE_5, DefaultSoftKeyboard.KEYCODE_JP12_5);
+ put(KeyEvent.KEYCODE_6, DefaultSoftKeyboard.KEYCODE_JP12_6);
+ put(KeyEvent.KEYCODE_7, DefaultSoftKeyboard.KEYCODE_JP12_7);
+ put(KeyEvent.KEYCODE_8, DefaultSoftKeyboard.KEYCODE_JP12_8);
+ put(KeyEvent.KEYCODE_9, DefaultSoftKeyboard.KEYCODE_JP12_9);
+ put(KeyEvent.KEYCODE_POUND, DefaultSoftKeyboard.KEYCODE_JP12_SHARP);
+ put(KeyEvent.KEYCODE_STAR, DefaultSoftKeyboard.KEYCODE_JP12_ASTER);
+ put(KeyEvent.KEYCODE_CALL, DefaultSoftKeyboard.KEYCODE_JP12_REVERSE);
+ }};
+
/** Convert engine's state */
private class EngineState {
@@ -284,11 +310,11 @@
/** Symbol lists to display when the symbol key is pressed */
private static final String[] SYMBOL_LISTS = {
- SymbolList.SYMBOL_JAPANESE_FACE, SymbolList.SYMBOL_JAPANESE, SymbolList.SYMBOL_ENGLISH
+ SymbolList.SYMBOL_JAPANESE, SymbolList.SYMBOL_JAPANESE_FACE
};
/** Current symbol list */
- private int mCurrentSymbol = 0;
+ private int mCurrentSymbol = -1;
/** Romaji-to-Kana converter (HIRAGANA) */
private Romkan mPreConverterHiragana;
@@ -395,6 +421,9 @@
/** Whether text selection has started */
private boolean mHasStartedTextSelection = true;
+ /** Whether the H/W 12keyboard is active or not. */
+ private boolean mEnableHardware12Keyboard = false;
+
/** {@code Handler} for drawing candidates/displaying tutorial */
Handler mHandler = new Handler() {
@Override
@@ -438,8 +467,16 @@
mComposingText = new ComposingText();
mCandidatesViewManager = new TextCandidatesViewManager(-1);
mInputViewManager = new DefaultSoftKeyboardJAJP();
- mConverter = mConverterJAJP = new OpenWnnEngineJAJP("/data/data/jp.co.omronsoft.openwnn/writableJAJP.dic");
- mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+
+ if (OpenWnn.getCurrentIme() != null) {
+ if (mConverter == null || mConverterJAJP == null) {
+ mConverter = mConverterJAJP = new OpenWnnEngineJAJP("/data/data/jp.co.omronsoft.openwnn/writableJAJP.dic");
+ }
+ if (mConverterEN == null) {
+ mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+ }
+ }
+
mPreConverter = mPreConverterHiragana = new Romkan();
mPreConverterFullKatakana = new RomkanFullKatakana();
mPreConverterHalfKatakana = new RomkanHalfKatakana();
@@ -463,8 +500,16 @@
/** @see jp.co.omronsoft.openwnn.OpenWnn#onCreate */
@Override public void onCreate() {
+ updateXLargeMode();
super.onCreate();
+ if (mConverter == null || mConverterJAJP == null) {
+ mConverter = mConverterJAJP = new OpenWnnEngineJAJP("/data/data/jp.co.omronsoft.openwnn/writableJAJP.dic");
+ }
+ if (mConverterEN == null) {
+ mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
+ }
+
String delimiter = Pattern.quote(getResources().getString(R.string.en_word_separators));
mEnglishAutoCommitDelimiter = Pattern.compile(".*[" + delimiter + "]$");
if (mConverterSymbolEngineBack == null) {
@@ -476,14 +521,20 @@
@Override public View onCreateInputView() {
int hiddenState = getResources().getConfiguration().hardKeyboardHidden;
boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
+ boolean type12Key
+ = (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_12KEY);
((DefaultSoftKeyboardJAJP) mInputViewManager).setHardKeyboardHidden(hidden);
+ ((DefaultSoftKeyboard) mInputViewManager).setHardware12Keyboard(type12Key);
+ mTextCandidatesViewManager.setHardKeyboardHidden(hidden);
mEnableTutorial = hidden;
+ mEnableHardware12Keyboard = type12Key;
return super.onCreateInputView();
}
/** @see jp.co.omronsoft.openwnn.OpenWnn#onStartInputView */
@Override public void onStartInputView(EditorInfo attribute, boolean restarting) {
+ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
if (restarting) {
super.onStartInputView(attribute, restarting);
} else {
@@ -498,6 +549,10 @@
super.onStartInputView(attribute, restarting);
+ if (OpenWnn.isXLarge()) {
+ mTextCandidatesViewManager.setPreferences(pref);
+ }
+
mCandidatesViewManager.clearCandidates();
mStatus = STATUS_INIT;
mExactMatchMode = false;
@@ -507,13 +562,15 @@
mHardAlt = 0;
updateMetaKeyStateDisplay();
}
- /* load preferences */
- SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
/* initialize the engine's state */
fitInputType(pref, attribute);
- ((TextCandidatesViewManager)mCandidatesViewManager).setAutoHide(true);
+ if (OpenWnn.isXLarge()) {
+ mTextCandidates1LineViewManager.setAutoHide(true);
+ } else {
+ ((TextCandidatesViewManager)mCandidatesViewManager).setAutoHide(true);
+ }
if (isEnableL2Converter()) {
breakSequence();
@@ -522,6 +579,12 @@
/** @see jp.co.omronsoft.openwnn.OpenWnn#hideWindow */
@Override public void hideWindow() {
+ mCandidatesViewManager.setCandidateMsgRemove();
+
+ BaseInputView baseInputView = ((BaseInputView)((DefaultSoftKeyboard) mInputViewManager).getCurrentView());
+ if (baseInputView != null) {
+ baseInputView.closeDialog();
+ }
mComposingText.clear();
mInputViewManager.onUpdateState(this);
clearCommitInfo();
@@ -532,6 +595,12 @@
mTutorial = null;
}
+ if (OpenWnn.isXLarge()) {
+ mTextCandidates1LineViewManager.closeDialog();
+ } else {
+ mTextCandidatesViewManager.closeDialog();
+ }
+
super.hideWindow();
}
@@ -556,6 +625,10 @@
return;
}
+ if (mEngineState.isSymbolList()) {
+ return;
+ }
+
boolean isNotComposing = ((candidatesStart < 0) && (candidatesEnd < 0));
if ((mComposingText.size(ComposingText.LAYER1) != 0)
&& !isNotComposing) {
@@ -604,8 +677,12 @@
/* Hardware keyboard */
int hiddenState = newConfig.hardKeyboardHidden;
boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
+ boolean type12Key = (newConfig.keyboard == Configuration.KEYBOARD_12KEY);
((DefaultSoftKeyboardJAJP) mInputViewManager).setHardKeyboardHidden(hidden);
+ ((DefaultSoftKeyboard) mInputViewManager).setHardware12Keyboard(type12Key);
+ mTextCandidatesViewManager.setHardKeyboardHidden(hidden);
mEnableTutorial = hidden;
+ mEnableHardware12Keyboard = type12Key;
}
} catch (Exception ex) {
/* do nothing if an error occurs. */
@@ -624,6 +701,9 @@
onKeyUpEvent(ev.keyEvent);
return true;
+ case OpenWnnEvent.KEYLONGPRESS:
+ return onKeyLongPressEvent(ev.keyEvent);
+
case OpenWnnEvent.INITIALIZE_LEARNING_DICTIONARY:
mConverterEN.initializeDictionary(WnnEngine.DICTIONARY_TYPE_LEARN);
mConverterJAJP.initializeDictionary(WnnEngine.DICTIONARY_TYPE_LEARN);
@@ -689,6 +769,37 @@
mStatus |= STATUS_INPUT_EDIT;
return true;
+ case OpenWnnEvent.CANDIDATE_VIEW_SCROLL_UP:
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ ((TextCandidatesViewManager) mCandidatesViewManager).setScrollUp();
+ }
+ return true;
+
+ case OpenWnnEvent.CANDIDATE_VIEW_SCROLL_DOWN:
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ ((TextCandidatesViewManager) mCandidatesViewManager).setScrollDown();
+ }
+ return true;
+
+ case OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_UP:
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ ((TextCandidatesViewManager) mCandidatesViewManager).setScrollFullUp();
+ }
+ return true;
+
+ case OpenWnnEvent.CANDIDATE_VIEW_SCROLL_FULL_DOWN:
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ ((TextCandidatesViewManager) mCandidatesViewManager).setScrollFullDown();
+ }
+ return true;
+
+ case OpenWnnEvent.FOCUS_CANDIDATE_START:
+ return true;
+
+ case OpenWnnEvent.FOCUS_CANDIDATE_END:
+ mInputViewManager.onUpdateState(this);
+ return true;
+
default:
break;
}
@@ -723,6 +834,101 @@
return false;
}
+ if (mEngineState.isSymbolList()) {
+ if (keyEvent != null && keyEvent.isPrintingKey() && isTenKeyCode(keyCode) && !keyEvent.isNumLockOn()) {
+ return false;
+ }
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_DEL:
+ return false;
+
+ case KeyEvent.KEYCODE_BACK:
+ initializeScreen();
+ return true;
+
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.selectFocusCandidate();
+ return true;
+ }
+ return false;
+
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ processLeftKeyEvent();
+ return true;
+ }
+ return false;
+
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ processRightKeyEvent();
+ return true;
+ }
+ return false;
+
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ processDownKeyEvent();
+ return true;
+
+ case KeyEvent.KEYCODE_DPAD_UP:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ processUpKeyEvent();
+ return true;
+ }
+ return false;
+
+ case KeyEvent.KEYCODE_SPACE:
+ if (keyEvent != null) {
+ if (keyEvent.isShiftPressed()) {
+ onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_UP));
+ } else if (keyEvent.isAltPressed()) {
+ if (keyEvent.getRepeatCount() == 0) {
+ switchSymbolList();
+ }
+ } else {
+ onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_DOWN));
+ }
+ }
+ return true;
+
+ case KeyEvent.KEYCODE_SYM:
+ switchSymbolList();
+ return true;
+
+ case KeyEvent.KEYCODE_PAGE_UP:
+ onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_UP));
+ return true;
+
+ case KeyEvent.KEYCODE_PAGE_DOWN:
+ onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_SCROLL_DOWN));
+ return true;
+
+ case KeyEvent.KEYCODE_PICTSYMBOLS:
+ if (keyEvent != null) {
+ if (keyEvent.getRepeatCount() == 0) {
+ switchSymbolList();
+ }
+ }
+ return true;
+
+ default:
+ }
+
+ if ((ev.code == OpenWnnEvent.INPUT_KEY) &&
+ (keyCode != KeyEvent.KEYCODE_SEARCH) &&
+ (keyCode != KeyEvent.KEYCODE_ALT_LEFT) &&
+ (keyCode != KeyEvent.KEYCODE_ALT_RIGHT) &&
+ (keyCode != KeyEvent.KEYCODE_SHIFT_LEFT) &&
+ (keyCode != KeyEvent.KEYCODE_SHIFT_RIGHT)) {
+ state = new EngineState();
+ state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
+ updateEngineState(state);
+ }
+ }
+
if (!((ev.code == OpenWnnEvent.COMMIT_COMPOSING_TEXT)
|| ((keyEvent != null)
&& ((keyCode == KeyEvent.KEYCODE_SHIFT_LEFT)
@@ -751,13 +957,21 @@
updateEngineState(state);
}
+ if ((ev.code == OpenWnnEvent.INPUT_KEY) && processHardware12Keyboard(keyEvent)) {
+ return true;
+ }
+
if (ev.code == OpenWnnEvent.LIST_CANDIDATES_FULL) {
mStatus |= STATUS_CANDIDATE_FULL;
mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_FULL);
+ if (!mEngineState.isSymbolList()) {
+ mInputViewManager.hideInputView();
+ }
return true;
} else if (ev.code == OpenWnnEvent.LIST_CANDIDATES_NORMAL) {
mStatus &= ~STATUS_CANDIDATE_FULL;
mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ mInputViewManager.showInputView();
return true;
}
@@ -838,7 +1052,7 @@
}
mAltPressing = true;
updateMetaKeyStateDisplay();
- return true;
+ return false;
case KeyEvent.KEYCODE_SHIFT_LEFT:
case KeyEvent.KEYCODE_SHIFT_RIGHT:
@@ -847,7 +1061,7 @@
}
mShiftPressing = true;
updateMetaKeyStateDisplay();
- return true;
+ return false;
}
/* handle other key event */
@@ -885,6 +1099,17 @@
break;
case OpenWnnEvent.CONVERT:
+ if (mEngineState.isRenbun()) {
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ if (!mCandidatesViewManager.isFocusCandidate()) {
+ processDownKeyEvent();
+ }
+ processRightKeyEvent();
+ } else {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT);
+ }
+ break;
+ }
startConvert(EngineState.CONVERT_TYPE_RENBUN);
break;
@@ -942,6 +1167,20 @@
/* keys which produce a glyph */
if (ev.isPrintingKey()) {
+ if (isTenKeyCode(key) && !ev.isNumLockOn()) {
+ return false;
+ }
+ if (ev.isCtrlPressed()){
+ if (key == KeyEvent.KEYCODE_A || key == KeyEvent.KEYCODE_F || key == KeyEvent.KEYCODE_C ||
+ key == KeyEvent.KEYCODE_V || key == KeyEvent.KEYCODE_X || key == KeyEvent.KEYCODE_Z) {
+ if (mComposingText.size(ComposingText.LAYER1) < 1) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
/* do nothing if the character is not able to display or the character is dead key */
if ((mHardShift > 0 && mHardAlt > 0) ||
(ev.isAltPressed() && ev.isShiftPressed())) {
@@ -1009,7 +1248,7 @@
updateMetaKeyStateDisplay();
}
}
-
+
if (str == null) {
return true;
}
@@ -1066,6 +1305,7 @@
if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
mStatus &= ~STATUS_CANDIDATE_FULL;
mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ mInputViewManager.showInputView();
} else {
if (!mEngineState.isConvertState()) {
initializeScreen();
@@ -1102,8 +1342,27 @@
}
return true;
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ processDownKeyEvent();
+ return true;
+
+ case KeyEvent.KEYCODE_DPAD_UP:
+ if (OpenWnn.isXLarge()) {
+ updateViewStatusForPrediction(true, true);
+ } else {
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ processUpKeyEvent();
+ }
+ }
+ return true;
+
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.selectFocusCandidate();
+ return true;
+ }
if (!isEnglishPrediction()) {
int cursor = mComposingText.getCursor(ComposingText.LAYER1);
if (cursor < 1) {
@@ -1130,7 +1389,7 @@
return false;
default:
- return true;
+ return !isThroughKeyCode(key);
}
} else {
/* if there is no composing string. */
@@ -1138,6 +1397,10 @@
/* displaying relational prediction candidates */
switch (key) {
case KeyEvent.KEYCODE_DPAD_LEFT:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_LEFT);
+ return true;
+ }
if (isEnableL2Converter()) {
/* initialize the converter */
mConverter.init();
@@ -1147,6 +1410,10 @@
return false;
case KeyEvent.KEYCODE_DPAD_RIGHT:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT);
+ return true;
+ }
if (isEnableL2Converter()) {
/* initialize the converter */
mConverter.init();
@@ -1155,6 +1422,26 @@
updateViewStatusForPrediction(true, true);
return false;
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ processDownKeyEvent();
+ return true;
+
+ case KeyEvent.KEYCODE_DPAD_UP:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ processUpKeyEvent();
+ return true;
+ }
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.selectFocusCandidate();
+ return true;
+ }
+ break;
+
default:
return processKeyEventNoInputCandidateShown(ev);
}
@@ -1192,14 +1479,27 @@
mHardAlt = 0;
mHardShift = 0;
updateMetaKeyStateDisplay();
+
+ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
if (mEngineState.isEnglish()) {
/* English mode to Japanese mode */
((DefaultSoftKeyboardJAJP) mInputViewManager).changeKeyMode(DefaultSoftKeyboard.KEYMODE_JA_FULL_HIRAGANA);
mConverter = mConverterJAJP;
+
+ mEnableLearning = pref.getBoolean("opt_enable_learning_ja", true);
+ mEnablePrediction = pref.getBoolean("opt_prediction_ja", true);
} else {
/* Japanese mode to English mode */
((DefaultSoftKeyboardJAJP) mInputViewManager).changeKeyMode(DefaultSoftKeyboard.KEYMODE_JA_HALF_ALPHABET);
mConverter = mConverterEN;
+
+ mEnableLearning = pref.getBoolean("opt_enable_learning_en", true);
+ mEnablePrediction = pref.getBoolean("opt_prediction_en", false);
+ if (OpenWnn.isXLarge()) {
+ mEnableSpellCorrection = pref.getBoolean("opt_spell_correction_en", false);
+ } else {
+ mEnableSpellCorrection = pref.getBoolean("opt_spell_correction_en", true);
+ }
}
mCandidatesViewManager.clearCandidates();
@@ -1225,7 +1525,15 @@
checkCommitInfo();
}
mEnableAutoDeleteSpace = false;
-
+ } else if (mEngineState.isRenbun()) {
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ if (!mCandidatesViewManager.isFocusCandidate()) {
+ processDownKeyEvent();
+ }
+ processRightKeyEvent();
+ } else {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT);
+ }
} else {
/* start consecutive clause conversion if Japanese mode */
if (mComposingText.size(0) == 0) {
@@ -1312,6 +1620,11 @@
* Handle a left key event.
*/
private void processLeftKeyEvent() {
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_LEFT);
+ return;
+ }
+
if (mEngineState.isConvertState()) {
if (mEngineState.isEisuKana()) {
mExactMatchMode = true;
@@ -1339,6 +1652,11 @@
* Handle a right key event.
*/
private void processRightKeyEvent() {
+ if (mCandidatesViewManager.isFocusCandidate()) {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT);
+ return;
+ }
+
int layer = mTargetLayer;
ComposingText composingText = mComposingText;
if (mExactMatchMode || (mEngineState.isConvertState())) {
@@ -1369,6 +1687,20 @@
}
/**
+ * Handle a down key event.
+ */
+ private void processDownKeyEvent() {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN);
+ }
+
+ /**
+ * Handle a up key event.
+ */
+ private void processUpKeyEvent() {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_UP);
+ }
+
+ /**
* Handle a key event which is not right or left key when the
* composing text is empty and some candidates are shown.
*
@@ -1377,12 +1709,14 @@
*/
boolean processKeyEventNoInputCandidateShown(KeyEvent ev) {
boolean ret = true;
+ int key = ev.getKeyCode();
- switch (ev.getKeyCode()) {
+ switch (key) {
case KeyEvent.KEYCODE_DEL:
ret = true;
break;
case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_NUMPAD_ENTER:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_MENU:
@@ -1402,6 +1736,7 @@
if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
mStatus &= ~STATUS_CANDIDATE_FULL;
mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ mInputViewManager.showInputView();
return true;
} else {
ret = true;
@@ -1409,7 +1744,7 @@
break;
default:
- return true;
+ return !isThroughKeyCode(key);
}
if (mConverter != null) {
@@ -1749,6 +2084,10 @@
}
return;
+ case ENGINE_MODE_SYMBOL_KAO_MOJI:
+ changeSymbolEngineState(state, ENGINE_MODE_SYMBOL_KAO_MOJI);
+ return;
+
default:
break;
}
@@ -1757,6 +2096,7 @@
state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
updateEngineState(state);
+ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
state = new EngineState();
switch (mode) {
case OpenWnnEvent.Mode.DIRECT:
@@ -1771,6 +2111,14 @@
updateEngineState(state);
mConverter = mConverterEN;
mPreConverter = null;
+
+ mEnableLearning = pref.getBoolean("opt_enable_learning_en", true);
+ mEnablePrediction = pref.getBoolean("opt_prediction_en", false);
+ if (OpenWnn.isXLarge()) {
+ mEnableSpellCorrection = pref.getBoolean("opt_spell_correction_en", false);
+ } else {
+ mEnableSpellCorrection = pref.getBoolean("opt_spell_correction_en", true);
+ }
break;
case OpenWnnEvent.Mode.NO_LV2_CONV:
@@ -1794,6 +2142,9 @@
updateEngineState(state);
mConverter = mConverterJAJP;
mPreConverter = mPreConverterHiragana;
+
+ mEnableLearning = pref.getBoolean("opt_enable_learning_ja", true);
+ mEnablePrediction = pref.getBoolean("opt_prediction_ja", true);
break;
}
@@ -1860,10 +2211,19 @@
case EngineState.TEMPORARY_DICTIONARY_MODE_NONE:
if (myState.temporaryMode != EngineState.TEMPORARY_DICTIONARY_MODE_NONE) {
setDictionary(mPrevDictionarySet);
- mCurrentSymbol = 0;
+ mCurrentSymbol = -1;
mPreConverter = mPreConverterBack;
mConverter = mConverterBack;
mDisableAutoCommitEnglishMask &= ~AUTO_COMMIT_ENGLISH_SYMBOL;
+ ((DefaultSoftKeyboard)mInputViewManager).setNormalKeyboard();
+ mTextCandidatesViewManager.setSymbolMode(false, ENGINE_MODE_SYMBOL_NONE);
+ if (OpenWnn.isXLarge()) {
+ mCandidatesViewManager = mTextCandidates1LineViewManager;
+ View view = mTextCandidates1LineViewManager.getCurrentView();
+ if (view != null) {
+ setCandidatesView(view);
+ }
+ }
}
break;
@@ -1878,7 +2238,25 @@
}
mConverter = mConverterSymbolEngineBack;
mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_SYMBOL;
+ int engineModeSymbol = 0;
+
+ if (SYMBOL_LISTS[mCurrentSymbol] == SymbolList.SYMBOL_JAPANESE) {
+ engineModeSymbol = ENGINE_MODE_SYMBOL;
+ } else if (SYMBOL_LISTS[mCurrentSymbol] == SymbolList.SYMBOL_JAPANESE_FACE) {
+ engineModeSymbol = ENGINE_MODE_SYMBOL_KAO_MOJI;
+ } else {
+ }
+
+ mTextCandidatesViewManager.setSymbolMode(true, engineModeSymbol);
+ if (OpenWnn.isXLarge()) {
+ mCandidatesViewManager = mTextCandidatesViewManager;
+ View view = mTextCandidatesViewManager.getCurrentView();
+ if (view != null) {
+ setCandidatesView(view);
+ }
+ }
breakSequence();
+ ((DefaultSoftKeyboard)mInputViewManager).setSymbolKeyboard();
break;
default:
@@ -2066,7 +2444,18 @@
commitSpaceJustOne();
checkCommitInfo();
} else {
- startConvert(EngineState.CONVERT_TYPE_RENBUN);
+ if (mEngineState.isRenbun()) {
+ if (mCandidatesViewManager instanceof TextCandidatesViewManager) {
+ if (!mCandidatesViewManager.isFocusCandidate()) {
+ processDownKeyEvent();
+ }
+ processRightKeyEvent();
+ } else {
+ mCandidatesViewManager.processMoveKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT);
+ }
+ } else {
+ startConvert(EngineState.CONVERT_TYPE_RENBUN);
+ }
}
}
mEnableAutoDeleteSpace = false;
@@ -2267,14 +2656,24 @@
return;
}
- mEnableLearning = preference.getBoolean("opt_enable_learning", true);
- mEnablePrediction = preference.getBoolean("opt_prediction", true);
- mEnableSpellCorrection = preference.getBoolean("opt_spell_correction", true);
+ if (mConverter == mConverterEN) {
+ mEnableLearning = preference.getBoolean("opt_enable_learning_en", true);
+ mEnablePrediction = preference.getBoolean("opt_prediction_en", false);
+ if (OpenWnn.isXLarge()) {
+ mEnableSpellCorrection = preference.getBoolean("opt_spell_correction_en", false);
+ } else {
+ mEnableSpellCorrection = preference.getBoolean("opt_spell_correction_en", true);
+ }
+ } else {
+ mEnableLearning = preference.getBoolean("opt_enable_learning_ja", true);
+ mEnablePrediction = preference.getBoolean("opt_prediction_ja", true);
+ }
mDisableAutoCommitEnglishMask &= ~AUTO_COMMIT_ENGLISH_OFF;
int preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_NONE;
mEnableConverter = true;
mEnableSymbolList = true;
mEnableSymbolListNonHalf = true;
+ setEnabledTabs(true);
mAutoCaps = preference.getBoolean("auto_caps", true);
mFilter.filter = 0;
mEnableAutoInsertSpace = true;
@@ -2305,6 +2704,7 @@
mEnableSymbolListNonHalf = false;
mFilter.filter = CandidateFilter.FILTER_NON_ASCII;
mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
+ mTextCandidatesViewManager.setEnableEmoticon(false);
break;
case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
@@ -2353,7 +2753,9 @@
updateEngineState(state);
updateMetaKeyStateDisplay();
- checkTutorial(info.privateImeOptions);
+ if (!OpenWnn.isXLarge()) {
+ checkTutorial(info.privateImeOptions);
+ }
}
/**
@@ -2473,6 +2875,85 @@
updateMetaKeyStateDisplay();
}
}
+ if (mEnableHardware12Keyboard && !mDirectInputMode) {
+ if (isHardKeyboard12KeyLongPress(key)
+ && ((ev.getFlags() & KeyEvent.FLAG_CANCELED_LONG_PRESS) == 0)) {
+ switch (key) {
+ case KeyEvent.KEYCODE_SOFT_LEFT:
+ if (mEngineState.isSymbolList()) {
+ switchSymbolList();
+ } else if ((mComposingText.size(0) != 0) && !mEngineState.isRenbun()
+ && (((DefaultSoftKeyboardJAJP)mInputViewManager).getKeyMode()
+ == DefaultSoftKeyboardJAJP.KEYMODE_JA_FULL_HIRAGANA)) {
+ startConvert(EngineState.CONVERT_TYPE_RENBUN);
+ } else {
+ ((DefaultSoftKeyboard) mInputViewManager).onKey(
+ DefaultSoftKeyboard.KEYCODE_JP12_EMOJI, null);
+ }
+ break;
+
+ case KeyEvent.KEYCODE_SOFT_RIGHT:
+ ((DefaultSoftKeyboardJAJP) mInputViewManager).showInputModeSwitchDialog();
+ break;
+
+ case KeyEvent.KEYCODE_DEL:
+ int newKeyCode = KeyEvent.KEYCODE_FORWARD_DEL;
+ int composingTextSize = mComposingText.size(ComposingText.LAYER1);
+ if (composingTextSize > 0) {
+ if (mComposingText.getCursor(ComposingText.LAYER1) > (composingTextSize - 1)) {
+ newKeyCode = KeyEvent.KEYCODE_DEL;
+ }
+ KeyEvent keyEvent = new KeyEvent(ev.getAction(), newKeyCode);
+ if (!processKeyEvent(keyEvent)) {
+ sendDownUpKeyEvents(keyEvent.getKeyCode());
+ }
+ } else {
+ if (mInputConnection != null) {
+ CharSequence text = mInputConnection.getTextAfterCursor(1, 0);
+ if ((text == null) || (text.length() == 0)) {
+ newKeyCode = KeyEvent.KEYCODE_DEL;
+ }
+ }
+ sendDownUpKeyEvents(newKeyCode);
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ }
+ }
+ }
+
+ /**
+ * Handling KeyEvent(KEYLONGPRESS)
+ * <br>
+ * This method is called from {@link #handleEvent}.
+ *
+ * @param ev An long press key event
+ * @return {@code true} if the event is processed in this method; {@code false} if not.
+ */
+ private boolean onKeyLongPressEvent(KeyEvent ev) {
+ if (mEnableHardware12Keyboard) {
+ int keyCode = 0;
+ if (ev != null) {
+ keyCode = ev.getKeyCode();
+ }
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_DEL:
+ initializeScreen();
+ if (mInputConnection != null) {
+ mInputConnection.deleteSurroundingText(Integer.MAX_VALUE, Integer.MAX_VALUE);
+ }
+ return true;
+
+ default:
+ break;
+
+ }
+ }
+ return false;
}
/**
@@ -2574,4 +3055,84 @@
mConverterJAJP.breakSequence();
mConverterEN.breakSequence();
}
+
+ /**
+ * Switch symbol list.
+ */
+ private void switchSymbolList(){
+ changeSymbolEngineState(new EngineState(), ENGINE_MODE_SYMBOL);
+ mHardAlt = 0;
+ updateMetaKeyStateDisplay();
+ }
+
+ /**
+ * Change symbol engine state.
+ *
+ * @param state Engine state
+ * @param mode Engine mode
+ */
+ private void changeSymbolEngineState(EngineState state, int mode) {
+ state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_SYMBOL;
+ updateEngineState(state);
+ }
+
+ /**
+ * Set enable tabs.
+ *
+ * @param enableEmoticon {@code true} - Emoticon is enabled.
+ * {@code false} - Emoticon is disabled.
+ */
+ private void setEnabledTabs(boolean enableEmoticon) {
+ mTextCandidatesViewManager.setEnableEmoticon(enableEmoticon);
+ }
+
+ /**
+ * Is enable hard keyboard 12Key long press keycode.
+ *
+ * @param keyCode keycode.
+ * @return {@code true} if enable long press keycode; {@code false} if not.
+ */
+ private boolean isHardKeyboard12KeyLongPress(int keyCode) {
+ boolean isLongPress = false;
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_SOFT_LEFT:
+ case KeyEvent.KEYCODE_SOFT_RIGHT:
+ case KeyEvent.KEYCODE_DEL:
+ isLongPress = true;
+ break;
+
+ default:
+ break;
+ }
+ return isLongPress;
+ }
+
+ /**
+ * Key event handler for hardware 12Keyboard.
+ *
+ * @param keyEvent A key event
+ * @return {@code true} if the event is handled in this method.
+ */
+ private boolean processHardware12Keyboard(KeyEvent keyEvent) {
+ boolean ret = false;
+ if (mEnableHardware12Keyboard && (keyEvent != null)) {
+ int keyCode = keyEvent.getKeyCode();
+
+ if (isHardKeyboard12KeyLongPress(keyCode)) {
+ if (keyEvent.getRepeatCount() == 0) {
+ keyEvent.startTracking();
+ }
+ ret = true;
+ } else {
+ Integer code = HW12KEYBOARD_KEYCODE_REPLACE_TABLE.get(keyCode);
+ if (code != null) {
+ if (keyEvent.getRepeatCount() == 0) {
+ ((DefaultSoftKeyboard) mInputViewManager).onKey(code.intValue(), null);
+ }
+ ret = true;
+ }
+ }
+ }
+ return ret;
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnSQLiteOpenHelper.java b/src/jp/co/omronsoft/openwnn/OpenWnnSQLiteOpenHelper.java
new file mode 100644
index 0000000..382dc09
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnSQLiteOpenHelper.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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 jp.co.omronsoft.openwnn;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import android.util.Log;
+
+/**
+ * The implementation class of SQLiteOpenHelper .
+ *
+ * @author Copyright (C) 2012 OMRON SOFTWARE CO.,LTD. All Rights Reserved.
+ */
+public class OpenWnnSQLiteOpenHelper extends SQLiteOpenHelper {
+ private static final int DATABASE_VERSION = 1;
+
+ public OpenWnnSQLiteOpenHelper(Context context, String dbname) {
+ super(context, dbname, null, DATABASE_VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/StrSegment.java b/src/jp/co/omronsoft/openwnn/StrSegment.java
index b0715bc..481bb13 100644
--- a/src/jp/co/omronsoft/openwnn/StrSegment.java
+++ b/src/jp/co/omronsoft/openwnn/StrSegment.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/StrSegmentClause.java b/src/jp/co/omronsoft/openwnn/StrSegmentClause.java
index 210b3d8..1922210 100644
--- a/src/jp/co/omronsoft/openwnn/StrSegmentClause.java
+++ b/src/jp/co/omronsoft/openwnn/StrSegmentClause.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/SymbolList.java b/src/jp/co/omronsoft/openwnn/SymbolList.java
index e41bc4d..8000525 100644
--- a/src/jp/co/omronsoft/openwnn/SymbolList.java
+++ b/src/jp/co/omronsoft/openwnn/SymbolList.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -98,10 +98,10 @@
case LANG_JA:
/* symbols for Japanese IME */
- mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin1_list));
mSymbols.put(SYMBOL_JAPANESE, getXmlfile(R.xml.symbols_japan_list));
mSymbols.put(SYMBOL_JAPANESE_FACE, getXmlfile(R.xml.symbols_japan_face_list));
- mCurrentList = mSymbols.get(SYMBOL_ENGLISH);
+ mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin1_list));
+ mCurrentList = mSymbols.get(SYMBOL_JAPANESE);
break;
case LANG_ZHCN:
diff --git a/src/jp/co/omronsoft/openwnn/TextCandidates1LineViewManager.java b/src/jp/co/omronsoft/openwnn/TextCandidates1LineViewManager.java
new file mode 100644
index 0000000..4b1a65b
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/TextCandidates1LineViewManager.java
@@ -0,0 +1,726 @@
+/*
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
+ *
+ * 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 jp.co.omronsoft.openwnn;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Vibrator;
+import android.text.Layout;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.AbsoluteSizeSpan;
+import android.text.style.AlignmentSpan;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.HorizontalScrollView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+/**
+ * The default candidates view manager using {@link android.widget.EditText}.
+ *
+ * @author Copyright (C) 2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ */
+public class TextCandidates1LineViewManager extends CandidatesViewManager {
+
+ /** displayCandidates() normal display */
+ private static final int IS_NEXTCANDIDATE_NORMAL = 1;
+ /** displayCandidates() delay display */
+ private static final int IS_NEXTCANDIDATE_DELAY = 2;
+ /** displayCandidates() display end */
+ private static final int IS_NEXTCANDIDATE_END = 3;
+
+ /** Delay of set candidate */
+ private static final int SET_CANDIDATE_DELAY = 50;
+ /** Delay Millis */
+ private static final int CANDIDATE_DELAY_MILLIS = 500;
+
+ /** Scroll distance */
+ private static final float SCROLL_DISTANCE = 0.9f;
+
+ /** Body view of the candidates list */
+ private ViewGroup mViewBody;
+ /** Scroller */
+ private HorizontalScrollView mViewBodyScroll;
+ /** Left more button */
+ private ImageView mLeftMoreButton;
+ /** Right more button */
+ private ImageView mRightMoreButton;
+ /** Candidate view */
+ private LinearLayout mViewCandidateList;
+
+ /** {@link OpenWnn} instance using this manager */
+ private OpenWnn mWnn;
+ /** View type (VIEW_TYPE_NORMAL or VIEW_TYPE_FULL or VIEW_TYPE_CLOSE) */
+ private int mViewType;
+
+ /** view width */
+ private int mViewWidth;
+ /** Minimum width of candidate view */
+ private int mCandidateMinimumWidth;
+ /** Minimum height of candidate view */
+ private int mCandidateMinimumHeight;
+
+ /** Minimum width of candidate view */
+ private static final int CANDIDATE_MINIMUM_WIDTH = 48;
+
+ /** Whether hide the view if there is no candidate */
+ private boolean mAutoHideMode;
+ /** The converter to get candidates from and notice the selected candidate to. */
+ private WnnEngine mConverter;
+ /** Limitation of displaying candidates */
+ private int mDisplayLimit;
+
+ /** Vibrator for touch vibration */
+ private Vibrator mVibrator = null;
+ /** AudioManager for click sound */
+ private AudioManager mSound = null;
+
+ /** Number of candidates displaying */
+ private int mWordCount;
+ /** List of candidates */
+ private ArrayList<WnnWord> mWnnWordArray;
+
+ /** Character width of the candidate area */
+ private int mLineLength = 0;
+ /** Maximum width of candidate view */
+ private int mCandidateMaxWidth = 0;
+ /** general information about a display */
+ private final DisplayMetrics mMetrics = new DisplayMetrics();
+ /** Focus is none now */
+ private static final int FOCUS_NONE = -1;
+ /** Handler for set Candidate */
+ private static final int MSG_SET_CANDIDATES = 1;
+ /** List of textView for CandiData List */
+ private ArrayList<TextView> mTextViewArray = new ArrayList<TextView>();
+ /** Now focus textView index */
+ private int mCurrentFocusIndex = FOCUS_NONE;
+ /** Focused View */
+ private View mFocusedView = null;
+ /** Focused View Background */
+ private Drawable mFocusedViewBackground = null;
+ /** Scale up text size */
+ private AbsoluteSizeSpan mSizeSpan;
+ /** Scale up text alignment */
+ private AlignmentSpan.Standard mCenterSpan;
+ /** Whether candidates long click enable */
+ private boolean mEnableCandidateLongClick = true;
+
+ /** {@code Handler} Handler for focus Candidate wait delay */
+ private Handler mHandler = new Handler() {
+ @Override public void handleMessage(Message msg) {
+
+ switch (msg.what) {
+ case MSG_SET_CANDIDATES:
+ displayCandidatesDelay(mConverter);
+ break;
+
+ default:
+ break;
+ }
+ }
+ };
+
+ /** Event listener for touching a candidate */
+ private OnClickListener mCandidateOnClick = new OnClickListener() {
+ public void onClick(View v) {
+ if (!v.isShown()) {
+ return;
+ }
+ playSoundAndVibration();
+
+ if (v instanceof CandidateTextView) {
+ CandidateTextView text = (CandidateTextView)v;
+ int wordcount = text.getId();
+ WnnWord word = getWnnWord(wordcount);
+ clearFocusCandidate();
+ selectCandidate(word);
+ }
+ }
+ };
+
+ /** Event listener for long-clicking a candidate */
+ private OnLongClickListener mCandidateOnLongClick = new OnLongClickListener() {
+ public boolean onLongClick(View v) {
+ if (!v.isShown()) {
+ return true;
+ }
+
+ if (!mEnableCandidateLongClick) {
+ return false;
+ }
+
+ clearFocusCandidate();
+
+ int wordcount = ((TextView)v).getId();
+ mWord = mWnnWordArray.get(wordcount);
+
+ displayDialog(v, mWord);
+ return true;
+ }
+ };
+
+ /**
+ * Constructor
+ */
+ public TextCandidates1LineViewManager() {
+ this(300);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param displayLimit The limit of display
+ */
+ public TextCandidates1LineViewManager(int displayLimit) {
+ mDisplayLimit = displayLimit;
+ mWnnWordArray = new ArrayList<WnnWord>();
+ mAutoHideMode = true;
+ mMetrics.setToDefaults();
+ }
+
+ /**
+ * Set auto-hide mode.
+ * @param hide {@code true} if the view will hidden when no candidate exists;
+ * {@code false} if the view is always shown.
+ */
+ public void setAutoHide(boolean hide) {
+ mAutoHideMode = hide;
+ }
+
+ /** @see CandidatesViewManager */
+ public View initView(OpenWnn parent, int width, int height) {
+ mWnn = parent;
+ mViewWidth = width;
+
+ Resources r = mWnn.getResources();
+
+ mCandidateMinimumWidth = (int)(CANDIDATE_MINIMUM_WIDTH * mMetrics.density);
+ mCandidateMinimumHeight = r.getDimensionPixelSize(R.dimen.candidate_layout_height);
+
+ LayoutInflater inflater = parent.getLayoutInflater();
+ mViewBody = (ViewGroup)inflater.inflate(R.layout.candidates_1line, null);
+ mViewBodyScroll = (HorizontalScrollView)mViewBody.findViewById(R.id.candview_scroll_1line);
+ mViewBodyScroll.setOverScrollMode(View.OVER_SCROLL_NEVER);
+ mViewBodyScroll.setOnTouchListener(new View.OnTouchListener() {
+ public boolean onTouch(View v, MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ case MotionEvent.ACTION_MOVE:
+ if (mHandler.hasMessages(MSG_SET_CANDIDATES)) {
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+ mHandler.sendEmptyMessageDelayed(MSG_SET_CANDIDATES, CANDIDATE_DELAY_MILLIS);
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ return false;
+ }
+ });
+
+ mLeftMoreButton = (ImageView)mViewBody.findViewById(R.id.left_more_imageview);
+ mLeftMoreButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ if (!v.isShown()) {
+ return;
+ }
+ playSoundAndVibration();
+ if (mViewBodyScroll.getScrollX() > 0) {
+ mViewBodyScroll.smoothScrollBy(
+ (int)(mViewBodyScroll.getWidth() * -SCROLL_DISTANCE), 0);
+ }
+ }
+ });
+ mLeftMoreButton.setOnLongClickListener(new View.OnLongClickListener() {
+ public boolean onLongClick(View v) {
+ if (!v.isShown()) {
+ return false;
+ }
+ if (!mViewBodyScroll.fullScroll(View.FOCUS_LEFT)) {
+ mViewBodyScroll.scrollTo(mViewBodyScroll.getChildAt(0).getWidth(), 0);
+ }
+ return true;
+ }
+ });
+
+ mRightMoreButton = (ImageView)mViewBody.findViewById(R.id.right_more_imageview);
+ mRightMoreButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ if (!v.isShown()) {
+ return;
+ }
+ int width = mViewBodyScroll.getWidth();
+ int scrollMax = mViewBodyScroll.getChildAt(0).getRight();
+
+ if ((mViewBodyScroll.getScrollX() + width) < scrollMax) {
+ mViewBodyScroll.smoothScrollBy((int)(width * SCROLL_DISTANCE), 0);
+ }
+ }
+ });
+ mRightMoreButton.setOnLongClickListener(new View.OnLongClickListener() {
+ public boolean onLongClick(View v) {
+ if (!v.isShown()) {
+ return false;
+ }
+ if (!mViewBodyScroll.fullScroll(View.FOCUS_RIGHT)) {
+ mViewBodyScroll.scrollTo(0, 0);
+ }
+ return true;
+ }
+ });
+
+ mViewLongPressDialog = (View)inflater.inflate(R.layout.candidate_longpress_dialog, null);
+
+ /* select button */
+ Button longPressDialogButton = (Button)mViewLongPressDialog.findViewById(R.id.candidate_longpress_dialog_select);
+ longPressDialogButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ playSoundAndVibration();
+ clearFocusCandidate();
+ selectCandidate(mWord);
+ closeDialog();
+ }
+ });
+
+ /* cancel button */
+ longPressDialogButton = (Button)mViewLongPressDialog.findViewById(R.id.candidate_longpress_dialog_cancel);
+ longPressDialogButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ playSoundAndVibration();
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.UPDATE_CANDIDATE));
+ closeDialog();
+ }
+ });
+
+ int buttonWidth = r.getDimensionPixelSize(R.dimen.candidate_layout_width);
+ mCandidateMaxWidth = (mViewWidth - buttonWidth * 2) / 2;
+
+ mSizeSpan = new AbsoluteSizeSpan(r.getDimensionPixelSize(R.dimen.candidate_delete_word_size));
+ mCenterSpan = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
+
+ createNormalCandidateView();
+
+ setViewType(CandidatesViewManager.VIEW_TYPE_CLOSE);
+
+ return mViewBody;
+ }
+
+ /**
+ * Create normal candidate view
+ */
+ private void createNormalCandidateView() {
+ mViewCandidateList = (LinearLayout)mViewBody.findViewById(R.id.candidates_view_1line);
+
+ Context context = mViewBodyScroll.getContext();
+ for (int i = 0; i < mDisplayLimit; i++) {
+ mViewCandidateList.addView(new CandidateTextView(context,
+ mCandidateMinimumHeight,
+ mCandidateMinimumWidth,
+ mCandidateMaxWidth));
+ }
+ }
+
+ /** @see CandidatesViewManager#getCurrentView */
+ public View getCurrentView() {
+ return mViewBody;
+ }
+
+ /** @see CandidatesViewManager#setViewType */
+ public void setViewType(int type) {
+ mViewType = type;
+
+ if (type == CandidatesViewManager.VIEW_TYPE_NORMAL) {
+ mViewCandidateList.setMinimumHeight(mCandidateMinimumHeight);
+ } else {
+ mViewCandidateList.setMinimumHeight(-1);
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+
+ if (mViewBody.isShown()) {
+ mWnn.setCandidatesViewShown(false);
+ }
+ }
+ }
+
+ /** @see CandidatesViewManager#getViewType */
+ public int getViewType() {
+ return mViewType;
+ }
+
+ /** @see CandidatesViewManager#displayCandidates */
+ public void displayCandidates(WnnEngine converter) {
+
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+
+ closeDialog();
+ clearCandidates();
+ mConverter = converter;
+
+ int isNextCandidate = IS_NEXTCANDIDATE_NORMAL;
+ while(isNextCandidate == IS_NEXTCANDIDATE_NORMAL) {
+ isNextCandidate = displayCandidatesNormal(converter);
+ }
+
+ if (isNextCandidate == IS_NEXTCANDIDATE_DELAY) {
+ isNextCandidate = displayCandidatesDelay(converter);
+ }
+
+ mViewBodyScroll.scrollTo(0,0);
+ }
+
+
+ /**
+ * Display the candidates.
+ * @param converter {@link WnnEngine} which holds candidates.
+ */
+ private int displayCandidatesNormal(WnnEngine converter) {
+ int isNextCandidate = IS_NEXTCANDIDATE_NORMAL;
+
+ if (converter == null) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ /* Get candidates */
+ WnnWord result = converter.getNextCandidate();
+ if (result == null) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ mLineLength += setCandidate(result);
+ if (mLineLength >= mViewWidth) {
+ isNextCandidate = IS_NEXTCANDIDATE_DELAY;
+ }
+
+ if (mWordCount < 1) { /* no candidates */
+ if (mAutoHideMode) {
+ mWnn.setCandidatesViewShown(false);
+ return IS_NEXTCANDIDATE_END;
+ }
+ }
+
+ if (mWordCount > mDisplayLimit) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ if (!(mViewBody.isShown())) {
+ mWnn.setCandidatesViewShown(true);
+ }
+ return isNextCandidate;
+ }
+
+ /**
+ * Display the candidates.
+ * @param converter {@link WnnEngine} which holds candidates.
+ */
+ private int displayCandidatesDelay(WnnEngine converter) {
+ int isNextCandidate = IS_NEXTCANDIDATE_DELAY;
+
+ if (converter == null) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ /* Get candidates */
+ WnnWord result = converter.getNextCandidate();
+ if (result == null) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ setCandidate(result);
+
+ if (mWordCount > mDisplayLimit) {
+ return IS_NEXTCANDIDATE_END;
+ }
+
+ mHandler.sendEmptyMessageDelayed(MSG_SET_CANDIDATES, SET_CANDIDATE_DELAY);
+
+ return isNextCandidate;
+ }
+
+ /**
+ * Set the candidate for candidate view
+ * @param word set word
+ * @return int Set width
+ */
+ private int setCandidate(WnnWord word) {
+ CandidateTextView candidateTextView =
+ (CandidateTextView) mViewCandidateList.getChildAt(mWordCount);
+ candidateTextView.setCandidateTextView(word, mWordCount, mCandidateOnClick,
+ mCandidateOnLongClick);
+ mWnnWordArray.add(mWordCount, word);
+ mWordCount++;
+ mTextViewArray.add(candidateTextView);
+
+ return candidateTextView.getWidth();
+ }
+
+ /**
+ * Clear the candidate view
+ */
+ private void clearNormalViewCandidate() {
+ int candidateNum = mViewCandidateList.getChildCount();
+ for (int i = 0; i < candidateNum; i++) {
+ View v = mViewCandidateList.getChildAt(i);
+ v.setVisibility(View.GONE);
+ }
+ }
+
+ /** @see CandidatesViewManager#clearCandidates */
+ public void clearCandidates() {
+ clearFocusCandidate();
+ clearNormalViewCandidate();
+
+ mLineLength = 0;
+
+ mWordCount = 0;
+ mWnnWordArray.clear();
+ mTextViewArray.clear();
+
+ if (mAutoHideMode && mViewBody.isShown()) {
+ mWnn.setCandidatesViewShown(false);
+ }
+ }
+
+ /** @see CandidatesViewManager#setPreferences */
+ public void setPreferences(SharedPreferences pref) {
+ try {
+ if (pref.getBoolean("key_vibration", false)) {
+ mVibrator = (Vibrator)mWnn.getSystemService(Context.VIBRATOR_SERVICE);
+ } else {
+ mVibrator = null;
+ }
+ if (pref.getBoolean("key_sound", false)) {
+ mSound = (AudioManager)mWnn.getSystemService(Context.AUDIO_SERVICE);
+ } else {
+ mSound = null;
+ }
+ } catch (Exception ex) {
+ Log.d("OpenWnn", "NO VIBRATOR");
+ }
+ }
+
+ /**
+ * Select a candidate.
+ * <br>
+ * This method notices the selected word to {@link OpenWnn}.
+ *
+ * @param word The selected word
+ */
+ private void selectCandidate(WnnWord word) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.SELECT_CANDIDATE, word));
+ }
+
+ private void playSoundAndVibration() {
+ if (mVibrator != null) {
+ try {
+ mVibrator.vibrate(5);
+ } catch (Exception ex) {
+ Log.e("OpenWnn", "TextCandidates1LineViewManager::selectCandidate Vibrator " + ex.toString());
+ }
+ }
+ if (mSound != null) {
+ try {
+ mSound.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD, 1.0f);
+ } catch (Exception ex) {
+ Log.e("OpenWnn", "TextCandidates1LineViewManager::selectCandidate Sound " + ex.toString());
+ }
+ }
+ }
+
+ /**
+ * KeyEvent action for the candidate view.
+ *
+ * @param key Key event
+ */
+ public void processMoveKeyEvent(int key) {
+ if (!mViewBody.isShown()) {
+ return;
+ }
+
+ switch (key) {
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ moveFocus(-1);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ moveFocus(1);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_UP:
+ moveFocus(-1);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ moveFocus(1);
+ break;
+
+ default:
+ break;
+
+ }
+ }
+
+ /**
+ * Get a flag candidate is focused now.
+ *
+ * @return the Candidate is focused of a flag.
+ */
+ public boolean isFocusCandidate(){
+ if (mCurrentFocusIndex != FOCUS_NONE) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Give focus to View of candidate.
+ */
+ private void setViewStatusOfFocusedCandidate() {
+ View view = mFocusedView;
+ if (view != null) {
+ view.setBackgroundDrawable(mFocusedViewBackground);
+ }
+
+ TextView v = getFocusedView();
+ mFocusedView = v;
+ if (v != null) {
+ mFocusedViewBackground = v.getBackground();
+ v.setBackgroundResource(R.drawable.cand_back_focuse);
+
+ int viewBodyLeft = getViewLeftOnScreen(mViewBodyScroll);
+ int viewBodyRight = viewBodyLeft + mViewBodyScroll.getWidth();
+ int focusedViewLeft = getViewLeftOnScreen(v);
+ int focusedViewRight = focusedViewLeft + v.getWidth();
+
+ if (focusedViewRight > viewBodyRight) {
+ mViewBodyScroll.scrollBy((focusedViewRight - viewBodyRight), 0);
+ } else if (focusedViewLeft < viewBodyLeft) {
+ mViewBodyScroll.scrollBy((focusedViewLeft - viewBodyLeft), 0);
+ }
+ }
+ }
+
+ /**
+ * Clear focus to selected candidate.
+ */
+ private void clearFocusCandidate(){
+ View view = mFocusedView;
+ if (view != null) {
+ view.setBackgroundDrawable(mFocusedViewBackground);
+ mFocusedView = null;
+ }
+
+ mCurrentFocusIndex = FOCUS_NONE;
+
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.FOCUS_CANDIDATE_END));
+ }
+
+ /**
+ * Select candidate that has focus.
+ */
+ public void selectFocusCandidate(){
+ if (mCurrentFocusIndex != FOCUS_NONE) {
+ selectCandidate(getFocusedWnnWord());
+ }
+ }
+
+ /**
+ * Get View of focus candidate.
+ */
+ private TextView getFocusedView() {
+ if (mCurrentFocusIndex == FOCUS_NONE) {
+ return null;
+ }
+ return mTextViewArray.get(mCurrentFocusIndex);
+ }
+
+ /**
+ * Move the focus to next candidate.
+ *
+ * @param direction The direction of increment or decrement.
+ */
+ private void moveFocus(int direction) {
+ boolean isStart = (mCurrentFocusIndex == FOCUS_NONE);
+ int size = mTextViewArray.size();
+ int index = isStart ? 0 : (mCurrentFocusIndex + direction);
+
+ if (index < 0) {
+ index = size - 1;
+ } else {
+ if (index >= size) {
+ index = 0;
+ }
+ }
+
+ mCurrentFocusIndex = index;
+ setViewStatusOfFocusedCandidate();
+
+ if (isStart) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.FOCUS_CANDIDATE_START));
+ }
+ }
+
+ /**
+ * Get view top position on screen.
+ *
+ * @param view target view.
+ * @return int view top position on screen
+ */
+ private int getViewLeftOnScreen(View view) {
+ int[] location = new int[2];
+ view.getLocationOnScreen(location);
+ return location[0];
+ }
+
+ /** @see CandidatesViewManager#getFocusedWnnWord */
+ public WnnWord getFocusedWnnWord() {
+ return getWnnWord(mCurrentFocusIndex);
+ }
+
+ /**
+ * Get WnnWord.
+ *
+ * @return WnnWord word
+ */
+ public WnnWord getWnnWord(int index) {
+ return mWnnWordArray.get(index);
+ }
+
+ /** @see CandidatesViewManager#setCandidateMsgRemove */
+ public void setCandidateMsgRemove() {
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+ }
+}
diff --git a/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java b/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
index c84e845..81df56e 100644
--- a/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
+++ b/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,13 +16,20 @@
package jp.co.omronsoft.openwnn;
+import java.nio.channels.Selector;
import java.util.ArrayList;
+import java.util.LinkedList;
import android.content.Context;
import android.content.SharedPreferences;
-import android.content.res.Configuration;
import android.content.res.Resources;
-import android.media.MediaPlayer;
+import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
+import android.graphics.Rect;
+import android.media.AudioManager;
+import android.os.Handler;
+import android.os.Message;
import android.os.Vibrator;
+import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.text.TextPaint;
import android.text.SpannableString;
@@ -31,13 +38,14 @@
import android.text.style.DynamicDrawableSpan;
import android.util.Log;
import android.util.DisplayMetrics;
+import android.util.TypedValue;
import android.view.Gravity;
+import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
-import android.view.View.OnTouchListener;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.widget.Button;
@@ -47,16 +55,13 @@
import android.widget.EditText;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
-import android.graphics.drawable.Drawable;
/**
* The default candidates view manager class using {@link EditText}.
*
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
+ * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD. All Rights Reserved.
*/
-public class TextCandidatesViewManager implements CandidatesViewManager, GestureDetector.OnGestureListener {
- /** Height of a line */
- public static final int LINE_HEIGHT = 34;
+public class TextCandidatesViewManager extends CandidatesViewManager implements GestureDetector.OnGestureListener {
/** Number of lines to display (Portrait) */
public static final int LINE_NUM_PORTRAIT = 2;
/** Number of lines to display (Landscape) */
@@ -64,29 +69,50 @@
/** Maximum lines */
private static final int DISPLAY_LINE_MAX_COUNT = 1000;
- /** Width of the view */
- private static final int CANDIDATE_MINIMUM_WIDTH = 48;
- /** Height of the view */
- private static final int CANDIDATE_MINIMUM_HEIGHT = 35;
- /** Align the candidate left if the width of the string exceeds this threshold */
- private static final int CANDIDATE_LEFT_ALIGN_THRESHOLD = 120;
/** Maximum number of displaying candidates par one line (full view mode) */
private static final int FULL_VIEW_DIV = 4;
+ /** Maximum number of displaying candidates par one line (full view mode)(symbol)(portrait) */
+ private static final int FULL_VIEW_SYMBOL_DIV_PORT = 6;
+ /** Maximum number of displaying candidates par one line (full view mode)(symbol)(landscape) */
+ private static final int FULL_VIEW_SYMBOL_DIV_LAND = 10;
+ /** Delay of set candidate */
+ private static final int SET_CANDIDATE_DELAY = 50;
+ /** First line count */
+ private static final int SET_CANDIDATE_FIRST_LINE_COUNT = 7;
+ /** Delay line count */
+ private static final int SET_CANDIDATE_DELAY_LINE_COUNT = 1;
+
+ /** Focus is none now */
+ private static final int FOCUS_NONE = -1;
+ /** Handler for focus Candidate */
+ private static final int MSG_MOVE_FOCUS = 0;
+ /** Handler for set Candidate */
+ private static final int MSG_SET_CANDIDATES = 1;
+ /** Handler for select Candidate */
+ private static final int MSG_SELECT_CANDIDATES = 2;
+
+ /** NUmber of Candidate display lines */
+ private static final int SETTING_NUMBER_OF_LINEMAX = 5;
/** Body view of the candidates list */
- private ViewGroup mViewBody;
+ private ViewGroup mViewBody = null;
+
+ /** The view of the Symbol Tab */
+ private TextView mViewTabSymbol;
+ /** The view of the Emoticon Tab */
+ private TextView mViewTabEmoticon;
/** Scroller of {@code mViewBodyText} */
private ScrollView mViewBodyScroll;
/** Base of {@code mViewCandidateList1st}, {@code mViewCandidateList2nd} */
private ViewGroup mViewCandidateBase;
/** Button displayed bottom of the view when there are more candidates. */
private ImageView mReadMoreButton;
- /** The view of the scaling up candidate */
- private View mViewScaleUp;
/** Layout for the candidates list on normal view */
private LinearLayout mViewCandidateList1st;
/** Layout for the candidates list on full view */
private AbsoluteLayout mViewCandidateList2nd;
+ /** View for symbol tab */
+ private LinearLayout mViewCandidateListTab;
/** {@link OpenWnn} instance using this manager */
private OpenWnn mWnn;
/** View type (VIEW_TYPE_NORMAL or VIEW_TYPE_FULL or VIEW_TYPE_CLOSE) */
@@ -96,42 +122,53 @@
/** Width of the view */
private int mViewWidth;
- /** Height of the view */
- private int mViewHeight;
/** Minimum width of a candidate (density support) */
private int mCandidateMinimumWidth;
/** Maximum width of a candidate (density support) */
private int mCandidateMinimumHeight;
+ /** Minimum height of the category candidate view */
+ private int mCandidateCategoryMinimumHeight;
+ /** Left align threshold of the candidate view */
+ private int mCandidateLeftAlignThreshold;
+ /** Height of keyboard */
+ private int mKeyboardHeight;
+ /** Height of symbol keyboard */
+ private int mSymbolKeyboardHeight;
+ /** Height of symbol keyboard tab */
+ private int mSymbolKeyboardTabHeight;
+ /** Whether being able to use Emoticon */
+ private boolean mEnableEmoticon = false;
- /** Whether hide the view if there is no candidates */
- private boolean mAutoHideMode;
- /** The converter to be get candidates from and notice the selected candidate to. */
+ /** Whether hide the view if there is no candidate */
+ private boolean mAutoHideMode = true;
+ /** The converter to get candidates from and notice the selected candidate to. */
private WnnEngine mConverter;
/** Limitation of displaying candidates */
private int mDisplayLimit;
/** Vibrator for touch vibration */
private Vibrator mVibrator = null;
- /** MediaPlayer for click sound */
- private MediaPlayer mSound = null;
+ /** AudioManager for click sound */
+ private AudioManager mSound = null;
- /** Number of candidates displaying */
- private int mWordCount;
- /** List of candidates */
- private ArrayList<WnnWord> mWnnWordArray;
+ /** Number of candidates displaying for 1st */
+ private int mWordCount1st;
+ /** Number of candidates displaying for 2nd */
+ private int mWordCount2nd;
+ /** List of candidates for 1st */
+ private ArrayList<WnnWord> mWnnWordArray1st = new ArrayList<WnnWord>();
+ /** List of candidates for 2nd */
+ private ArrayList<WnnWord> mWnnWordArray2nd = new ArrayList<WnnWord>();
+ /** List of select candidates */
+ private LinkedList<WnnWord> mWnnWordSelectedList = new LinkedList<WnnWord>();
/** Gesture detector */
private GestureDetector mGestureDetector;
- /** The word pressed */
- private WnnWord mWord;
/** Character width of the candidate area */
private int mLineLength = 0;
/** Number of lines displayed */
private int mLineCount = 1;
- /** {@code true} if the candidate delete state is selected */
- private boolean mIsScaleUp = false;
-
/** {@code true} if the full screen mode is selected */
private boolean mIsFullView = false;
@@ -142,8 +179,6 @@
private int mDisplayEndOffset = 0;
/** {@code true} if there are more candidates to display. */
private boolean mCanReadMore = false;
- /** Width of {@code mReadMoreButton} */
- private int mReadMoreButtonWidth = 0;
/** Color of the candidates */
private int mTextColor = 0;
/** Template object for each candidate and normal/full view change button */
@@ -158,79 +193,150 @@
private int mFullViewPrevLineTopId;
/** Layout of the previous candidate (in full view) */
private ViewGroup.LayoutParams mFullViewPrevParams;
- /** Whether all candidates is displayed */
+ /** Whether all candidates are displayed */
private boolean mCreateCandidateDone;
/** Number of lines in normal view */
private int mNormalViewWordCountOfLine;
- /** general infomation about a display */
- private final DisplayMetrics mMetrics = new DisplayMetrics();
- /** Event listener for touching a candidate */
- private OnTouchListener mCandidateOnTouch = new OnTouchListener() {
- public boolean onTouch(View v, MotionEvent event) {
- if (mMotionEvent != null) {
- return true;
- }
+ /** List of textView for CandiData List 1st for Symbol mode */
+ private ArrayList<TextView> mTextViewArray1st = new ArrayList<TextView>();
+ /** List of textView for CandiData List 2st for Symbol mode */
+ private ArrayList<TextView> mTextViewArray2nd = new ArrayList<TextView>();
+ /** Now focus textView index */
+ private int mCurrentFocusIndex = FOCUS_NONE;
+ /** Focused View */
+ private View mFocusedView = null;
+ /** Focused View Background */
+ private Drawable mFocusedViewBackground = null;
+ /** Axis to find next TextView for Up/Down */
+ private int mFocusAxisX = 0;
+ /** Now focused TextView in mTextViewArray1st */
+ private boolean mHasFocusedArray1st = true;
- if ((event.getAction() == MotionEvent.ACTION_UP)
- && (v instanceof TextView)) {
- Drawable d = v.getBackground();
- if (d != null) {
- d.setState(new int[] {});
+ /** Portrait Number of Lines from Preference */
+ private int mPortraitNumberOfLine = LINE_NUM_PORTRAIT;
+ /** Landscape Number of Lines from Preference */
+ private int mLandscapeNumberOfLine = LINE_NUM_LANDSCAPE;
+
+ /** Coordinates of line */
+ private int mLineY = 0;
+
+ /** {@code true} if the candidate is selected */
+ private boolean mIsSymbolSelected = false;
+
+ /** Whether candidates is symbol */
+ private boolean mIsSymbolMode = false;
+
+ /** Symbol mode */
+ private int mSymbolMode = OpenWnnJAJP.ENGINE_MODE_SYMBOL;
+
+ /** Text size of candidates */
+ private float mCandNormalTextSize;
+
+ /** Text size of category */
+ private float mCandCategoryTextSize;
+
+ /** HardKeyboard hidden({@code true}) or disp({@code false}) */
+ private boolean mHardKeyboardHidden = true;
+
+ /** Minimum height of the candidate 1line view */
+ private int mCandidateOneLineMinimumHeight;
+
+ /** Whether candidates long click enable */
+ private boolean mEnableCandidateLongClick = true;
+
+ /** Keyboard vertical gap value */
+ private static final float KEYBOARD_VERTICAL_GAP = 0.009f;
+
+ /** Keyboard vertical gap count */
+ private static final int KEYBOARD_VERTICAL_GAP_COUNT = 3;
+
+ /** {@code Handler} Handler for focus Candidate wait delay */
+ private Handler mHandler = new Handler() {
+ @Override public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_MOVE_FOCUS:
+ moveFocus(msg.arg1, msg.arg2 == 1);
+ break;
+
+ case MSG_SET_CANDIDATES:
+ if (mViewType == CandidatesViewManager.VIEW_TYPE_FULL && mIsSymbolMode) {
+ displayCandidates(mConverter, false, SET_CANDIDATE_DELAY_LINE_COUNT);
}
- }
+ break;
- mMotionEvent = event;
- boolean ret = mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_TOUCH));
- mMotionEvent = null;
- return ret;
- }
- };
-
-
- /** Event listener for clicking a candidate */
- private OnClickListener mCandidateOnClick = new OnClickListener() {
- public void onClick(View v) {
- if (!v.isShown()) {
- return;
- }
-
- if (v instanceof TextView) {
- TextView text = (TextView)v;
- int wordcount = text.getId();
+ case MSG_SELECT_CANDIDATES:
WnnWord word = null;
- word = mWnnWordArray.get(wordcount);
- selectCandidate(word);
- }
- }
- };
-
- /** Event listener for long-clicking a candidate */
- private OnLongClickListener mCandidateOnLongClick = new OnLongClickListener() {
- public boolean onLongClick(View v) {
- if (mViewScaleUp == null) {
- return false;
- }
-
- if (!v.isShown()) {
- return true;
- }
-
- Drawable d = v.getBackground();
- if (d != null) {
- if(d.getState().length == 0){
- return true;
+ while ((word = mWnnWordSelectedList.poll()) != null) {
+ selectCandidate(word);
}
+ break;
+
+ default:
+ break;
}
-
- int wordcount = ((TextView)v).getId();
- mWord = mWnnWordArray.get(wordcount);
- setViewScaleUp(true, mWord);
-
- return true;
}
};
+ /** Event listener for touching a candidate for 1st */
+ private OnClickListener mCandidateOnClick1st = new OnClickListener() {
+ public void onClick(View v) {
+ onClickCandidate(v, mWnnWordArray1st);
+ }
+ };
+
+ /** Event listener for touching a candidate for 2nd */
+ private OnClickListener mCandidateOnClick2nd = new OnClickListener() {
+ public void onClick(View v) {
+ onClickCandidate(v, mWnnWordArray2nd);
+ }
+ };
+
+ /** Event listener for long-clicking a candidate for 1st */
+ private OnLongClickListener mCandidateOnLongClick1st = new OnLongClickListener() {
+ public boolean onLongClick(View v) {
+ return onLongClickCandidate(v, mWnnWordArray1st);
+ }
+ };
+
+ /** Event listener for long-clicking a candidate for for 2nd */
+ private OnLongClickListener mCandidateOnLongClick2nd = new OnLongClickListener() {
+ public boolean onLongClick(View v) {
+ return onLongClickCandidate(v, mWnnWordArray2nd);
+ }
+ };
+
+ /** Event listener for click a symbol tab */
+ private OnClickListener mTabOnClick = new OnClickListener() {
+ public void onClick(View v) {
+ if (!v.isShown()) {
+ return;
+ }
+ playSoundAndVibration();
+
+ if (v instanceof TextView) {
+ TextView text = (TextView)v;
+ switch (text.getId()) {
+ case R.id.candview_symbol:
+ if (mSymbolMode != OpenWnnJAJP.ENGINE_MODE_SYMBOL) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_SYMBOL));
+ }
+ break;
+
+ case R.id.candview_emoticon:
+ if (mSymbolMode != OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+ OpenWnnJAJP.ENGINE_MODE_SYMBOL));
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+ };
/**
* Constructor
@@ -245,10 +351,69 @@
* @param displayLimit The limit of display
*/
public TextCandidatesViewManager(int displayLimit) {
- this.mDisplayLimit = displayLimit;
- this.mWnnWordArray = new ArrayList<WnnWord>();
- this.mAutoHideMode = true;
- mMetrics.setToDefaults();
+ mDisplayLimit = displayLimit;
+ }
+
+ /**
+ * Handle a click event on the candidate.
+ * @param v View
+ * @param list List of candidates
+ */
+ private void onClickCandidate(View v, ArrayList<WnnWord> list) {
+ if (!v.isShown()) {
+ return;
+ }
+ playSoundAndVibration();
+
+ if (v instanceof TextView) {
+ TextView text = (TextView)v;
+ int wordcount = text.getId();
+ WnnWord word = list.get(wordcount);
+
+ if (mHandler.hasMessages(MSG_SET_CANDIDATES)) {
+ mWnnWordSelectedList.add(word);
+ return;
+ }
+ clearFocusCandidate();
+ selectCandidate(word);
+ }
+ }
+
+ /**
+ * Handle a long click event on the candidate.
+ * @param v View
+ * @param list List of candidates
+ */
+ public boolean onLongClickCandidate(View v, ArrayList<WnnWord> list) {
+ if (mViewLongPressDialog == null) {
+ return false;
+ }
+
+ if (mIsSymbolMode) {
+ return false;
+ }
+
+ if (!mEnableCandidateLongClick) {
+ return false;
+ }
+
+ if (!v.isShown()) {
+ return true;
+ }
+
+ Drawable d = v.getBackground();
+ if (d != null) {
+ if(d.getState().length == 0){
+ return true;
+ }
+ }
+
+ int wordcount = ((TextView)v).getId();
+ mWord = list.get(wordcount);
+ clearFocusCandidate();
+ displayDialog(v, mWord);
+
+ return true;
}
/**
@@ -260,54 +425,75 @@
mAutoHideMode = hide;
}
- /** @see CandidatesViewManager */
+ /** @see CandidatesViewManager#initView */
public View initView(OpenWnn parent, int width, int height) {
mWnn = parent;
mViewWidth = width;
- mViewHeight = height;
- mCandidateMinimumWidth = (int)(CANDIDATE_MINIMUM_WIDTH * mMetrics.density);
- mCandidateMinimumHeight = (int)(CANDIDATE_MINIMUM_HEIGHT * mMetrics.density);
- mPortrait =
- (parent.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE);
-
Resources r = mWnn.getResources();
+ mCandidateMinimumWidth = r.getDimensionPixelSize(R.dimen.cand_minimum_width);
+ mCandidateMinimumHeight = r.getDimensionPixelSize(R.dimen.cand_minimum_height);
+ if (OpenWnn.isXLarge()) {
+ mCandidateOneLineMinimumHeight = r.getDimensionPixelSize(R.dimen.candidate_layout_height);
+ }
+ mCandidateCategoryMinimumHeight = r.getDimensionPixelSize(R.dimen.cand_category_minimum_height);
+ mCandidateLeftAlignThreshold = r.getDimensionPixelSize(R.dimen.cand_left_align_threshold);
+ mKeyboardHeight = r.getDimensionPixelSize(R.dimen.keyboard_height);
+ if (OpenWnn.isXLarge()) {
+ mKeyboardHeight += Math.round(height * KEYBOARD_VERTICAL_GAP)
+ * KEYBOARD_VERTICAL_GAP_COUNT;
+ }
+ mSymbolKeyboardHeight = r.getDimensionPixelSize(R.dimen.symbol_keyboard_height);
+ Drawable d = r.getDrawable(R.drawable.tab_no_select);
+ mSymbolKeyboardTabHeight = d.getMinimumHeight();
+
+ mPortrait =
+ (r.getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE);
+
+ mCandNormalTextSize = r.getDimensionPixelSize(R.dimen.cand_normal_text_size);
+ mCandCategoryTextSize = r.getDimensionPixelSize(R.dimen.cand_category_text_size);
LayoutInflater inflater = parent.getLayoutInflater();
mViewBody = (ViewGroup)inflater.inflate(R.layout.candidates, null);
+ mViewTabSymbol = (TextView)mViewBody.findViewById(R.id.candview_symbol);
+ mViewTabEmoticon = (TextView)mViewBody.findViewById(R.id.candview_emoticon);
+
mViewBodyScroll = (ScrollView)mViewBody.findViewById(R.id.candview_scroll);
- mViewBodyScroll.setOnTouchListener(mCandidateOnTouch);
mViewCandidateBase = (ViewGroup)mViewBody.findViewById(R.id.candview_base);
+ setNumeberOfDisplayLines();
createNormalCandidateView();
mViewCandidateList2nd = (AbsoluteLayout)mViewBody.findViewById(R.id.candidates_2nd_view);
- mReadMoreButtonWidth = r.getDrawable(R.drawable.cand_up).getMinimumWidth();
-
mTextColor = r.getColor(R.color.candidate_text);
-
- mReadMoreButton = (ImageView)mViewBody.findViewById(R.id.read_more_text);
+
+ mReadMoreButton = (ImageView)mViewBody.findViewById(R.id.read_more_button);
mReadMoreButton.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
+ int resid = 0;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mIsFullView) {
- mReadMoreButton.setImageResource(R.drawable.cand_down_press);
+ resid = R.drawable.cand_up_press;
} else {
- mReadMoreButton.setImageResource(R.drawable.cand_up_press);
+ resid = R.drawable.cand_down_press;
}
- break;
+ break;
case MotionEvent.ACTION_UP:
if (mIsFullView) {
- mReadMoreButton.setImageResource(R.drawable.cand_down);
+ resid = R.drawable.cand_up;
} else {
- mReadMoreButton.setImageResource(R.drawable.cand_up);
+ resid = R.drawable.cand_down;
}
break;
default:
break;
}
+
+ if (resid != 0) {
+ mReadMoreButton.setImageResource(resid);
+ }
return false;
}
});
@@ -316,6 +502,7 @@
if (!v.isShown()) {
return;
}
+ playSoundAndVibration();
if (mIsFullView) {
mIsFullView = false;
@@ -331,23 +518,27 @@
mGestureDetector = new GestureDetector(this);
- View scaleUp = (View)inflater.inflate(R.layout.candidate_scale_up, null);
- mViewScaleUp = scaleUp;
+ mViewLongPressDialog = (View)inflater.inflate(R.layout.candidate_longpress_dialog, null);
/* select button */
- Button b = (Button)scaleUp.findViewById(R.id.candidate_select);
- b.setOnClickListener(new View.OnClickListener() {
+ Button longPressDialogButton = (Button)mViewLongPressDialog.findViewById(R.id.candidate_longpress_dialog_select);
+ longPressDialogButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
+ playSoundAndVibration();
+ clearFocusCandidate();
selectCandidate(mWord);
+ closeDialog();
}
});
/* cancel button */
- b = (Button)scaleUp.findViewById(R.id.candidate_cancel);
- b.setOnClickListener(new View.OnClickListener() {
+ longPressDialogButton = (Button)mViewLongPressDialog.findViewById(R.id.candidate_longpress_dialog_cancel);
+ longPressDialogButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
- setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ playSoundAndVibration();
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.UPDATE_CANDIDATE));
+ closeDialog();
}
});
@@ -359,15 +550,20 @@
*/
private void createNormalCandidateView() {
mViewCandidateList1st = (LinearLayout)mViewBody.findViewById(R.id.candidates_1st_view);
- mViewCandidateList1st.setOnTouchListener(mCandidateOnTouch);
- mViewCandidateList1st.setOnClickListener(mCandidateOnClick);
+ mViewCandidateList1st.setOnClickListener(mCandidateOnClick1st);
- int line = getMaxLine();
+ mViewCandidateListTab = (LinearLayout)mViewBody.findViewById(R.id.candview_tab);
+ TextView tSymbol = mViewTabSymbol;
+ tSymbol.setOnClickListener(mTabOnClick);
+ TextView tEmoticon = mViewTabEmoticon;
+ tEmoticon.setOnClickListener(mTabOnClick);
+
+ int line = SETTING_NUMBER_OF_LINEMAX;
int width = mViewWidth;
for (int i = 0; i < line; i++) {
LinearLayout lineView = new LinearLayout(mViewBodyScroll.getContext());
lineView.setOrientation(LinearLayout.HORIZONTAL);
- LinearLayout.LayoutParams layoutParams =
+ LinearLayout.LayoutParams layoutParams =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lineView.setLayoutParams(layoutParams);
@@ -402,7 +598,7 @@
if (readMore) {
displayCandidates(this.mConverter, false, -1);
- } else {
+ } else {
if (type == CandidatesViewManager.VIEW_TYPE_NORMAL) {
mIsFullView = false;
if (mDisplayEndOffset > 0) {
@@ -426,27 +622,51 @@
* @return {@code true} if display is updated; {@code false} if otherwise
*/
private boolean setViewLayout(int type) {
+
+ ViewGroup.LayoutParams params;
+ int line = (mPortrait) ? mPortraitNumberOfLine : mLandscapeNumberOfLine;
+
+ if ((mViewType == CandidatesViewManager.VIEW_TYPE_FULL)
+ && (type == CandidatesViewManager.VIEW_TYPE_NORMAL)) {
+ clearFocusCandidate();
+ }
+
mViewType = type;
- setViewScaleUp(false, null);
switch (type) {
case CandidatesViewManager.VIEW_TYPE_CLOSE:
+ params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ getCandidateMinimumHeight() * line);
+ mViewBodyScroll.setLayoutParams(params);
+ mViewCandidateListTab.setVisibility(View.GONE);
mViewCandidateBase.setMinimumHeight(-1);
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
return false;
case CandidatesViewManager.VIEW_TYPE_NORMAL:
+ params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ getCandidateMinimumHeight() * line);
+ mViewBodyScroll.setLayoutParams(params);
mViewBodyScroll.scrollTo(0, 0);
+ mViewCandidateListTab.setVisibility(View.GONE);
mViewCandidateList1st.setVisibility(View.VISIBLE);
mViewCandidateList2nd.setVisibility(View.GONE);
mViewCandidateBase.setMinimumHeight(-1);
- int line = (mPortrait) ? LINE_NUM_PORTRAIT : LINE_NUM_LANDSCAPE;
- mViewCandidateList1st.setMinimumHeight(getCandidateMinimumHeight() * line);
return false;
case CandidatesViewManager.VIEW_TYPE_FULL:
default:
+ params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ getCandidateViewHeight());
+ mViewBodyScroll.setLayoutParams(params);
+ if (mIsSymbolMode) {
+ updateSymbolType();
+ mViewCandidateListTab.setVisibility(View.VISIBLE);
+ } else {
+ mViewCandidateListTab.setVisibility(View.GONE);
+ }
mViewCandidateList2nd.setVisibility(View.VISIBLE);
- mViewCandidateBase.setMinimumHeight(mViewHeight);
+ mViewCandidateBase.setMinimumHeight(-1);
return true;
}
}
@@ -459,39 +679,94 @@
/** @see CandidatesViewManager#displayCandidates */
public void displayCandidates(WnnEngine converter) {
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+
+ if (mIsSymbolSelected) {
+ mIsSymbolSelected = false;
+ if (mSymbolMode == OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI) {
+ return;
+ }
+
+ int prevLineCount = mLineCount;
+ int prevWordCount1st = mWordCount1st;
+ clearNormalViewCandidate();
+ mWordCount1st = 0;
+ mLineCount = 1;
+ mLineLength = 0;
+ mNormalViewWordCountOfLine = 0;
+ mWnnWordArray1st.clear();
+ mTextViewArray1st.clear();
+ if (((prevWordCount1st == 0) && (mWordCount1st == 1)) ||
+ (prevLineCount < mLineCount)) {
+ mViewBodyScroll.scrollTo(0, mViewBodyScroll.getScrollY() + getCandidateMinimumHeight());
+ }
+ if (isFocusCandidate() && mHasFocusedArray1st) {
+ mCurrentFocusIndex = 0;
+ Message m = mHandler.obtainMessage(MSG_MOVE_FOCUS, 0, 0);
+ mHandler.sendMessage(m);
+ }
+ return;
+ }
+
mCanReadMore = false;
mDisplayEndOffset = 0;
mIsFullView = false;
mFullViewWordCount = 0;
mFullViewOccupyCount = 0;
mFullViewPrevLineTopId = 0;
+ mFullViewPrevView = null;
mCreateCandidateDone = false;
mNormalViewWordCountOfLine = 0;
clearCandidates();
mConverter = converter;
- setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
-
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
+
mViewCandidateTemplate.setVisibility(View.VISIBLE);
mViewCandidateTemplate.setBackgroundResource(R.drawable.cand_back);
displayCandidates(converter, true, getMaxLine());
+
+ if (mIsSymbolMode) {
+ mIsFullView = true;
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_FULL));
+ }
}
/** @see CandidatesViewManager#getMaxLine */
private int getMaxLine() {
- int maxLine = (mPortrait) ? LINE_NUM_PORTRAIT : LINE_NUM_LANDSCAPE;
+ int maxLine = (mPortrait) ? mPortraitNumberOfLine : mLandscapeNumberOfLine;
return maxLine;
}
/**
+ * Get categories text.
+ * @param String Source string replacement
+ * @return String Categories text
+ */
+ private String getCategoriesText(String categoriesString) {
+ String ret = null;
+
+ Resources r = mWnn.getResources();
+ if(categoriesString.equals(r.getString(R.string.half_symbol_categories_txt))) {
+ ret = r.getString(R.string.half_symbol_txt);
+ } else if (categoriesString.equals(r.getString(R.string.full_symbol_categories_txt))) {
+ ret = r.getString(R.string.full_symbol_txt);
+ } else {
+ ret = new String("");
+ }
+
+ return ret;
+ }
+
+ /**
* Display the candidates.
*
* @param converter {@link WnnEngine} which holds candidates.
* @param dispFirst Whether it is the first time displaying the candidates
* @param maxLine The maximum number of displaying lines
*/
- synchronized private void displayCandidates(WnnEngine converter, boolean dispFirst, int maxLine) {
+ private void displayCandidates(WnnEngine converter, boolean dispFirst, int maxLine) {
if (converter == null) {
return;
}
@@ -499,21 +774,69 @@
/* Concatenate the candidates already got and the last one in dispFirst mode */
int displayLimit = mDisplayLimit;
- boolean isHistorySequence = false;
+ boolean isDelay = false;
boolean isBreak = false;
+ if (converter instanceof SymbolList) {
+ if (!dispFirst) {
+ if (maxLine == -1) {
+ isDelay = true;
+ maxLine = mLineCount + SET_CANDIDATE_FIRST_LINE_COUNT;
+
+ mHandler.sendEmptyMessageDelayed(MSG_SET_CANDIDATES, SET_CANDIDATE_DELAY);
+
+ } else if (maxLine == SET_CANDIDATE_DELAY_LINE_COUNT) {
+ isDelay = true;
+ maxLine = mLineCount + SET_CANDIDATE_DELAY_LINE_COUNT;
+
+ mHandler.sendEmptyMessageDelayed(MSG_SET_CANDIDATES, SET_CANDIDATE_DELAY);
+ }
+ }
+ if (mSymbolMode != OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI) {
+ displayLimit = -1;
+ }
+ }
+
/* Get candidates */
WnnWord result = null;
- while ((displayLimit == -1 || mWordCount < displayLimit)) {
- result = converter.getNextCandidate();
+ String prevCandidate = null;
+ while ((displayLimit == -1 || getWordCount() < displayLimit)) {
+ for (int i = 0; i < DISPLAY_LINE_MAX_COUNT; i++) {
+ result = converter.getNextCandidate();
+ if (result == null) {
+ break;
+ }
+
+ if (converter instanceof SymbolList) {
+ break;
+ }
+
+ if ((prevCandidate == null) || !prevCandidate.equals(result.candidate)) {
+ break;
+ }
+ }
if (result == null) {
break;
+ } else {
+ prevCandidate = result.candidate;
+ }
+
+ if (converter instanceof SymbolList) {
+ if (isCategory(result)) {
+ if (getWordCount() != 0) {
+ createNextLine(false);
+ }
+ result.candidate = getCategoriesText(result.candidate);
+ setCandidate(true, result);
+ createNextLine(true);
+ continue;
+ }
}
setCandidate(false, result);
- if (dispFirst && (maxLine < mLineCount)) {
+ if ((dispFirst || isDelay) && (maxLine < mLineCount)) {
mCanReadMore = true;
isBreak = true;
break;
@@ -522,11 +845,13 @@
if (!isBreak && !mCreateCandidateDone) {
/* align left if necessary */
- createNextLine();
+ createNextLine(false);
mCreateCandidateDone = true;
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_SELECT_CANDIDATES));
}
-
- if (mWordCount < 1) { /* no candidates */
+
+ if (getWordCount() < 1) { /* no candidates */
if (mAutoHideMode) {
mWnn.setCandidatesViewShown(false);
return;
@@ -555,31 +880,51 @@
TextView template = mViewCandidateTemplate;
textLength += template.getPaddingLeft() + template.getPaddingRight();
int maxWidth = mViewWidth;
-
+ boolean isEmojiSymbol = false;
+ if (mIsSymbolMode && (word.candidate.length() < 3)) {
+ isEmojiSymbol = true;
+ }
TextView textView;
- if (mIsFullView || getMaxLine() < mLineCount) {
+
+ boolean is2nd = isFirstListOver(mIsFullView, mLineCount, word);
+ if (is2nd) {
/* Full view */
- int indentWidth = mViewWidth / FULL_VIEW_DIV;
- int occupyCount = Math.min((textLength + indentWidth) / indentWidth, FULL_VIEW_DIV);
+ int viewDivison = getCandidateViewDivison();
+ int indentWidth = mViewWidth / viewDivison;
+ int occupyCount = Math.min((textLength + indentWidth + getCandidateSpaceWidth(isEmojiSymbol)) / indentWidth, viewDivison);
if (isCategory) {
- occupyCount = FULL_VIEW_DIV;
+ occupyCount = viewDivison;
}
- if (FULL_VIEW_DIV < (mFullViewOccupyCount + occupyCount)) {
- if (FULL_VIEW_DIV != mFullViewOccupyCount) {
- mFullViewPrevParams.width += (FULL_VIEW_DIV - mFullViewOccupyCount) * indentWidth;
- mViewCandidateList2nd.updateViewLayout(mFullViewPrevView, mFullViewPrevParams);
+ if (viewDivison < (mFullViewOccupyCount + occupyCount)) {
+ if (viewDivison != mFullViewOccupyCount) {
+ mFullViewPrevParams.width += (viewDivison - mFullViewOccupyCount) * indentWidth;
+ if (mFullViewPrevView != null) {
+ mViewCandidateList2nd.updateViewLayout(mFullViewPrevView, mFullViewPrevParams);
+ }
}
mFullViewOccupyCount = 0;
- mFullViewPrevLineTopId = mFullViewPrevView.getId();
+ if (mFullViewPrevView != null) {
+ mFullViewPrevLineTopId = mFullViewPrevView.getId();
+ }
mLineCount++;
+ if (isCategory) {
+ mLineY += mCandidateCategoryMinimumHeight;
+ } else {
+ mLineY += getCandidateMinimumHeight();
+ }
+ }
+ if (mFullViewWordCount == 0) {
+ mLineY = 0;
}
ViewGroup layout = mViewCandidateList2nd;
int width = indentWidth * occupyCount;
int height = getCandidateMinimumHeight();
-
+ if (isCategory) {
+ height = mCandidateCategoryMinimumHeight;
+ }
ViewGroup.LayoutParams params = buildLayoutParams(mViewCandidateList2nd, width, height);
@@ -599,24 +944,32 @@
mFullViewPrevParams = params;
} else {
- textLength = Math.max(textLength, getCandidateMinimumWidth());
+ int viewDivison = getCandidateViewDivison();
+ int indentWidth = mViewWidth / viewDivison;
+ textLength = Math.max(textLength, indentWidth);
/* Normal view */
int nextEnd = mLineLength + textLength;
- if (mLineCount == 1) {
+ nextEnd += getCandidateSpaceWidth(isEmojiSymbol);
+
+ if (mLineCount == 1 && !mIsSymbolMode) {
maxWidth -= getCandidateMinimumWidth();
}
- if ((maxWidth < nextEnd) && (mWordCount != 0)) {
- createNextLine();
+ if ((maxWidth < nextEnd) && (getWordCount() != 0)) {
+
+ createNextLineFor1st();
if (getMaxLine() < mLineCount) {
mLineLength = 0;
/* Call this method again to add the candidate in the full view */
- setCandidate(isCategory, word);
+ if (!mIsSymbolSelected) {
+ setCandidate(isCategory, word);
+ }
return;
}
mLineLength = textLength;
+ mLineLength += getCandidateSpaceWidth(isEmojiSymbol);
} else {
mLineLength = nextEnd;
}
@@ -628,28 +981,55 @@
if (mLineCount == 1) {
mViewCandidateTemplate.setBackgroundDrawable(null);
}
- mLineLength += CANDIDATE_LEFT_ALIGN_THRESHOLD;
+ mLineLength += mCandidateLeftAlignThreshold;
+ } else {
+ int CompareLength = textLength;
+ CompareLength += getCandidateSpaceWidth(isEmojiSymbol);
}
mNormalViewWordCountOfLine++;
}
textView.setText(word.candidate);
- textView.setTextColor(mTextColor);
- textView.setId(mWordCount);
+ if (is2nd) {
+ textView.setId(mWordCount2nd);
+ } else {
+ textView.setId(mWordCount1st);
+ }
textView.setVisibility(View.VISIBLE);
textView.setPressed(false);
+ textView.setFocusable(false);
if (isCategory) {
+ textView.setText(" " + word.candidate);
+
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCandCategoryTextSize);
+ textView.setBackgroundDrawable(null);
+ textView.setGravity(Gravity.CENTER_VERTICAL);
+ textView.setMinHeight(mCandidateCategoryMinimumHeight);
+ textView.setHeight(mCandidateCategoryMinimumHeight);
+
textView.setOnClickListener(null);
textView.setOnLongClickListener(null);
- textView.setBackgroundDrawable(null);
+ textView.setTextColor(mTextColor);
} else {
- textView.setOnClickListener(mCandidateOnClick);
- textView.setOnLongClickListener(mCandidateOnLongClick);
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCandNormalTextSize);
+ textView.setGravity(Gravity.CENTER);
+ textView.setMinHeight(getCandidateMinimumHeight());
+ textView.setHeight(getCandidateMinimumHeight());
+
+ if (is2nd) {
+ textView.setOnClickListener(mCandidateOnClick2nd);
+ textView.setOnLongClickListener(mCandidateOnLongClick2nd);
+ } else {
+ textView.setOnClickListener(mCandidateOnClick1st);
+ textView.setOnLongClickListener(mCandidateOnLongClick1st);
+ }
+
textView.setBackgroundResource(R.drawable.cand_back);
+
+ textView.setTextColor(mTextColor);
}
- textView.setOnTouchListener(mCandidateOnTouch);
if (maxWidth < textLength) {
textView.setEllipsize(TextUtils.TruncateAt.END);
@@ -668,54 +1048,59 @@
if (span != null) {
SpannableString spannable = new SpannableString(" ");
- spannable.setSpan(span, 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ spannable.setSpan(span, 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannable);
}
+ textView.setPadding(0, 0, 0, 0);
- mWnnWordArray.add(mWordCount, word);
- mWordCount++;
+ if (is2nd) {
+ mWnnWordArray2nd.add(mWordCount2nd, word);
+ mWordCount2nd++;
+ mTextViewArray2nd.add(textView);
+ } else {
+ mWnnWordArray1st.add(mWordCount1st, word);
+ mWordCount1st++;
+ mTextViewArray1st.add(textView);
+ }
}
/**
* Create AbsoluteLayout.LayoutParams
* @param layout AbsoluteLayout
- * @param width
- * @param height
- * @return ViewGroup.LayoutParams
+ * @param width The width of the display
+ * @param height The height of the display
+ * @return Layout parameter
*/
private ViewGroup.LayoutParams buildLayoutParams(AbsoluteLayout layout, int width, int height) {
- int indentWidth = mViewWidth / FULL_VIEW_DIV;
+ int viewDivison = getCandidateViewDivison();
+ int indentWidth = mViewWidth / viewDivison;
int x = indentWidth * mFullViewOccupyCount;
- int nomalLine = (mPortrait) ? LINE_NUM_PORTRAIT : LINE_NUM_LANDSCAPE;
- int y = getCandidateMinimumHeight() * (mLineCount - nomalLine - 1);
+ int y = mLineY;
ViewGroup.LayoutParams params
= new AbsoluteLayout.LayoutParams(width, height, x, y);
return params;
}
-
-
-
-
-
/**
* Create a view for a candidate.
* @return the view
*/
private TextView createCandidateView() {
- TextView text = new TextView(mViewBodyScroll.getContext());
- text.setTextSize(20);
+ TextView text = new CandidateTextView(mViewBodyScroll.getContext());
+ text.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCandNormalTextSize);
text.setBackgroundResource(R.drawable.cand_back);
+ text.setCompoundDrawablePadding(0);
text.setGravity(Gravity.CENTER);
text.setSingleLine();
- text.setPadding(4, 4, 4, 4);
+ text.setPadding(0, 0, 0, 0);
text.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
1.0f));
text.setMinHeight(getCandidateMinimumHeight());
text.setMinimumWidth(getCandidateMinimumWidth());
+ text.setSoundEffectsEnabled(false);
return text;
}
@@ -723,24 +1108,30 @@
* Display {@code mReadMoreText} if there are more candidates.
*/
private void setReadMore() {
- if (mIsScaleUp) {
+ if (mIsSymbolMode) {
mReadMoreButton.setVisibility(View.GONE);
mViewCandidateTemplate.setVisibility(View.GONE);
return;
}
+ int resid = 0;
+
if (mIsFullView) {
mReadMoreButton.setVisibility(View.VISIBLE);
- mReadMoreButton.setImageResource(R.drawable.cand_down);
+ resid = R.drawable.cand_up;
} else {
if (mCanReadMore) {
mReadMoreButton.setVisibility(View.VISIBLE);
- mReadMoreButton.setImageResource(R.drawable.cand_up);
+ resid = R.drawable.cand_down;
} else {
mReadMoreButton.setVisibility(View.GONE);
mViewCandidateTemplate.setVisibility(View.GONE);
}
}
+
+ if (resid != 0) {
+ mReadMoreButton.setImageResource(resid);
+ }
}
/**
@@ -759,9 +1150,11 @@
}
}
}
-
+
/** @see CandidatesViewManager#clearCandidates */
public void clearCandidates() {
+ closeDialog();
+ clearFocusCandidate();
clearNormalViewCandidate();
ViewGroup layout = mViewCandidateList2nd;
@@ -770,15 +1163,20 @@
View v = layout.getChildAt(i);
v.setVisibility(View.GONE);
}
-
- mLineCount = 1;
- mWordCount = 0;
- mWnnWordArray.clear();
+ mLineCount = 1;
+ mWordCount1st = 0;
+ mWordCount2nd = 0;
+ mWnnWordArray1st.clear();
+ mWnnWordArray2nd.clear();
+ mTextViewArray1st.clear();
+ mTextViewArray2nd.clear();
mLineLength = 0;
+ mLineY = 0;
+
mIsFullView = false;
- setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
if (mAutoHideMode) {
setViewLayout(CandidatesViewManager.VIEW_TYPE_CLOSE);
}
@@ -799,18 +1197,83 @@
mVibrator = null;
}
if (pref.getBoolean("key_sound", false)) {
- mSound = MediaPlayer.create(mWnn, R.raw.type);
+ mSound = (AudioManager)mWnn.getSystemService(Context.AUDIO_SERVICE);
} else {
mSound = null;
}
+ setNumeberOfDisplayLines();
} catch (Exception ex) {
- Log.d("iwnn", "NO VIBRATOR");
+ Log.e("OpenWnn", "NO VIBRATOR");
}
}
/**
- * Process {@code OpenWnnEvent.CANDIDATE_VIEW_TOUCH} event.
- *
+ * Set normal mode.
+ */
+ public void setNormalMode() {
+ setReadMore();
+ mIsFullView = false;
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
+ }
+
+ /**
+ * Set full mode.
+ */
+ public void setFullMode() {
+ mIsFullView = true;
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_FULL));
+ }
+
+ /**
+ * Set symbol mode.
+ */
+ public void setSymbolMode(boolean enable, int mode) {
+ if (mIsSymbolMode && !enable) {
+ setViewType(CandidatesViewManager.VIEW_TYPE_CLOSE);
+ }
+ mSymbolMode = mode;
+ mIsSymbolMode = enable;
+ }
+
+ /**
+ * Set scroll up.
+ */
+ public void setScrollUp() {
+ if (!mViewBodyScroll.pageScroll(ScrollView.FOCUS_UP)) {
+ mViewBodyScroll.scrollTo(0, mViewBodyScroll.getChildAt(0).getHeight());
+ }
+ }
+
+ /**
+ * Set scroll down.
+ */
+ public void setScrollDown() {
+ if (!mViewBodyScroll.pageScroll(ScrollView.FOCUS_DOWN)) {
+ mViewBodyScroll.scrollTo(0, 0);
+ }
+ }
+
+ /**
+ * Set scroll full up.
+ */
+ public void setScrollFullUp() {
+ if (!mViewBodyScroll.fullScroll(ScrollView.FOCUS_UP)) {
+ mViewBodyScroll.scrollTo(0, mViewBodyScroll.getChildAt(0).getHeight());
+ }
+ }
+
+ /**
+ * Set scroll full down.
+ */
+ public void setScrollFullDown() {
+ if (!mViewBodyScroll.fullScroll(ScrollView.FOCUS_DOWN)) {
+ mViewBodyScroll.scrollTo(0, 0);
+ }
+ }
+
+ /**
+ * Process {@link OpenWnnEvent#CANDIDATE_VIEW_TOUCH} event.
+ *
* @return {@code true} if event is processed; {@code false} if otherwise
*/
public boolean onTouchSync() {
@@ -825,14 +1288,29 @@
* @param word The selected word
*/
private void selectCandidate(WnnWord word) {
- setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+ if (!mIsSymbolMode) {
+ mIsFullView = false;
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
+ }
+ mIsSymbolSelected = mIsSymbolMode;
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.SELECT_CANDIDATE, word));
+ }
+
+ private void playSoundAndVibration() {
if (mVibrator != null) {
- try { mVibrator.vibrate(30); } catch (Exception ex) { }
+ try {
+ mVibrator.vibrate(5);
+ } catch (Exception ex) {
+ Log.e("OpenWnn", "TextCandidatesViewManager::selectCandidate Vibrator " + ex.toString());
+ }
}
if (mSound != null) {
- try { mSound.seekTo(0); mSound.start(); } catch (Exception ex) { }
+ try {
+ mSound.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD, -1);
+ } catch (Exception ex) {
+ Log.e("OpenWnn", "TextCandidatesViewManager::selectCandidate Sound " + ex.toString());
+ }
}
- mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.SELECT_CANDIDATE, word));
}
/** @see android.view.GestureDetector.OnGestureListener#onDown */
@@ -842,15 +1320,15 @@
/** @see android.view.GestureDetector.OnGestureListener#onFling */
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
- if (mIsScaleUp) {
- return false;
- }
-
boolean consumed = false;
if (arg1 != null && arg0 != null && arg1.getY() < arg0.getY()) {
if ((mViewType == CandidatesViewManager.VIEW_TYPE_NORMAL) && mCanReadMore) {
if (mVibrator != null) {
- try { mVibrator.vibrate(30); } catch (Exception ex) { }
+ try {
+ mVibrator.vibrate(5);
+ } catch (Exception ex) {
+ Log.e("iwnn", "TextCandidatesViewManager::onFling Vibrator " + ex.toString());
+ }
}
mIsFullView = true;
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_FULL));
@@ -859,7 +1337,11 @@
} else {
if (mViewBodyScroll.getScrollY() == 0) {
if (mVibrator != null) {
- try { mVibrator.vibrate(30); } catch (Exception ex) { }
+ try {
+ mVibrator.vibrate(5);
+ } catch (Exception ex) {
+ Log.e("iwnn", "TextCandidatesViewManager::onFling Sound " + ex.toString());
+ }
}
mIsFullView = false;
mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
@@ -907,77 +1389,73 @@
}
/**
- * Switch list/enlarge view mode.
- * @param up {@code true}:enlarge, {@code false}:list
- * @param word The candidate word to be enlarged.
+ * Create a layout for the next line.
*/
- private void setViewScaleUp(boolean up, WnnWord word) {
- if (up == mIsScaleUp || (mViewScaleUp == null)) {
- return;
- }
-
- if (up) {
- setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
- mViewCandidateList1st.setVisibility(View.GONE);
- mViewCandidateBase.setMinimumHeight(-1);
- mViewCandidateBase.addView(mViewScaleUp);
- TextView text = (TextView)mViewScaleUp.findViewById(R.id.candidate_scale_up_text);
- text.setText(word.candidate);
- if (!mPortrait) {
- Resources r = mViewBodyScroll.getContext().getResources();
- text.setTextSize(r.getDimensionPixelSize(R.dimen.candidate_delete_word_size_landscape));
+ private void createNextLine(boolean isCategory) {
+ if (isFirstListOver(mIsFullView, mLineCount, null)) {
+ /* Full view */
+ mFullViewOccupyCount = 0;
+ if (mFullViewPrevView != null) {
+ mFullViewPrevLineTopId = mFullViewPrevView.getId();
}
-
- mIsScaleUp = true;
- setReadMore();
+ if (isCategory) {
+ mLineY += mCandidateCategoryMinimumHeight;
+ } else {
+ mLineY += getCandidateMinimumHeight();
+ }
+ mLineCount++;
} else {
- mIsScaleUp = false;
- mViewCandidateBase.removeView(mViewScaleUp);
+ createNextLineFor1st();
}
}
/**
* Create a layout for the next line.
*/
- private void createNextLine() {
- int lineCount = mLineCount;
- if (mIsFullView || getMaxLine() < lineCount) {
- /* Full view */
- mFullViewOccupyCount = 0;
- mFullViewPrevLineTopId = mFullViewPrevView.getId();
+ private void createNextLineFor1st() {
+ LinearLayout lineView = (LinearLayout) mViewCandidateList1st.getChildAt(mLineCount - 1);
+ float weight = 0;
+ if (mLineLength < mCandidateLeftAlignThreshold) {
+ if (mLineCount == 1) {
+ mViewCandidateTemplate.setVisibility(View.GONE);
+ }
} else {
- /* Normal view */
- LinearLayout lineView = (LinearLayout) mViewCandidateList1st.getChildAt(lineCount - 1);
- float weight = 0;
- if (mLineLength < CANDIDATE_LEFT_ALIGN_THRESHOLD) {
- if (lineCount == 1) {
- mViewCandidateTemplate.setVisibility(View.GONE);
- }
- } else {
- weight = 1.0f;
- }
-
- LinearLayout.LayoutParams params
- = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- weight);
-
- int child = lineView.getChildCount();
- for (int i = 0; i < child; i++) {
- View view = lineView.getChildAt(i);
-
- if (view != mViewCandidateTemplate) {
- view.setLayoutParams(params);
- }
- }
-
- mLineLength = 0;
- mNormalViewWordCountOfLine = 0;
+ weight = 1.0f;
}
+
+ LinearLayout.LayoutParams params
+ = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ weight);
+
+ int child = lineView.getChildCount();
+ for (int i = 0; i < child; i++) {
+ View view = lineView.getChildAt(i);
+
+ if (view != mViewCandidateTemplate) {
+ view.setLayoutParams(params);
+ view.setPadding(0, 0, 0, 0);
+ }
+ }
+
+ mLineLength = 0;
+ mNormalViewWordCountOfLine = 0;
mLineCount++;
}
/**
+ * Judge if it's a category.
+ *
+ * @return {@code true} if category
+ */
+ boolean isCategory(WnnWord word) {
+ int length = word.candidate.length();
+ return ((length > 3) && (word.candidate.charAt(0) == '['));
+ }
+
+ /**
+ * Get a minimum width of a candidate view.
+ *
* @return the minimum width of a candidate view.
*/
private int getCandidateMinimumWidth() {
@@ -990,4 +1468,444 @@
private int getCandidateMinimumHeight() {
return mCandidateMinimumHeight;
}
+
+ /**
+ * Get a height of a candidate view.
+ *
+ * @return the height of a candidate view.
+ */
+ private int getCandidateViewHeight() {
+ if (OpenWnn.isXLarge()) {
+ return mKeyboardHeight + mCandidateOneLineMinimumHeight - mSymbolKeyboardHeight
+ - mSymbolKeyboardTabHeight;
+ } else {
+ int numberOfLine = (mPortrait) ? mPortraitNumberOfLine : mLandscapeNumberOfLine;
+ Resources resource = mWnn.getResources();
+ Drawable keyboardBackground = resource.getDrawable(R.drawable.keyboard_background);
+ Rect keyboardPadding = new Rect(0 ,0 ,0 ,0);
+ keyboardBackground.getPadding(keyboardPadding);
+ int keyboardTotalPadding = keyboardPadding.top + keyboardPadding.bottom;
+ if (mIsSymbolMode) {
+ return mKeyboardHeight + numberOfLine * getCandidateMinimumHeight()
+ - mSymbolKeyboardHeight - mSymbolKeyboardTabHeight;
+ } else if (!mHardKeyboardHidden) {
+ return mKeyboardHeight + numberOfLine * getCandidateMinimumHeight()
+ - mSymbolKeyboardHeight;
+ } else {
+ return mKeyboardHeight + keyboardTotalPadding
+ + numberOfLine * getCandidateMinimumHeight();
+ }
+ }
+ }
+
+ /**
+ * Update symbol type.
+ */
+ private void updateSymbolType() {
+ switch (mSymbolMode) {
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL:
+ updateTabStatus(mViewTabSymbol, true, true);
+ updateTabStatus(mViewTabEmoticon, mEnableEmoticon, false);
+ break;
+
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI:
+ updateTabStatus(mViewTabSymbol, true, false);
+ updateTabStatus(mViewTabEmoticon, mEnableEmoticon, true);
+ break;
+
+ default:
+ updateTabStatus(mViewTabSymbol, true, false);
+ updateTabStatus(mViewTabEmoticon, mEnableEmoticon, false);
+ break;
+ }
+ }
+
+ /**
+ * Update tab status.
+ *
+ * @param tab The tab view.
+ * @param enabled The tab is enabled.
+ * @param selected The tab is selected.
+ */
+ private void updateTabStatus(TextView tab, boolean enabled, boolean selected) {
+ tab.setVisibility(View.VISIBLE);
+ tab.setEnabled(enabled);
+ int backgroundId = 0;
+ int colorId = 0;
+ if (enabled) {
+ if (selected) {
+ backgroundId = R.drawable.cand_tab;
+ colorId = R.color.tab_textcolor_select;
+ } else {
+ backgroundId = R.drawable.cand_tab_noselect;
+ colorId = R.color.tab_textcolor_no_select;
+ }
+ } else {
+ backgroundId = R.drawable.cand_tab_noselect;
+ colorId = R.color.tab_textcolor_disable;
+ }
+ tab.setBackgroundResource(backgroundId);
+ tab.setTextColor(mWnn.getResources().getColor(colorId));
+ }
+
+ /**
+ * Get candidate number of division.
+ * @return Number of division
+ */
+ private int getCandidateViewDivison() {
+ int viewDivison;
+
+ if (mIsSymbolMode) {
+ int mode = mSymbolMode;
+ switch (mode) {
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL:
+ viewDivison = (mPortrait) ? FULL_VIEW_SYMBOL_DIV_PORT : FULL_VIEW_SYMBOL_DIV_LAND;
+ break;
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI:
+ default:
+ viewDivison = FULL_VIEW_DIV;
+ break;
+ }
+ } else {
+ viewDivison = FULL_VIEW_DIV;
+ }
+ return viewDivison;
+ }
+
+ /**
+ * @return Word count
+ */
+ private int getWordCount() {
+ return mWordCount1st + mWordCount2nd;
+ }
+
+ /**
+ * @return Add second
+ */
+ private boolean isFirstListOver(boolean isFullView, int lineCount, WnnWord word) {
+
+ if (mIsSymbolMode) {
+ switch (mSymbolMode) {
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL_KAO_MOJI:
+ return true;
+ case OpenWnnJAJP.ENGINE_MODE_SYMBOL:
+ return true;
+ default:
+ return (isFullView || getMaxLine() < lineCount);
+ }
+ } else {
+ return (isFullView || getMaxLine() < lineCount);
+ }
+ }
+
+ /**
+ * @return Candidate space width
+ */
+ private int getCandidateSpaceWidth(boolean isEmojiSymbol) {
+ Resources r = mWnn.getResources();
+ if (mPortrait) {
+ if (isEmojiSymbol) {
+ return 0;
+ } else {
+ return r.getDimensionPixelSize(R.dimen.cand_space_width);
+ }
+ } else {
+ if (isEmojiSymbol) {
+ return r.getDimensionPixelSize(R.dimen.cand_space_width_emoji_symbol);
+ } else {
+ return r.getDimensionPixelSize(R.dimen.cand_space_width);
+ }
+ }
+ }
+
+ /**
+ * KeyEvent action for the candidate view.
+ *
+ * @param key Key event
+ */
+ public void processMoveKeyEvent(int key) {
+ if (!mViewBody.isShown()) {
+ return;
+ }
+
+ switch (key) {
+ case KeyEvent.KEYCODE_DPAD_UP:
+ moveFocus(-1, true);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ moveFocus(1, true);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ moveFocus(-1, false);
+ break;
+
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ moveFocus(1, false);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Get a flag candidate is focused now.
+ *
+ * @return the Candidate is focused of a flag.
+ */
+ public boolean isFocusCandidate(){
+ if (mCurrentFocusIndex != FOCUS_NONE) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Give focus to View of candidate.
+ */
+ public void setViewStatusOfFocusedCandidate(){
+ View view = mFocusedView;
+ if (view != null) {
+ view.setBackgroundDrawable(mFocusedViewBackground);
+ view.setPadding(0, 0, 0, 0);
+ }
+
+ TextView v = getFocusedView();
+ mFocusedView = v;
+ if (v != null) {
+ mFocusedViewBackground = v.getBackground();
+ v.setBackgroundResource(R.drawable.cand_back_focuse);
+ v.setPadding(0, 0, 0, 0);
+
+ int viewBodyTop = getViewTopOnScreen(mViewBodyScroll);
+ int viewBodyBottom = viewBodyTop + mViewBodyScroll.getHeight();
+ int focusedViewTop = getViewTopOnScreen(v);
+ int focusedViewBottom = focusedViewTop + v.getHeight();
+
+ if (focusedViewBottom > viewBodyBottom) {
+ mViewBodyScroll.scrollBy(0, (focusedViewBottom - viewBodyBottom));
+ } else if (focusedViewTop < viewBodyTop) {
+ mViewBodyScroll.scrollBy(0, (focusedViewTop - viewBodyTop));
+ }
+ }
+ }
+
+ /**
+ * Clear focus to selected candidate.
+ */
+ public void clearFocusCandidate(){
+ View view = mFocusedView;
+ if (view != null) {
+ view.setBackgroundDrawable(mFocusedViewBackground);
+ view.setPadding(0, 0, 0, 0);
+ mFocusedView = null;
+ }
+
+ mFocusAxisX = 0;
+ mHasFocusedArray1st = true;
+ mCurrentFocusIndex = FOCUS_NONE;
+ mHandler.removeMessages(MSG_MOVE_FOCUS);
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.FOCUS_CANDIDATE_END));
+ }
+
+ /**
+ * @see CandidatesViewManager#selectFocusCandidate
+ */
+ public void selectFocusCandidate(){
+ if (mCurrentFocusIndex != FOCUS_NONE) {
+ WnnWord word = getFocusedWnnWord();
+
+ if (mHandler.hasMessages(MSG_SET_CANDIDATES)) {
+ mWnnWordSelectedList.add(word);
+ } else {
+ selectCandidate(word);
+ }
+ }
+ }
+
+ /** @see CandidatesViewManager#getFocusedWnnWord */
+ public WnnWord getFocusedWnnWord() {
+ return getWnnWord(mCurrentFocusIndex);
+ }
+
+ /**
+ * Get WnnWord.
+ *
+ * @return WnnWord word
+ */
+ public WnnWord getWnnWord(int index) {
+ WnnWord word = null;
+ if (index < 0) {
+ index = 0;
+ mHandler.removeMessages(MSG_MOVE_FOCUS);
+ Log.i("iwnn", "TextCandidatesViewManager::getWnnWord index < 0 ");
+ } else {
+ int size = mHasFocusedArray1st ? mWnnWordArray1st.size() : mWnnWordArray2nd.size();
+ if (index >= size) {
+ index = size - 1;
+ mHandler.removeMessages(MSG_MOVE_FOCUS);
+ Log.i("iwnn", "TextCandidatesViewManager::getWnnWord index > candidate max ");
+ }
+ }
+
+ if (mHasFocusedArray1st) {
+ word = mWnnWordArray1st.get(index);
+ } else {
+ word = mWnnWordArray2nd.get(index);
+ }
+ return word;
+ }
+
+ /**
+ * Set display candidate line from SharedPreferences.
+ */
+ private void setNumeberOfDisplayLines(){
+ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mWnn);
+ mPortraitNumberOfLine = Integer.parseInt(pref.getString("setting_portrait", "2"));
+ mLandscapeNumberOfLine = Integer.parseInt(pref.getString("setting_landscape", "1"));
+ }
+
+ /**
+ * Set emoticon enabled.
+ */
+ public void setEnableEmoticon(boolean enableEmoticon) {
+ mEnableEmoticon = enableEmoticon;
+ }
+
+ /**
+ * Get View of focus candidate.
+ */
+ public TextView getFocusedView() {
+ if (mCurrentFocusIndex == FOCUS_NONE) {
+ return null;
+ }
+ TextView t;
+ if (mHasFocusedArray1st) {
+ t = mTextViewArray1st.get(mCurrentFocusIndex);
+ } else {
+ t = mTextViewArray2nd.get(mCurrentFocusIndex);
+ }
+ return t;
+ }
+
+ /**
+ * Move the focus to next candidate.
+ *
+ * @param direction The direction of increment or decrement.
+ * @param updown {@code true} if move is up or down.
+ */
+ public void moveFocus(int direction, boolean updown) {
+ boolean isStart = (mCurrentFocusIndex == FOCUS_NONE);
+ if (direction == 0) {
+ setViewStatusOfFocusedCandidate();
+ }
+
+ int size1st = mTextViewArray1st.size();
+ if (mHasFocusedArray1st && (size1st == 0)) {
+ mHasFocusedArray1st = false;
+ }
+ ArrayList<TextView> list = mHasFocusedArray1st ? mTextViewArray1st : mTextViewArray2nd;
+ int size = list.size();
+ int start = (mCurrentFocusIndex == FOCUS_NONE) ? 0 : (mCurrentFocusIndex + direction);
+
+ int index = -1;
+ boolean hasChangedLine = false;
+ for (int i = start; (0 <= i) && (i < size); i += direction) {
+ TextView view = list.get(i);
+ if (!view.isShown()) {
+ break;
+ }
+
+ if (mIsSymbolMode && (view.getBackground() == null)) {
+ continue;
+ }
+
+ if (updown) {
+ int left = view.getLeft();
+ if ((left <= mFocusAxisX)
+ && (mFocusAxisX < view.getRight())) {
+ index = i;
+ break;
+ }
+
+ if (left == 0) {
+ hasChangedLine = true;
+ }
+ } else {
+ index = i;
+ break;
+ }
+ }
+
+ if ((index < 0) && hasChangedLine && !mHasFocusedArray1st && (0 < direction)) {
+ index = mTextViewArray2nd.size() - 1;
+ }
+
+ if (0 <= index) {
+ mCurrentFocusIndex = index;
+ setViewStatusOfFocusedCandidate();
+ if (!updown) {
+ mFocusAxisX = getFocusedView().getLeft();
+ }
+ } else {
+ if (mCanReadMore && (0 < size1st)) {
+
+ if ((mHasFocusedArray1st && (direction < 0))
+ || (!mHasFocusedArray1st && (0 < direction))) {
+ updown = false;
+ }
+
+ mHasFocusedArray1st = !mHasFocusedArray1st;
+
+ if (!mHasFocusedArray1st && !mIsFullView) {
+ setFullMode();
+ }
+ }
+
+ if (size1st == 0) {
+ updown = false;
+ }
+
+ if (0 < direction) {
+ mCurrentFocusIndex = -1;
+ } else {
+ mCurrentFocusIndex = (mHasFocusedArray1st ? size1st : mTextViewArray2nd.size());
+ }
+ Message m = mHandler.obtainMessage(MSG_MOVE_FOCUS, direction, updown ? 1 : 0);
+ mHandler.sendMessage(m);
+ }
+
+ if (isStart) {
+ mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.FOCUS_CANDIDATE_START));
+ }
+ }
+
+ /**
+ * Set hardkeyboard hidden.
+ *
+ * @param hardKeyboardHidden hardkeyaboard hidden.
+ */
+ public void setHardKeyboardHidden(boolean hardKeyboardHidden) {
+ mHardKeyboardHidden = hardKeyboardHidden;
+ }
+
+ /**
+ * Get view top position on screen.
+ *
+ * @param view target view.
+ * @return int view top position on screen
+ */
+ public int getViewTopOnScreen(View view) {
+ int[] location = new int[2];
+ view.getLocationOnScreen(location);
+ return location[1];
+ }
+
+
+ /** @see CandidatesViewManager#setCandidateMsgRemove */
+ public void setCandidateMsgRemove() {
+ mHandler.removeMessages(MSG_SET_CANDIDATES);
+ }
}
diff --git a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
index 9a023e5..cf774ce 100644
--- a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
+++ b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -113,7 +113,6 @@
super.onCreate(savedInstanceState);
/* create view from XML layout */
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.user_dictionary_tools_edit);
/* get widgets */
diff --git a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
index 15d1f4a..0c584b6 100644
--- a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
+++ b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,11 +21,15 @@
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Configuration;
import android.graphics.Color;
+import android.graphics.Paint.FontMetricsInt;
import android.os.Bundle;
+import android.text.TextPaint;
import android.text.TextUtils;
import android.util.Log;
import android.view.Display;
+import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
@@ -144,6 +148,9 @@
/** Page right button */
private Button mRightButton = null;
+ /** for isXLarge */
+ private static boolean mIsXLarge = false;
+
/**
* Send the specified event to IME
*
@@ -154,10 +161,8 @@
/** Get the comparator for sorting the list */
protected abstract Comparator<WnnWord> getComparator();
- /**
- * Create the header
- */
- protected abstract void headerCreate();
+ /** Show Dialog Num */
+ private int mDialogShow = -1;
/** @see android.app.Activity#onCreate */
@Override protected void onCreate(Bundle savedInstanceState) {
@@ -166,7 +171,6 @@
super.onCreate(savedInstanceState);
/* create XML layout */
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.user_dictionary_tools_list);
mTableLayout = (TableLayout)findViewById(R.id.user_dictionary_tools_table);
@@ -201,18 +205,39 @@
/** @see android.app.Activity#onStart */
@Override protected void onStart() {
super.onStart();
+ mDialogShow = -1;
sBeforeSelectedViewID = -1;
sJustBeforeActionTime = -1;
mWordList = getWords();
- headerCreate();
final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
leftText.setText(mWordList.size() + "/" + MAX_WORD_COUNT);
+ mIsXLarge = ((getResources().getConfiguration().screenLayout &
+ Configuration.SCREENLAYOUT_SIZE_MASK)
+ == Configuration.SCREENLAYOUT_SIZE_XLARGE);
updateWordList();
}
/**
+ * Called when the system is about to start resuming a previous activity.
+ *
+ * @see android.app.Activity#onPause
+ */
+ @Override protected void onPause() {
+
+ if (mDialogShow == DIALOG_CONTROL_DELETE_CONFIRM) {
+ dismissDialog(DIALOG_CONTROL_DELETE_CONFIRM);
+ mDialogShow = -1;
+ } else if (mDialogShow == DIALOG_CONTROL_INIT_CONFIRM){
+ dismissDialog(DIALOG_CONTROL_INIT_CONFIRM);
+ mDialogShow = -1;
+ }
+
+ super.onPause();
+ }
+
+ /**
* Set parameters of table
*
* @param w The width of the table
@@ -308,12 +333,14 @@
case MENU_ITEM_DELETE:
/* delete the word (show dialog) */
showDialog(DIALOG_CONTROL_DELETE_CONFIRM);
+ mDialogShow = DIALOG_CONTROL_DELETE_CONFIRM;
ret = true;
break;
case MENU_ITEM_INIT:
/* clear the dictionary (show dialog) */
showDialog(DIALOG_CONTROL_INIT_CONFIRM);
+ mDialogShow = DIALOG_CONTROL_INIT_CONFIRM;
ret = true;
break;
@@ -372,6 +399,7 @@
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int button) {
+ mDialogShow = -1;
CharSequence focusString = ((TextView)sFocusingView).getText();
CharSequence focusPairString = ((TextView)sFocusingPairView).getText();
WnnWord wnnWordSearch = new WnnWord();
@@ -422,6 +450,7 @@
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int button) {
+ mDialogShow = -1;
/* clear the user dictionary */
OpenWnnEvent ev = new OpenWnnEvent(OpenWnnEvent.INITIALIZE_USER_DICTIONARY, new WnnWord());
@@ -638,6 +667,12 @@
Display display = windowManager.getDefaultDisplay();
int system_width = display.getWidth();
+ UserDictionaryToolsListFocus dummy = new UserDictionaryToolsListFocus(this);
+ dummy.setTextSize(WORD_TEXT_SIZE);
+ TextPaint paint = dummy.getPaint();
+ FontMetricsInt fontMetrics = paint.getFontMetricsInt();
+ int row_hight = (Math.abs(fontMetrics.top) + fontMetrics.bottom) * 2;
+
for (int i = 1; i <= MAX_LIST_WORD_COUNT; i++) {
TableRow row = new TableRow(this);
UserDictionaryToolsListFocus stroke = new UserDictionaryToolsListFocus(this);
@@ -654,6 +689,10 @@
stroke.setFocusableInTouchMode(true);
stroke.setOnTouchListener(this);
stroke.setOnFocusChangeListener(this);
+ if (isXLarge()) {
+ stroke.setHeight(row_hight);
+ stroke.setGravity(Gravity.CENTER_VERTICAL);
+ }
UserDictionaryToolsListFocus candidate = new UserDictionaryToolsListFocus(this);
candidate.setId(i+MAX_WORD_COUNT);
@@ -670,6 +709,10 @@
candidate.setOnTouchListener(this);
candidate.setOnFocusChangeListener(this);
+ if (isXLarge()) {
+ candidate.setHeight(row_hight);
+ candidate.setGravity(Gravity.CENTER_VERTICAL);
+ }
stroke.setPairView(candidate);
candidate.setPairView(stroke);
@@ -726,4 +769,14 @@
}
mTableLayout.requestLayout();
}
+
+ /**
+ * Whether the x large mode.
+ *
+ * @return {@code true} if x large; {@code false} if not x large.
+ */
+ public static boolean isXLarge() {
+ return mIsXLarge;
+ }
+
}
diff --git a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsListFocus.java b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsListFocus.java
index 4a6a8fe..51b9bf6 100644
--- a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsListFocus.java
+++ b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsListFocus.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnClause.java b/src/jp/co/omronsoft/openwnn/WnnClause.java
index 6d4babd..aabd2ce 100644
--- a/src/jp/co/omronsoft/openwnn/WnnClause.java
+++ b/src/jp/co/omronsoft/openwnn/WnnClause.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnDictionary.java b/src/jp/co/omronsoft/openwnn/WnnDictionary.java
index c4b2aa5..e58955e 100644
--- a/src/jp/co/omronsoft/openwnn/WnnDictionary.java
+++ b/src/jp/co/omronsoft/openwnn/WnnDictionary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnEngine.java b/src/jp/co/omronsoft/openwnn/WnnEngine.java
index 4d23966..a24aa37 100644
--- a/src/jp/co/omronsoft/openwnn/WnnEngine.java
+++ b/src/jp/co/omronsoft/openwnn/WnnEngine.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnPOS.java b/src/jp/co/omronsoft/openwnn/WnnPOS.java
index dd61f2e..33fd6a0 100644
--- a/src/jp/co/omronsoft/openwnn/WnnPOS.java
+++ b/src/jp/co/omronsoft/openwnn/WnnPOS.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnSentence.java b/src/jp/co/omronsoft/openwnn/WnnSentence.java
index c6ffbca..6644b7d 100644
--- a/src/jp/co/omronsoft/openwnn/WnnSentence.java
+++ b/src/jp/co/omronsoft/openwnn/WnnSentence.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/jp/co/omronsoft/openwnn/WnnWord.java b/src/jp/co/omronsoft/openwnn/WnnWord.java
index fb2f7c6..0ac065c 100644
--- a/src/jp/co/omronsoft/openwnn/WnnWord.java
+++ b/src/jp/co/omronsoft/openwnn/WnnWord.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008,2009 OMRON SOFTWARE Co., Ltd.
+ * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.