Merge "Rename altchars.xml to keep translation imports from altering it." into gingerbread
diff --git a/java/res/drawable-hdpi/working.png b/java/res/drawable-hdpi/working.png
index 8b51ed1..5ea7023 100755
--- a/java/res/drawable-hdpi/working.png
+++ b/java/res/drawable-hdpi/working.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png
old mode 100755
new mode 100644
index 48ebb61..53fe9c9
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
old mode 100755
new mode 100644
index 38b8b48..649ef97
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
old mode 100755
new mode 100644
index 147c1b2..93f7d87
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png
old mode 100755
new mode 100644
index f8affea..8560b3b
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
old mode 100755
new mode 100644
index 75962e9..778abaf
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png
old mode 100755
new mode 100644
index b7dccfe..2a23945
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png
old mode 100755
new mode 100644
index 9ccad80..6af2d8d
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
old mode 100755
new mode 100644
index ce58880..02d0fcf
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_normal.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png
index fe6c517..125ff13 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_popup_selected.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png
old mode 100755
new mode 100644
index d09bd3d..fdaf699
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/cancel.png b/java/res/drawable-mdpi/cancel.png
index 081532b..713a378 100644
--- a/java/res/drawable-mdpi/cancel.png
+++ b/java/res/drawable-mdpi/cancel.png
Binary files differ
diff --git a/java/res/drawable-mdpi/dialog_bubble_step02.9.png b/java/res/drawable-mdpi/dialog_bubble_step02.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/java/res/drawable-mdpi/dialog_bubble_step07.9.png b/java/res/drawable-mdpi/dialog_bubble_step07.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_subtype_keyboard.png b/java/res/drawable-mdpi/ic_subtype_keyboard.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_dark_background.9.png b/java/res/drawable-mdpi/keyboard_dark_background.9.png
old mode 100755
new mode 100644
index 2d5c020..a2136f7
--- a/java/res/drawable-mdpi/keyboard_dark_background.9.png
+++ b/java/res/drawable-mdpi/keyboard_dark_background.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png
index 2a80f09..a84c19c 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
old mode 100755
new mode 100644
index 29aa285..82513aa
--- a/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_suggest_strip.9.png b/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
index 71bf5e8..fa6c0fe 100644
--- a/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
index c9413d7..3639363 100644
--- a/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
Binary files differ
diff --git a/java/res/drawable-mdpi/mic_slash.png b/java/res/drawable-mdpi/mic_slash.png
index 0b0fb58..d04b563 100644
--- a/java/res/drawable-mdpi/mic_slash.png
+++ b/java/res/drawable-mdpi/mic_slash.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ok_cancel.png b/java/res/drawable-mdpi/ok_cancel.png
index 0601d32..20d10f9 100644
--- a/java/res/drawable-mdpi/ok_cancel.png
+++ b/java/res/drawable-mdpi/ok_cancel.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level0.png b/java/res/drawable-mdpi/speak_now_level0.png
index abc8454..5bd1360 100644
--- a/java/res/drawable-mdpi/speak_now_level0.png
+++ b/java/res/drawable-mdpi/speak_now_level0.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level1.png b/java/res/drawable-mdpi/speak_now_level1.png
index 67cb235..ccb76b8 100644
--- a/java/res/drawable-mdpi/speak_now_level1.png
+++ b/java/res/drawable-mdpi/speak_now_level1.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level2.png b/java/res/drawable-mdpi/speak_now_level2.png
index 1e07f26..715f900 100644
--- a/java/res/drawable-mdpi/speak_now_level2.png
+++ b/java/res/drawable-mdpi/speak_now_level2.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level3.png b/java/res/drawable-mdpi/speak_now_level3.png
index 31991da..725248a 100644
--- a/java/res/drawable-mdpi/speak_now_level3.png
+++ b/java/res/drawable-mdpi/speak_now_level3.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level4.png b/java/res/drawable-mdpi/speak_now_level4.png
index 7363ca8..ff6c50b 100644
--- a/java/res/drawable-mdpi/speak_now_level4.png
+++ b/java/res/drawable-mdpi/speak_now_level4.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level5.png b/java/res/drawable-mdpi/speak_now_level5.png
index 9034908..a5d6b89 100644
--- a/java/res/drawable-mdpi/speak_now_level5.png
+++ b/java/res/drawable-mdpi/speak_now_level5.png
Binary files differ
diff --git a/java/res/drawable-mdpi/speak_now_level6.png b/java/res/drawable-mdpi/speak_now_level6.png
index 3eaa9bd..dcdb48d 100644
--- a/java/res/drawable-mdpi/speak_now_level6.png
+++ b/java/res/drawable-mdpi/speak_now_level6.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete.png b/java/res/drawable-mdpi/sym_keyboard_delete.png
index 43a033e..1b0f3f8 100644
--- a/java/res/drawable-mdpi/sym_keyboard_delete.png
+++ b/java/res/drawable-mdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_done.png b/java/res/drawable-mdpi/sym_keyboard_done.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
index bc11cf3..c556c35 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
index 1edb10b..a79f158 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_done.png b/java/res/drawable-mdpi/sym_keyboard_feedback_done.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
index e3f80fa..eecb026 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
index 3cb0d99..7e10ae3 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png b/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
index 247d5b3..3ed0782 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
index aac7376..bc8f1cf 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_return.png b/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
index 03d9c9b..dd99ff3 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_search.png b/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
old mode 100755
new mode 100644
index f4af341..6b8e01d
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png b/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png
index 08ba18f..03bad18 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_settings.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
index 97f4661..d563575 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
old mode 100755
new mode 100644
index 7194b30..494524a
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_space.png b/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
index 739db68..36eb60c 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
index 593fa67..a10dc8f 100644
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
index 91eda5f..7067a8b 100644
--- a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
index 62a5beb..f7a133d 100644
--- a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_mic.png b/java/res/drawable-mdpi/sym_keyboard_mic.png
index a758095..e926b3f 100644
--- a/java/res/drawable-mdpi/sym_keyboard_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_mic.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return.png b/java/res/drawable-mdpi/sym_keyboard_return.png
index 17f2574..0c10f00 100644
--- a/java/res/drawable-mdpi/sym_keyboard_return.png
+++ b/java/res/drawable-mdpi/sym_keyboard_return.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_search.png b/java/res/drawable-mdpi/sym_keyboard_search.png
old mode 100755
new mode 100644
index 127755d..614f85f
--- a/java/res/drawable-mdpi/sym_keyboard_search.png
+++ b/java/res/drawable-mdpi/sym_keyboard_search.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings.png b/java/res/drawable-mdpi/sym_keyboard_settings.png
index f3bcdbc..ad7618f 100644
--- a/java/res/drawable-mdpi/sym_keyboard_settings.png
+++ b/java/res/drawable-mdpi/sym_keyboard_settings.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift.png b/java/res/drawable-mdpi/sym_keyboard_shift.png
index 0566e5a..5109b04 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lock.png b/java/res/drawable-mdpi/sym_keyboard_shift_lock.png
new file mode 100644
index 0000000..244179c
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lock.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
old mode 100755
new mode 100644
index ccaf05d..244179c
--- a/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space.png b/java/res/drawable-mdpi/sym_keyboard_space.png
index 4e6273b..cbe4a88 100644
--- a/java/res/drawable-mdpi/sym_keyboard_space.png
+++ b/java/res/drawable-mdpi/sym_keyboard_space.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_tab.png b/java/res/drawable-mdpi/sym_keyboard_tab.png
index cd9daff..eddb9a5 100644
--- a/java/res/drawable-mdpi/sym_keyboard_tab.png
+++ b/java/res/drawable-mdpi/sym_keyboard_tab.png
Binary files differ
diff --git a/java/res/drawable-mdpi/working.png b/java/res/drawable-mdpi/working.png
index 6246a6d..4a930c5 100644
--- a/java/res/drawable-mdpi/working.png
+++ b/java/res/drawable-mdpi/working.png
Binary files differ
diff --git a/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml b/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
new file mode 100644
index 0000000..9b6d23b
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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">
+    <item android:state_pressed="true"
+          android:drawable="@drawable/btn_keyboard_key_light_popup_selected" />
+    <item android:drawable="@drawable/btn_keyboard_key_light_popup_normal" />
+</selector>
diff --git a/java/res/layout/candidate_preview.xml b/java/res/layout/candidate_preview.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/candidates.xml b/java/res/layout/candidates.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_basic.xml b/java/res/layout/input_basic.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_basic_highcontrast.xml b/java/res/layout/input_basic_highcontrast.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_stone_bold.xml b/java/res/layout/input_stone_bold.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_stone_normal.xml b/java/res/layout/input_stone_normal.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_stone_popup.xml b/java/res/layout/input_stone_popup.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/input_trans.xml b/java/res/layout/input_trans.xml
old mode 100755
new mode 100644
diff --git a/java/res/layout/keyboard_key_preview.xml b/java/res/layout/key_preview.xml
similarity index 100%
rename from java/res/layout/keyboard_key_preview.xml
rename to java/res/layout/key_preview.xml
diff --git a/java/res/layout/input_gingerbread_popup.xml b/java/res/layout/keyboard_popup.xml
old mode 100755
new mode 100644
similarity index 94%
rename from java/res/layout/input_gingerbread_popup.xml
rename to java/res/layout/keyboard_popup.xml
index 0cc953e..1005e7e
--- a/java/res/layout/input_gingerbread_popup.xml
+++ b/java/res/layout/keyboard_popup.xml
@@ -17,7 +17,6 @@
 ** limitations under the License.
 */
 -->
