Merge "Remove flags from Java side."
diff --git a/java/res/values-land/config.xml b/java/res/values-land/config.xml
index b6ef4a7..ade7d00 100644
--- a/java/res/values-land/config.xml
+++ b/java/res/values-land/config.xml
@@ -26,50 +26,49 @@
     <!-- This config_default_keyboard_height value should match with keyboard-heights.xml -->
     <dimen name="config_default_keyboard_height">176.0dp</dimen>
     <fraction name="config_min_keyboard_height">45%p</fraction>
+
     <!-- key_height + key_bottom_gap = config_more_keys_keyboard_key_height -->
     <dimen name="config_more_keys_keyboard_key_height">44.8dp</dimen>
+    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
+    <!-- config_more_keys_keyboard_key_height x 1.2 -->
+    <dimen name="config_more_keys_keyboard_slide_allowance">53.76dp</dimen>
 
     <fraction name="config_keyboard_top_padding_gb">1.818%p</fraction>
     <fraction name="config_keyboard_bottom_padding_gb">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_gb">5.941%p</fraction>
     <fraction name="config_key_horizontal_gap_gb">0.997%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -1.0 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-44.8dp</dimen>
+    <dimen name="config_key_preview_offset_gb">0.0dp</dimen>
 
     <fraction name="config_keyboard_top_padding_holo">2.727%p</fraction>
     <fraction name="config_keyboard_bottom_padding_holo">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_holo">5.368%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">1.020%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -0.5 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-22.4dp</dimen>
+    <dimen name="config_key_preview_offset_holo">1.6dp</dimen>
 
-    <!-- left or right padding of label alignment -->
-    <dimen name="config_key_label_horizontal_padding">8dp</dimen>
-
+    <fraction name="config_key_preview_text_ratio">90%</fraction>
     <fraction name="config_key_letter_ratio">65%</fraction>
     <fraction name="config_key_large_letter_ratio">74%</fraction>
     <fraction name="config_key_label_ratio">40%</fraction>
     <fraction name="config_key_hint_letter_ratio">30%</fraction>
     <fraction name="config_key_hint_label_ratio">52%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">40%</fraction>
-    <fraction name="config_key_preview_text_ratio">90%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">40.000%</fraction>
-    <dimen name="config_key_preview_offset_gb">0.0dp</dimen>
+    <!-- left or right padding of label alignment -->
+    <dimen name="config_key_label_horizontal_padding">8dp</dimen>
 
     <!-- For 5-row keyboard -->
     <fraction name="config_key_vertical_gap_5row">3.20%p</fraction>
     <fraction name="config_key_letter_ratio_5row">78%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio_5row">48%</fraction>
 
-    <dimen name="config_key_preview_offset_holo">1.6dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -0.5 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-22.4dp</dimen>
-
     <dimen name="config_suggestions_strip_height">36dp</dimen>
     <dimen name="config_more_suggestions_row_height">36dp</dimen>
     <integer name="config_max_more_suggestions_row">2</integer>
     <fraction name="config_min_more_suggestions_width">60%</fraction>
-    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
-    <!-- config_more_keys_keyboard_key_height x 1.2 -->
-    <dimen name="config_more_keys_keyboard_slide_allowance">53.76dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -1.0 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-44.8dp</dimen>
 
     <!-- Gesture floating preview text parameters -->
     <dimen name="config_gesture_floating_preview_text_size">23dp</dimen>
diff --git a/java/res/values-sw540dp-land/config.xml b/java/res/values-sw540dp-land/config.xml
index 55dcd51..f4785e7 100644
--- a/java/res/values-sw540dp-land/config.xml
+++ b/java/res/values-sw540dp-land/config.xml
@@ -27,6 +27,8 @@
     <dimen name="config_default_keyboard_height">283.5dp</dimen>
     <fraction name="config_min_keyboard_height">45%p</fraction>
 
+    <dimen name="config_more_keys_keyboard_key_height">81.9dp</dimen>
+
     <fraction name="config_keyboard_top_padding_gb">2.444%p</fraction>
     <fraction name="config_keyboard_bottom_padding_gb">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_gb">5.200%p</fraction>
@@ -37,11 +39,6 @@
     <fraction name="config_key_vertical_gap_holo">4.5%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">0.9%p</fraction>
 