-
 <LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
@@ -33,7 +32,6 @@
             android:layout_height="wrap_content"
             android:background="@drawable/keyboard_dark_background"
 
-            latin:keyBackground="@drawable/btn_keyboard_key_gingerbread"
-            latin:popupLayout="@layout/input_gingerbread_popup"
-        />
+            latin:keyBackground="@drawable/btn_keyboard_key_gingerbread_popup"
+            />
 </LinearLayout>
diff --git a/java/res/layout/keyboard_popup_keyboard.xml b/java/res/layout/keyboard_popup_keyboard.xml
deleted file mode 100644
index 6d39850..0000000
--- a/java/res/layout/keyboard_popup_keyboard.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2010, 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.
-*/
--->
-<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"
-        >
-    <com.android.inputmethod.latin.LatinKeyboardBaseView
-            xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
-            android:id="@+id/LatinKeyboardBaseView"
-            android:layout_alignParentBottom="true"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="@android:color/transparent"
-
-            latin:keyBackground="@drawable/btn_keyboard_key_gingerbread"
-            latin:keyPreviewLayout="@layout/keyboard_key_preview"
-            latin:popupLayout="@layout/keyboard_popup_keyboard"
-            />
-</LinearLayout>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index e3171eb..a8eaab9 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -46,6 +46,9 @@
         <!-- Amount to offset the touch Y coordinate by, for bias correction. -->
         <attr name="verticalCorrection" format="dimension" />
 