-    <dimen name="config_more_keys_keyboard_key_height">81.9dp</dimen>
-
-    <!-- left or right padding of label alignment -->
-    <dimen name="config_key_label_horizontal_padding">18dp</dimen>
-
     <fraction name="config_key_letter_ratio">50%</fraction>
     <fraction name="config_key_large_letter_ratio">48%</fraction>
     <fraction name="config_key_label_ratio">32%</fraction>
@@ -49,6 +46,8 @@
     <fraction name="config_key_hint_label_ratio">34%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">29%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">30.0%</fraction>
+    <!-- left or right padding of label alignment -->
+    <dimen name="config_key_label_horizontal_padding">18dp</dimen>
     <dimen name="config_key_shifted_letter_hint_padding">4dp</dimen>
 
     <!-- For 5-row keyboard -->
diff --git a/java/res/values-sw540dp/config-per-form-factor.xml b/java/res/values-sw540dp/config-per-form-factor.xml
new file mode 100644
index 0000000..7f898e0
--- /dev/null
+++ b/java/res/values-sw540dp/config-per-form-factor.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- Configuration values for Large Phone. -->
+<resources>
+    <bool name="config_enable_show_key_preview_popup_option">false</bool>
+    <!-- Whether or not Popup on key press is enabled by default -->
+    <bool name="config_default_key_preview_popup">false</bool>
+    <bool name="config_default_sound_enabled">true</bool>
+    <bool name="config_enable_show_voice_key_option">true</bool>
+    <bool name="config_key_selection_by_dragging_finger">false</bool>
+    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
+         false -->
+    <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
+</resources>
diff --git a/java/res/values-sw540dp/config.xml b/java/res/values-sw540dp/config.xml
index 09fe7d3..8637d6b 100644
--- a/java/res/values-sw540dp/config.xml
+++ b/java/res/values-sw540dp/config.xml
@@ -20,16 +20,7 @@
 
 <!-- Configuration values for Large Phone and Small Tablet Portrait. -->
 <resources>
-    <bool name="config_enable_show_key_preview_popup_option">false</bool>
-    <!-- Whether or not Popup on key press is enabled by default -->
-    <bool name="config_default_key_preview_popup">false</bool>
-    <bool name="config_default_sound_enabled">true</bool>
-
     <dimen name="config_key_hysteresis_distance">40.0dp</dimen>
-    <bool name="config_key_selection_by_dragging_finger">false</bool>
-    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
-         false -->
-    <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
 
     <!-- Preferable keyboard height in absolute scale: 48.0mm -->
     <!-- This config_default_keyboard_height value should match with keyboard-heights.xml -->
@@ -38,29 +29,29 @@
     <fraction name="config_min_keyboard_height">-35.0%p</fraction>
 
     <dimen name="config_more_keys_keyboard_key_height">63.0dp</dimen>
+    <dimen name="config_more_keys_keyboard_key_horizontal_padding">6dp</dimen>
+    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
+    <!-- config_more_keys_keyboard_key_height x 1.2 -->
+    <dimen name="config_more_keys_keyboard_slide_allowance">98.3dp</dimen>
 
     <fraction name="config_keyboard_top_padding_gb">2.291%p</fraction>
     <fraction name="config_keyboard_bottom_padding_gb">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_gb">4.625%p</fraction>
     <fraction name="config_key_horizontal_gap_gb">2.113%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -1.0 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-81.9dp</dimen>
+    <dimen name="config_key_preview_offset_gb">16.0dp</dimen>
 
     <fraction name="config_keyboard_top_padding_holo">2.335%p</fraction>
     <fraction name="config_keyboard_bottom_padding_holo">4.0%p</fraction>
     <fraction name="config_key_vertical_gap_holo">4.5%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">1.565%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -0.5 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-31.5dp</dimen>
+    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
 
-    <dimen name="config_more_keys_keyboard_key_horizontal_padding">6dp</dimen>
-    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
-    <!-- config_more_keys_keyboard_key_height x 1.2 -->
-    <dimen name="config_more_keys_keyboard_slide_allowance">98.3dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -1.0 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-81.9dp</dimen>
-
-    <!-- left or right padding of label alignment -->
-    <dimen name="config_key_label_horizontal_padding">6dp</dimen>
-    <dimen name="config_key_hint_letter_padding">3dp</dimen>
-    <dimen name="config_key_shifted_letter_hint_padding">3dp</dimen>
-
+    <dimen name="config_key_preview_height">94.5dp</dimen>
+    <fraction name="config_key_preview_text_ratio">50%</fraction>
     <fraction name="config_key_letter_ratio">42%</fraction>
     <fraction name="config_key_large_letter_ratio">45%</fraction>
     <fraction name="config_key_label_ratio">25%</fraction>