+        <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
+        <attr name="miniKeyboardSlideAllowance" format="dimension" />
+
         <!-- Layout resource for popup keyboards. -->
         <attr name="popupLayout" format="reference" />
 
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 16478c8..48f0d5e 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -21,12 +21,13 @@
         <item name="keyBackground">@drawable/btn_keyboard_key</item>
         <item name="keyTextSize">@dimen/key_text_size</item>
         <item name="keyTextColor">#FFFFFFFF</item>
-        <item name="keyPreviewLayout">@layout/keyboard_key_preview</item>
+        <item name="keyPreviewLayout">@layout/key_preview</item>
         <item name="keyPreviewOffset">5dip</item>
         <item name="keyPreviewHeight">80dip</item>
         <item name="labelTextSize">14sp</item>
-        <item name="popupLayout">@layout/keyboard_popup_keyboard</item>
+        <item name="popupLayout">@layout/keyboard_popup</item>
         <item name="verticalCorrection">-10dip</item>
+        <item name="miniKeyboardSlideAllowance">40dip</item>
         <item name="shadowColor">#BB000000</item>
         <item name="shadowRadius">2.75</item>
         <item name="backgroundDimAmount">0.5</item>
diff --git a/java/src/com/android/inputmethod/latin/Hints.java b/java/src/com/android/inputmethod/latin/Hints.java
index 2434d51..c467365 100644
--- a/java/src/com/android/inputmethod/latin/Hints.java
+++ b/java/src/com/android/inputmethod/latin/Hints.java
@@ -106,7 +106,7 @@
         SharedPreferences.Editor editor =
                 PreferenceManager.getDefaultSharedPreferences(mContext).edit();
         editor.putLong(PREF_VOICE_INPUT_LAST_TIME_USED, System.currentTimeMillis());
-        editor.commit();
+        SharedPreferencesCompat.apply(editor);
 
         mVoiceResultContainedPunctuation = false;
         for (CharSequence s : SPEAKABLE_PUNCTUATION.keySet()) {
@@ -168,7 +168,7 @@
             SharedPreferences.Editor editor = sp.edit();
             editor.putInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, numUniqueDaysShown + 1);
             editor.putLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, System.currentTimeMillis());