@@ -68,20 +59,17 @@
     <fraction name="config_key_hint_letter_ratio">23%</fraction>
     <fraction name="config_key_hint_label_ratio">28%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">22%</fraction>
-    <fraction name="config_key_preview_text_ratio">50%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">28.0%</fraction>
-    <dimen name="config_key_preview_height">94.5dp</dimen>
-    <dimen name="config_key_preview_offset_gb">16.0dp</dimen>
+    <!-- left or right padding of label alignment -->
+    <dimen name="config_key_label_horizontal_padding">6dp</dimen>
+    <dimen name="config_key_hint_letter_padding">3dp</dimen>
+    <dimen name="config_key_shifted_letter_hint_padding">3dp</dimen>
 
     <!-- For 5-row keyboard -->
     <fraction name="config_key_vertical_gap_5row">3.20%p</fraction>
     <fraction name="config_key_letter_ratio_5row">52%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio_5row">27%</fraction>
 
-    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -0.5 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-31.5dp</dimen>
-
     <dimen name="config_suggestions_strip_height">44dp</dimen>
     <dimen name="config_more_suggestions_row_height">44dp</dimen>
     <integer name="config_max_more_suggestions_row">6</integer>
diff --git a/java/res/values-sw600dp/config-per-form-factor.xml b/java/res/values-sw600dp/config-per-form-factor.xml
new file mode 100644
index 0000000..1c7e677
--- /dev/null
+++ b/java/res/values-sw600dp/config-per-form-factor.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- Configuration values for Small Tablet. -->
+<resources>
+    <bool name="config_enable_show_key_preview_popup_option">false</bool>
+    <!-- Whether or not Popup on key press is enabled by default -->
+    <bool name="config_default_key_preview_popup">false</bool>
+    <bool name="config_default_sound_enabled">true</bool>
+    <bool name="config_enable_show_voice_key_option">false</bool>
+    <bool name="config_key_selection_by_dragging_finger">false</bool>
+    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
+         false -->
+    <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
+</resources>
diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml
deleted file mode 100644
index c2419b6..0000000
--- a/java/res/values-sw600dp/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, 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.
-*/
--->
-
-<!-- Configuration values for Small Tablet Portrait. -->
-<resources>
-    <bool name="config_enable_show_voice_key_option">false</bool>
-</resources>
diff --git a/java/res/values-sw768dp-land/config.xml b/java/res/values-sw768dp-land/config.xml
index b27d4c0..b97872f 100644
--- a/java/res/values-sw768dp-land/config.xml
+++ b/java/res/values-sw768dp-land/config.xml
@@ -36,12 +36,11 @@
     <fraction name="config_keyboard_bottom_padding_holo">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_holo">3.690%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">1.030%p</fraction>
+    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
 
     <dimen name="config_more_keys_keyboard_key_height">81.9dp</dimen>
 
-    <!-- left or right padding of label alignment -->
-    <dimen name="config_key_label_horizontal_padding">18dp</dimen>
-
+    <dimen name="config_key_preview_height">107.1dp</dimen>
     <fraction name="config_key_letter_ratio">43%</fraction>
     <fraction name="config_key_large_letter_ratio">42%</fraction>
     <fraction name="config_key_label_ratio">28%</fraction>
@@ -49,15 +48,14 @@
     <fraction name="config_key_hint_label_ratio">28%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">24%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">24.00%</fraction>
-    <dimen name="config_key_preview_height">107.1dp</dimen>
+    <!-- left or right padding of label alignment -->
+    <dimen name="config_key_label_horizontal_padding">18dp</dimen>
 
     <!-- For 5-row keyboard -->
     <fraction name="config_key_vertical_gap_5row">2.65%p</fraction>
     <fraction name="config_key_letter_ratio_5row">53%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio_5row">30%</fraction>
 
-    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
-
     <dimen name="config_suggestions_strip_horizontal_padding">252.0dp</dimen>
     <fraction name="config_min_more_suggestions_width">50%</fraction>
 