-            editor.commit();
+            SharedPreferencesCompat.apply(editor);
         }
 
         if (mDisplay != null) {
@@ -181,7 +181,7 @@
         int value = sp.getInt(pref, 0);
         SharedPreferences.Editor editor = sp.edit();
         editor.putInt(pref, value + 1);
-        editor.commit();
+        SharedPreferencesCompat.apply(editor);
         return value;
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/InputLanguageSelection.java b/java/src/com/android/inputmethod/latin/InputLanguageSelection.java
index 7258874..e811a2c 100644
--- a/java/src/com/android/inputmethod/latin/InputLanguageSelection.java
+++ b/java/src/com/android/inputmethod/latin/InputLanguageSelection.java
@@ -143,7 +143,7 @@
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
         Editor editor = sp.edit();
         editor.putString(LatinIME.PREF_SELECTED_LANGUAGES, checkedLanguages);
-        editor.commit();
+        SharedPreferencesCompat.apply(editor);
     }
 
     ArrayList<Loc> getUniqueLocales() {
diff --git a/java/src/com/android/inputmethod/latin/LanguageSwitcher.java b/java/src/com/android/inputmethod/latin/LanguageSwitcher.java
index d898d68..7b5c304 100644
--- a/java/src/com/android/inputmethod/latin/LanguageSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/LanguageSwitcher.java
@@ -188,7 +188,7 @@
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mIme);
         Editor editor = sp.edit();
         editor.putString(LatinIME.PREF_INPUT_LANGUAGE, getInputLanguage());
-        editor.apply();
+        SharedPreferencesCompat.apply(editor);
     }
 
     static String toTitleCase(String s) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index f85206e..50fc484 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1551,7 +1551,7 @@
             SharedPreferences.Editor editor =
                     PreferenceManager.getDefaultSharedPreferences(this).edit();
             editor.putBoolean(PREF_HAS_USED_VOICE_INPUT, true);
-            editor.commit();
+            SharedPreferencesCompat.apply(editor);
             mHasUsedVoiceInput = true;
         }
 
@@ -1561,7 +1561,7 @@
             SharedPreferences.Editor editor =
                     PreferenceManager.getDefaultSharedPreferences(this).edit();
             editor.putBoolean(PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE, true);
-            editor.commit();
+            SharedPreferencesCompat.apply(editor);
             mHasUsedVoiceInputUnsupportedLocale = true;
         }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 45ecca3..610d954 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -200,6 +200,7 @@
     private int mMiniKeyboardOriginY;
     private long mMiniKeyboardPopupTime;
     private int[] mWindowOffset;
+    private float mMiniKeyboardSlideAllowance;
 
     /** Listener for {@link OnKeyboardActionListener}. */
     private OnKeyboardActionListener mKeyboardActionListener;
@@ -388,6 +389,9 @@
             case R.styleable.LatinKeyboardBaseView_verticalCorrection:
                 mVerticalCorrection = a.getDimensionPixelOffset(attr, 0);
                 break;
+            case R.styleable.LatinKeyboardBaseView_miniKeyboardSlideAllowance:
+                mMiniKeyboardSlideAllowance = a.getDimensionPixelOffset(attr, 0);
+                break;
             case R.styleable.LatinKeyboardBaseView_keyPreviewLayout:
                 previewLayout = a.getResourceId(attr, 0);
                 break;
@@ -989,8 +993,9 @@
         if (container == null)
             throw new NullPointerException();
 
-        mMiniKeyboard = (LatinKeyboardBaseView)container.findViewById(R.id.LatinKeyboardBaseView);
-        mMiniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() {
+        LatinKeyboardBaseView miniKeyboard =
+                (LatinKeyboardBaseView)container.findViewById(R.id.LatinKeyboardBaseView);
+        miniKeyboard.setOnKeyboardActionListener(new OnKeyboardActionListener() {
             public void onKey(int primaryCode, int[] keyCodes, int x, int y) {
                 mKeyboardActionListener.onKey(primaryCode, keyCodes, x, y);
                 dismissPopupKeyboard();
@@ -1028,8 +1033,8 @@
         } else {
             keyboard = new Keyboard(getContext(), popupKeyboardId);
         }
-        mMiniKeyboard.setKeyboard(keyboard);
-        mMiniKeyboard.setPopupParent(this);
+        miniKeyboard.setKeyboard(keyboard);
+        miniKeyboard.setPopupParent(this);
 
         container.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
                 MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
@@ -1061,17 +1066,38 @@
             mWindowOffset = new int[2];
             getLocationInWindow(mWindowOffset);
         }
-        int popupX = popupKey.x + popupKey.width + getPaddingLeft();
-        int popupY = popupKey.y + getPaddingTop();
-        popupX -= container.getMeasuredWidth();
+
+        // HACK: Have the leftmost number in the popup characters right above the key
+        boolean isNumberAtLeftmost = false;
+        if (popupKey.popupCharacters != null && popupKey.popupCharacters.length() > 1) {
+            char leftmostChar = popupKey.popupCharacters.charAt(0);
+            isNumberAtLeftmost = leftmostChar >= '0' && leftmostChar <= '9';
+        }
+
+        int popupX = popupKey.x + mWindowOffset[0];
+        int popupY = popupKey.y + mWindowOffset[1];
+        if (isNumberAtLeftmost) {
+            popupX -= container.getPaddingLeft();
+        } else {
+            popupX += popupKey.width + getPaddingLeft();
+            popupX -= container.getMeasuredWidth();
+            popupX += container.getPaddingRight();
+        }
+        popupY += getPaddingTop();
         popupY -= container.getMeasuredHeight();
-        popupX += mWindowOffset[0];
-        popupY += mWindowOffset[1];
-        final int x = popupX + container.getPaddingRight();
-        final int y = popupY + container.getPaddingBottom();
-        mMiniKeyboardOriginX = (x < 0 ? 0 : x) + container.getPaddingLeft();
-        mMiniKeyboardOriginY = y + container.getPaddingTop();
-        mMiniKeyboard.setPopupOffset((x < 0) ? 0 : x, y);
+        popupY += container.getPaddingBottom();
+        final int x = popupX;
+        final int y = popupY;
+
+        int adjustedX = x;
+        if (x < 0) {
+            adjustedX = 0;
+        } else if (x > (getMeasuredWidth() - container.getMeasuredWidth())) {
+            adjustedX = getMeasuredWidth() - container.getMeasuredWidth();
+        }
+        mMiniKeyboardOriginX = adjustedX + container.getPaddingLeft() - mWindowOffset[0];
+        mMiniKeyboardOriginY = y + container.getPaddingTop() - mWindowOffset[1];
+        mMiniKeyboard.setPopupOffset(adjustedX, y);
         mMiniKeyboard.setShifted(isShifted());
         // Mini keyboard needs no pop-up key preview displayed.
         mMiniKeyboard.setPreviewEnabled(false);
@@ -1094,7 +1120,12 @@
 
     private MotionEvent generateMiniKeyboardMotionEvent(int action, int x, int y, long eventTime) {
         return MotionEvent.obtain(mMiniKeyboardPopupTime, eventTime, action,
-                x - mMiniKeyboardOriginX, y - mMiniKeyboardOriginY, 0);
+                x - mMiniKeyboardOriginX,
+                // TODO: Currently just taking care of "below" of the keys in a mini popup keyboard
+                // for key detection by sliding finger.  Need to take care of left, right, and
+                // upper of "edge" keys.
+                y - mMiniKeyboardOriginY - (int)mMiniKeyboardSlideAllowance,
+                0);
     }
 
     private PointerTracker getPointerTracker(final int id) {
diff --git a/java/src/com/android/inputmethod/latin/SharedPreferencesCompat.java b/java/src/com/android/inputmethod/latin/SharedPreferencesCompat.java
new file mode 100644
index 0000000..8364c90
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/SharedPreferencesCompat.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.content.SharedPreferences;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Reflection utils to call SharedPreferences$Editor.apply when possible,
+ * falling back to commit when apply isn't available.
+ */
+public class SharedPreferencesCompat {
+    private static final Method sApplyMethod = findApplyMethod();
+
+    private static Method findApplyMethod() {
+        try {
+            Class cls = SharedPreferences.Editor.class;
+            return cls.getMethod("apply");
+        } catch (NoSuchMethodException unused) {
+            // fall through
+        }
+        return null;
+    }
+
+    public static void apply(SharedPreferences.Editor editor) {
+        if (sApplyMethod != null) {
+            try {
+                sApplyMethod.invoke(editor);
+                return;
+            } catch (InvocationTargetException unused) {
+                // fall through
+            } catch (IllegalAccessException unused) {
+                // fall through
+            }
+        }
+        editor.commit();
+    }
+}