diff --git a/java/res/values-sw768dp/config-per-form-factor.xml b/java/res/values-sw768dp/config-per-form-factor.xml
new file mode 100644
index 0000000..136f415
--- /dev/null
+++ b/java/res/values-sw768dp/config-per-form-factor.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- Configuration values for Large Tablet. -->
+<resources>
+    <bool name="config_enable_show_key_preview_popup_option">false</bool>
+    <!-- Whether or not Popup on key press is enabled by default -->
+    <bool name="config_default_key_preview_popup">false</bool>
+    <bool name="config_default_sound_enabled">true</bool>
+    <bool name="config_enable_show_voice_key_option">false</bool>
+    <bool name="config_key_selection_by_dragging_finger">false</bool>
+    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
+         false -->
+    <bool name="config_show_more_keys_keyboard_at_touched_point">true</bool>
+</resources>
diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml
index b63b509..33286c6 100644
--- a/java/res/values-sw768dp/config.xml
+++ b/java/res/values-sw768dp/config.xml
@@ -20,17 +20,6 @@
 
 <!-- Configuration values for Large Tablet Portrait. -->
 <resources>
-    <bool name="config_enable_show_voice_key_option">false</bool>
-    <bool name="config_enable_show_key_preview_popup_option">false</bool>
-    <!-- Whether or not Popup on key press is enabled by default -->
-    <bool name="config_default_key_preview_popup">false</bool>
-    <bool name="config_default_sound_enabled">true</bool>
-
-    <bool name="config_key_selection_by_dragging_finger">false</bool>
-    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
-         false -->
-    <bool name="config_show_more_keys_keyboard_at_touched_point">true</bool>
-
     <!-- Preferable keyboard height in absolute scale: 48.0mm -->
     <!-- This config_default_keyboard_height value should match with keyboard-heights.xml -->
     <dimen name="config_default_keyboard_height">302.4dp</dimen>
@@ -41,26 +30,26 @@
     <fraction name="config_keyboard_bottom_padding_gb">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_gb">4.687%p</fraction>
     <fraction name="config_key_horizontal_gap_gb">1.272%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -1.0 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-81.9dp</dimen>
+    <dimen name="config_key_preview_offset_gb">16.0dp</dimen>
 
     <fraction name="config_keyboard_top_padding_holo">2.335%p</fraction>
     <fraction name="config_keyboard_bottom_padding_holo">0.0%p</fraction>
     <fraction name="config_key_vertical_gap_holo">3.312%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">1.066%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -0.5 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-31.5dp</dimen>
+    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
 
     <dimen name="config_more_keys_keyboard_key_height">63.0dp</dimen>
-
     <dimen name="config_more_keys_keyboard_key_horizontal_padding">12dp</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- config_more_keys_keyboard_key_height x 1.2 -->
     <dimen name="config_more_keys_keyboard_slide_allowance">98.3dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -1.0 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-81.9dp</dimen>
 
-    <!-- left or right padding of label alignment -->
-    <dimen name="config_key_label_horizontal_padding">6dp</dimen>
-    <dimen name="config_key_hint_letter_padding">3dp</dimen>
-    <dimen name="config_key_shifted_letter_hint_padding">3dp</dimen>
-
+    <dimen name="config_key_preview_height">94.5dp</dimen>
+    <fraction name="config_key_preview_text_ratio">50%</fraction>
     <fraction name="config_key_letter_ratio">40%</fraction>
     <fraction name="config_key_large_letter_ratio">42%</fraction>
     <fraction name="config_key_label_ratio">28%</fraction>
@@ -68,20 +57,17 @@
     <fraction name="config_key_hint_letter_ratio">23%</fraction>
     <fraction name="config_key_hint_label_ratio">28%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">26%</fraction>
-    <fraction name="config_key_preview_text_ratio">50%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">29.03%</fraction>
-    <dimen name="config_key_preview_height">94.5dp</dimen>
-    <dimen name="config_key_preview_offset_gb">16.0dp</dimen>
+    <!-- left or right padding of label alignment -->
+    <dimen name="config_key_label_horizontal_padding">6dp</dimen>
+    <dimen name="config_key_hint_letter_padding">3dp</dimen>
+    <dimen name="config_key_shifted_letter_hint_padding">3dp</dimen>
 
     <!-- For 5-row keyboard -->
     <fraction name="config_key_vertical_gap_5row">2.95%p</fraction>
     <fraction name="config_key_letter_ratio_5row">51%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio_5row">33%</fraction>
 
-    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -0.5 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-31.5dp</dimen>
-
     <dimen name="config_suggestions_strip_height">44dp</dimen>
     <dimen name="config_more_suggestions_row_height">44dp</dimen>
     <integer name="config_max_more_suggestions_row">6</integer>
diff --git a/java/res/values/config-per-form-factor.xml b/java/res/values/config-per-form-factor.xml
new file mode 100644
index 0000000..67fc751
--- /dev/null
+++ b/java/res/values/config-per-form-factor.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- Configuration values for Small Phone. -->
+<resources>
+    <bool name="config_enable_show_key_preview_popup_option">true</bool>
+    <!-- Whether or not Popup on key press is enabled by default -->
+    <bool name="config_default_key_preview_popup">true</bool>
+    <bool name="config_default_sound_enabled">false</bool>
+    <bool name="config_enable_show_voice_key_option">true</bool>
+    <bool name="config_key_selection_by_dragging_finger">true</bool>
+    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
+         false -->
+    <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
+</resources>
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 698efa9..e64b4b1 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -21,17 +21,8 @@
 <!-- Configuration values for Small Phone Portrait. -->
 <resources>
     <bool name="config_use_fullscreen_mode">false</bool>
-    <bool name="config_enable_show_voice_key_option">true</bool>
-    <bool name="config_enable_show_key_preview_popup_option">true</bool>
-    <!-- Whether or not Popup on key press is enabled by default -->
-    <bool name="config_default_key_preview_popup">true</bool>
-    <bool name="config_default_sound_enabled">false</bool>
 
     <dimen name="config_key_hysteresis_distance">8.0dp</dimen>
-    <bool name="config_key_selection_by_dragging_finger">true</bool>
-    <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
-         false -->
-    <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
 
     <!-- Preferable keyboard height in absolute scale: 1.285in -->
     <!-- This config_default_keyboard_height value should match with keyboard-heights.xml -->
@@ -40,25 +31,29 @@
     <fraction name="config_min_keyboard_height">-61.8%p</fraction>
 
     <dimen name="config_more_keys_keyboard_key_height">52.8dp</dimen>
-
+    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
+    <!-- config_more_keys_keyboard_key_height x 1.2 -->
+    <dimen name="config_more_keys_keyboard_slide_allowance">63.36dp</dimen>
     <dimen name="config_more_keys_keyboard_key_horizontal_padding">8dp</dimen>
 
     <fraction name="config_keyboard_top_padding_gb">1.556%p</fraction>
     <fraction name="config_keyboard_bottom_padding_gb">4.669%p</fraction>
     <fraction name="config_key_vertical_gap_gb">6.495%p</fraction>
     <fraction name="config_key_horizontal_gap_gb">1.971%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -1.0 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-52.8dp</dimen>
+    <dimen name="config_key_preview_offset_gb">-8.0dp</dimen>
 
     <fraction name="config_keyboard_top_padding_holo">2.335%p</fraction>
     <fraction name="config_keyboard_bottom_padding_holo">4.669%p</fraction>
     <fraction name="config_key_vertical_gap_holo">6.127%p</fraction>
     <fraction name="config_key_horizontal_gap_holo">1.739%p</fraction>
+    <!-- config_more_keys_keyboard_key_height x -0.5 -->
+    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-26.4dp</dimen>
+    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
 
-    <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
-    <!-- config_more_keys_keyboard_key_height x 1.2 -->
-    <dimen name="config_more_keys_keyboard_slide_allowance">63.36dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -1.0 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_gb">-52.8dp</dimen>
-
+    <dimen name="config_key_preview_height">80dp</dimen>
+    <fraction name="config_key_preview_text_ratio">82%</fraction>
     <fraction name="config_key_letter_ratio">55%</fraction>
     <fraction name="config_key_large_letter_ratio">65%</fraction>
     <fraction name="config_key_label_ratio">34%</fraction>
@@ -66,11 +61,7 @@
     <fraction name="config_key_hint_letter_ratio">25%</fraction>
     <fraction name="config_key_hint_label_ratio">44%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio">35%</fraction>
-    <fraction name="config_key_preview_text_ratio">82%</fraction>
     <fraction name="config_language_on_spacebar_text_ratio">33.735%</fraction>
-    <dimen name="config_key_preview_height">80dp</dimen>
-    <dimen name="config_key_preview_offset_gb">-8.0dp</dimen>
-
     <dimen name="config_key_label_horizontal_padding">4dp</dimen>
     <dimen name="config_key_hint_letter_padding">1dp</dimen>
     <dimen name="config_key_shifted_letter_hint_padding">2dp</dimen>
@@ -80,10 +71,6 @@
     <fraction name="config_key_letter_ratio_5row">64%</fraction>
     <fraction name="config_key_shifted_letter_hint_ratio_5row">41%</fraction>
 
-    <dimen name="config_key_preview_offset_holo">8.0dp</dimen>
-    <!-- config_more_keys_keyboard_key_height x -0.5 -->
-    <dimen name="config_more_keys_keyboard_vertical_correction_holo">-26.4dp</dimen>
-
     <dimen name="config_suggestions_strip_height">40dp</dimen>
     <dimen name="config_more_suggestions_row_height">40dp</dimen>
     <integer name="config_max_more_suggestions_row">6</integer>
diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
index b6cfcd0..ae41e74 100644
--- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
@@ -33,6 +33,7 @@
 
 import com.android.inputmethod.latin.utils.StringUtils;
 
+import java.io.File;
 import java.util.List;
 import java.util.Locale;
 
@@ -83,6 +84,11 @@
         loadDictionary();
     }
 
+    // Dummy constructor for tests.
+    public ContactsBinaryDictionary(final Context context, final Locale locale, final File file) {
+        this(context, locale);
+    }
+
     private synchronized void registerObserver(final Context context) {
         // Perform a managed query. The Activity will handle closing and requerying the cursor
         // when needed.
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 9f5cd16..7afd657 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -17,7 +17,6 @@
 package com.android.inputmethod.latin;
 
 import android.content.Context;
-import android.os.SystemClock;
 import android.util.Log;
 
 import com.android.inputmethod.annotations.UsedForTesting;
@@ -181,6 +180,19 @@
         return executor;
     }
 
+    /**
+     * Shutdowns all executors and removes all executors from the executor map for testing.
+     */
+    @UsedForTesting
+    public static void shutdownAllExecutors() {
+        synchronized(sDictNameExecutorMap) {
+            for (final PrioritizedSerialExecutor executor : sDictNameExecutorMap.values()) {
+                executor.shutdown();
+                sDictNameExecutorMap.remove(executor);
+            }
+        }
+    }
+
     private static AbstractDictionaryWriter getDictionaryWriter(final Context context,
             final boolean isDynamicPersonalizationDictionary) {
         if (isDynamicPersonalizationDictionary) {
@@ -504,7 +516,7 @@
      * dictionary exists, this method will generate one.
      */
     protected void loadDictionary() {
-        mPerInstanceDictionaryUpdateController.mLastUpdateRequestTime = SystemClock.uptimeMillis();
+        mPerInstanceDictionaryUpdateController.mLastUpdateRequestTime = System.currentTimeMillis();
         reloadDictionaryIfRequired();
     }
 
@@ -600,7 +612,7 @@
      *        the current binary dictionary from file.
      */
     protected void setRequiresReload(final boolean requiresRebuild) {
-        final long time = SystemClock.uptimeMillis();
+        final long time = System.currentTimeMillis();
         mPerInstanceDictionaryUpdateController.mLastUpdateRequestTime = time;
         mDictNameDictionaryUpdateController.mLastUpdateRequestTime = time;
         if (DEBUG) {
@@ -648,7 +660,7 @@
             @Override
             public void run() {
                 try {
-                    final long time = SystemClock.uptimeMillis();
+                    final long time = System.currentTimeMillis();
                     final boolean dictionaryFileExists = dictionaryFileExists();
                     if (mDictNameDictionaryUpdateController.isOutOfDate()
                             || !dictionaryFileExists) {
diff --git a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
index 1dc3c54..6fc9822 100644
--- a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
@@ -32,6 +32,7 @@
 import com.android.inputmethod.latin.utils.LocaleUtils;
 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
 
+import java.io.File;
 import java.util.Arrays;
 import java.util.Locale;
 
@@ -78,6 +79,11 @@
         this(context, locale, false);
     }
 
+    // Dummy constructor for tests.
+    public UserBinaryDictionary(final Context context, final Locale locale, final File file) {
+        this(context, locale);
+    }
+
     public UserBinaryDictionary(final Context context, final Locale locale,
             final boolean alsoUseMoreRestrictiveLocales) {
         super(context, getDictNameWithLocale(NAME, locale), locale, Dictionary.TYPE_USER,
diff --git a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
index 201a70d..b10d08a 100644
--- a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
+++ b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
@@ -137,6 +137,7 @@
     public void shutdown() {
         synchronized(mLock) {
             mIsShutdown = true;
+            mThreadPoolExecutor.shutdown();
         }
     }