Reorganize Keyboard settings screen

This CL must be checked in together with I6ebfbeb4e8.

Bug: 11866784
Bug: 15781377
Bug: 13888366
Change-Id: I57d47ab174d03121a604fd0dbf553795de0ab9b8
diff --git a/java/res/values-v20/platform-theme.xml b/java/res/values-v20/platform-theme.xml
deleted file mode 100644
index 52e7f35..0000000
--- a/java/res/values-v20/platform-theme.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2014, 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.
-*/
--->
-
-<!-- TODO: This file is temporarily placed under values-v20. -->
-<!-- TODO: It might be moved under values-v21. -->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="platformActivityTheme" parent="@android:style/Theme.Material.Light" />
-    <style name="platformDialogTheme" parent="@android:style/Theme.Material.Light.Dialog" />
-</resources>
diff --git a/java/res/values-v21/platform-theme.xml b/java/res/values-v21/platform-theme.xml
new file mode 100644
index 0000000..a49e364
--- /dev/null
+++ b/java/res/values-v21/platform-theme.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <style name="platformActivityTheme" parent="@android:style/Theme.Material.Light" />
+    <!-- From packages/apps/Settings -->
+    <style name="platformSettingsTheme" parent="@android:style/Theme.Material.Settings">
+        <item name="android:actionBarStyle">@android:style/Widget.Material.Light.ActionBar.Solid</item>
+        <item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>
+    </style>
+    <!-- From packages/apps/Settings -->
+    <style name="Theme.AlertDialog" parent="@*android:style/Theme.Material.Light.Dialog.Alert">
+        <!-- Used by the ActionBar: @color/theme_primary -->
+        <item name="android:colorPrimary">#ff263238</item>
+        <!-- Used by the StatusBar: @color/theme_primary_dark -->
+        <item name="android:colorPrimaryDark">#ff21272b</item>
+        <!-- Used by controls, e.g. CheckBox, ProgressBar, etc.: @color/theme_accent -->
+        <item name="android:colorAccent">#ff009688</item>
+    </style>
+    <style name="platformDialogTheme" parent="@android:style/Theme.Material.Light.Dialog" />
+</resources>
diff --git a/java/res/values/keyboard-themes.xml b/java/res/values/keyboard-themes.xml
index a06082c..28a34c3 100644
--- a/java/res/values/keyboard-themes.xml
+++ b/java/res/values/keyboard-themes.xml
@@ -20,13 +20,14 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- For keyboard color scheme option dialog. -->
     <string-array name="keyboard_theme_names" translatable="false">
-        <!-- TODO: Make this item as translatable string resource. -->
-        <item>Material</item>
-        <item>@string/keyboard_color_scheme_white</item>
-        <item>@string/keyboard_color_scheme_blue</item>
+        <!-- TODO: Implement Material Light theme. -->
+        <item>@string/keyboard_theme_material_dark</item>
+        <item>@string/keyboard_theme_holo_white</item>
+        <item>@string/keyboard_theme_holo_blue</item>
     </string-array>
     <!-- An element must be a keyboard theme id of {@link KeyboardTheme#THEME_ID_*}. -->
     <string-array name="keyboard_theme_ids" translatable="false">
+        <!-- TODO: Implement Material Light theme. -->
         <item>3</item>
         <item>2</item>
         <item>0</item>
diff --git a/java/res/values/platform-theme.xml b/java/res/values/platform-theme.xml
index 8e131a2..e688597 100644
--- a/java/res/values/platform-theme.xml
+++ b/java/res/values/platform-theme.xml
@@ -20,5 +20,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="platformActivityTheme" parent="@android:style/Theme.Holo" />
+    <style name="platformSettingsTheme" parent="@android:style/Theme.Holo" />
     <style name="platformDialogTheme" parent="@android:style/Theme.Holo.Dialog" />
 </resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 8849115..9ec3f46 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -36,22 +36,18 @@
     <!-- Option to control whether or not to show a popup with a larger font on each key press. -->
     <string name="popup_on_keypress">Popup on keypress</string>
 
-    <!-- Category title for general settings for Android keyboard -->
-    <string name="general_category">General</string>
-
-    <!-- Category title for text prediction -->
-    <string name="correction_category">Text correction</string>
-
-    <!-- Category title for gesture typing -->
-    <string name="gesture_typing_category">Gesture typing</string>
-
-    <!-- Category title for misc options  -->
-    <string name="misc_category">Other options</string>
-
-    <!-- Option name for advanced settings screen [CHAR LIMIT=25] -->
-    <string name="advanced_settings">Advanced settings</string>
-    <!-- Option summary for advanced settings screen [CHAR LIMIT=65 (two lines) or 30 (fits on one line, preferable)] -->
-    <string name="advanced_settings_summary">Options for experts</string>
+    <!-- Settings screen title for input preferences [CHAR LIMIT=25]-->
+    <string name="settings_screen_input">Input preferences</string>
+    <!-- Settings screen title for appearance preferences [CHAR LIMIT=25] -->
+    <string name="settings_screen_appearances">Appearance</string>
+    <!-- Settings screen title for multi lingual options [CHAR_LIMIT=25] -->
+    <string name="settings_screen_multi_lingual">Multi lingual options</string>
+    <!-- Settings screen title for gesture typing preferences [CHAR_LIMIT=25] -->
+    <string name="settings_screen_gesture">Gesture typing preferences</string>
+    <!-- Settings screen title for text correction options [CHAR_LIMIT=25] -->
+    <string name="settings_screen_correction">Text correction</string>
+    <!-- Settings screen title for advanced settings [CHAR LIMIT=25] -->
+    <string name="settings_screen_advanced">Advanced</string>
 
     <!-- Option name for including other IMEs in the language switch list [CHAR LIMIT=30] -->
     <string name="include_other_imes_in_language_switch_list">Switch to other input methods</string>
@@ -295,12 +291,16 @@
     <!-- Description for Emoji keyboard subtype [CHAR LIMIT=25] -->
     <string name="subtype_emoji">Emoji</string>
 
-    <!-- Title of the preference settings for switching keyboard color scheme [CHAR LIMIT=35] -->
-    <string name="keyboard_color_scheme">Color scheme</string>
-    <!-- The keyboard color scheme name, White [CHAR LIMIT=16] -->
-    <string name="keyboard_color_scheme_white">White</string>
-    <!-- The keyboard color scheme name, Blue [CHAR LIMIT=16] -->
-    <string name="keyboard_color_scheme_blue">Blue</string>
+    <!-- Title of the preference settings for switching keyboard theme [CHAR LIMIT=35] -->
+    <string name="keyboard_theme">Keyboard theme</string>
+    <!-- The keyboard theme name, Holo White [CHAR LIMIT=25] -->
+    <string name="keyboard_theme_holo_white">Holo White</string>
+    <!-- The keyboard theme name, Holo Blue [CHAR LIMIT=25] -->
+    <string name="keyboard_theme_holo_blue">Holo Blue</string>
+    <!-- The keyboard theme name, Material Dark [CHAR LIMIT=25] -->
+    <string name="keyboard_theme_material_dark">Material Dark</string>
+    <!-- The keyboard theme name, Material Light [CHAR LIMIT=25] -->
+    <string name="keyboard_theme_material_light">Material Light</string>
 
     <!-- Title of the preference settings for custom input styles (language and keyboard layout pairs) [CHAR LIMIT=35]-->
     <string name="custom_input_styles_title">Custom input styles</string>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 0e9c161..cb951d2 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -18,39 +18,117 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     android:key="english_ime_settings">
-    <PreferenceCategory
-        android:title="@string/general_category"
-        android:key="general_settings">
-        <CheckBoxPreference
+    <PreferenceScreen
+        android:title="@string/settings_screen_input"
+        android:key="screen_input">
+        <SwitchPreference
             android:key="auto_cap"
             android:title="@string/auto_cap"
             android:summary="@string/auto_cap_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-        <CheckBoxPreference
+        <SwitchPreference
+            android:key="pref_key_use_double_space_period"
+            android:title="@string/use_double_space_period"
+            android:summary="@string/use_double_space_period_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+        <SwitchPreference
             android:key="vibrate_on"
             android:title="@string/vibrate_on_keypress"
-            android:defaultValue="@bool/config_default_vibration_enabled"
-            android:persistent="true" />
-        <CheckBoxPreference
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="@bool/config_default_vibration_enabled" />
+        <SwitchPreference
             android:key="sound_on"
             android:title="@string/sound_on_keypress"
-            android:defaultValue="@bool/config_default_sound_enabled"
-            android:persistent="true" />
-        <CheckBoxPreference
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="@bool/config_default_sound_enabled" />
+        <SwitchPreference
             android:key="popup_on"
             android:title="@string/popup_on_keypress"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="@bool/config_default_key_preview_popup" />
-        <CheckBoxPreference
+        <SwitchPreference
             android:key="pref_voice_input_key"
             android:title="@string/voice_input"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-    </PreferenceCategory>
-    <PreferenceCategory
-        android:title="@string/correction_category"
-        android:key="correction_settings">
+    </PreferenceScreen>
+    <ListPreference
+        android:key="pref_keyboard_theme"
+        android:title="@string/keyboard_theme"
+        android:persistent="true"
+        android:entryValues="@array/keyboard_theme_ids"
+        android:entries="@array/keyboard_theme_names" />
+    <PreferenceScreen
+        android:title="@string/settings_screen_multi_lingual"
+        android:key="screen_multi_lingual">
+        <SwitchPreference
+            android:key="pref_show_language_switch_key"
+            android:title="@string/show_language_switch_key"
+            android:summary="@string/show_language_switch_key_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+        <SwitchPreference
+            android:key="pref_include_other_imes_in_language_switch_list"
+            android:dependency="pref_show_language_switch_key"
+            android:title="@string/include_other_imes_in_language_switch_list"
+            android:summary="@string/include_other_imes_in_language_switch_list_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="false" />
+        <PreferenceScreen
+            android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
+            android:key="custom_input_styles"
+            android:title="@string/custom_input_styles_title" />
+    </PreferenceScreen>
+    <PreferenceScreen
+        android:title="@string/settings_screen_gesture"
+        android:key="screen_gesture">
+        <SwitchPreference
+            android:key="gesture_input"
+            android:title="@string/gesture_input"
+            android:summary="@string/gesture_input_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+        <SwitchPreference
+            android:key="pref_gesture_floating_preview_text"
+            android:dependency="gesture_input"
+            android:title="@string/gesture_floating_preview_text"
+            android:summary="@string/gesture_floating_preview_text_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+        <SwitchPreference
+            android:key="pref_gesture_preview_trail"
+            android:dependency="gesture_input"
+            android:title="@string/gesture_preview_trail"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+    </PreferenceScreen>
+    <PreferenceScreen
+        android:title="@string/settings_screen_correction"
+        android:key="screen_correction">
         <PreferenceScreen
             android:key="edit_personal_dictionary"
             android:title="@string/edit_personal_dictionary">
@@ -67,10 +145,12 @@
                  android:value="@string/dictionary_pack_client_id" />
            </intent>
         </PreferenceScreen>
-        <CheckBoxPreference
+        <SwitchPreference
             android:key="pref_key_block_potentially_offensive"
             android:title="@string/prefs_block_potentially_offensive_title"
             android:summary="@string/prefs_block_potentially_offensive_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="@bool/config_block_potentially_offensive" />
         <ListPreference
@@ -89,119 +169,66 @@
             android:entryValues="@array/prefs_suggestion_visibility_values"
             android:entries="@array/prefs_suggestion_visibilities"
             android:defaultValue="@string/prefs_suggestion_visibility_default_value" />
-        <CheckBoxPreference
+        <SwitchPreference
             android:key="pref_key_use_personalized_dicts"
             android:title="@string/use_personalized_dicts"
             android:summary="@string/use_personalized_dicts_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-        <!-- title will be set programmatically to embed application name -->
-        <CheckBoxPreference
-            android:key="pref_enable_metrics_logging"
-            android:summary="@string/enable_metrics_logging_summary"
+        <SwitchPreference
+            android:key="pref_key_use_contacts_dict"
+            android:title="@string/use_contacts_dict"
+            android:summary="@string/use_contacts_dict_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-    </PreferenceCategory>
-    <PreferenceCategory
-        android:title="@string/gesture_typing_category"
-        android:key="gesture_typing_settings">
-        <CheckBoxPreference
-            android:key="gesture_input"
-            android:title="@string/gesture_input"
-            android:summary="@string/gesture_input_summary"
-            android:persistent="true"
-            android:defaultValue="true" />
-        <!-- TODO: Move these two options to the advanced settings. -->
-        <CheckBoxPreference
-            android:key="pref_gesture_floating_preview_text"
-            android:dependency="gesture_input"
-            android:title="@string/gesture_floating_preview_text"
-            android:summary="@string/gesture_floating_preview_text_summary"
-            android:persistent="true"
-            android:defaultValue="true" />
-        <CheckBoxPreference
-            android:key="pref_gesture_preview_trail"
-            android:dependency="gesture_input"
-            android:title="@string/gesture_preview_trail"
-            android:persistent="true"
-            android:defaultValue="true" />
-    </PreferenceCategory>
-    <PreferenceCategory
-        android:title="@string/misc_category"
-        android:key="misc_settings">
-        <CheckBoxPreference
+        <SwitchPreference
             android:key="next_word_prediction"
             android:title="@string/bigram_prediction"
             android:summary="@string/bigram_prediction_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
+            android:persistent="true"
+            android:defaultValue="true" />
+    </PreferenceScreen>
+    <PreferenceScreen
+        android:title="@string/settings_screen_advanced"
+        android:key="screen_advanced">
+        <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
+        <ListPreference
+            android:key="pref_key_preview_popup_dismiss_delay"
+            android:title="@string/key_preview_popup_dismiss_delay" />
+        <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+            android:key="pref_vibration_duration_settings"
+            android:title="@string/prefs_keypress_vibration_duration_settings"
+            latin:maxValue="@integer/config_max_vibration_duration" />
+        <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+            android:key="pref_keypress_sound_volume"
+            android:title="@string/prefs_keypress_sound_volume_settings"
+            latin:maxValue="100" /> <!-- percent -->
+        <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
+             the default value is added programmatically. -->
+        <SwitchPreference
+            android:key="pref_show_setup_wizard_icon"
+            android:title="@string/show_setup_wizard_icon"
+            android:summary="@string/show_setup_wizard_icon_summary"
+            android:switchTextOn=""
+            android:switchTextOff="" />
+        <!-- title will be set programmatically to embed application name -->
+        <SwitchPreference
+            android:key="pref_enable_metrics_logging"
+            android:summary="@string/enable_metrics_logging_summary"
+            android:switchTextOn=""
+            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
         <PreferenceScreen
-            android:key="pref_advanced_settings"
-            android:title="@string/advanced_settings"
-            android:summary="@string/advanced_settings_summary">
-            <CheckBoxPreference
-                android:key="pref_key_use_contacts_dict"
-                android:title="@string/use_contacts_dict"
-                android:summary="@string/use_contacts_dict_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
-            <CheckBoxPreference
-                android:key="pref_key_use_double_space_period"
-                android:title="@string/use_double_space_period"
-                android:summary="@string/use_double_space_period_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
-            <CheckBoxPreference
-                android:key="pref_show_language_switch_key"
-                android:title="@string/show_language_switch_key"
-                android:summary="@string/show_language_switch_key_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
-            <CheckBoxPreference
-                android:key="pref_include_other_imes_in_language_switch_list"
-                android:dependency="pref_show_language_switch_key"
-                android:title="@string/include_other_imes_in_language_switch_list"
-                android:summary="@string/include_other_imes_in_language_switch_list_summary"
-                android:persistent="true"
-                android:defaultValue="false" />
-            <ListPreference
-                android:key="pref_keyboard_theme"
-                android:title="@string/keyboard_color_scheme"
-                android:persistent="true"
-                android:entryValues="@array/keyboard_theme_ids"
-                android:entries="@array/keyboard_theme_names" />
-            <PreferenceScreen
-                android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
-                android:key="custom_input_styles"
-                android:title="@string/custom_input_styles_title" />
-            <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
-            <ListPreference
-                android:key="pref_key_preview_popup_dismiss_delay"
-                android:title="@string/key_preview_popup_dismiss_delay" />
-            <com.android.inputmethod.latin.settings.SeekBarDialogPreference
-                android:key="pref_vibration_duration_settings"
-                android:title="@string/prefs_keypress_vibration_duration_settings"
-                latin:maxValue="@integer/config_max_vibration_duration" />
-            <com.android.inputmethod.latin.settings.SeekBarDialogPreference
-                android:key="pref_keypress_sound_volume"
-                android:title="@string/prefs_keypress_sound_volume_settings"
-                latin:maxValue="100" /> <!-- percent -->
-            <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
-                 the default value is added programmatically. -->
-            <CheckBoxPreference
-                android:key="pref_show_setup_wizard_icon"
-                android:title="@string/show_setup_wizard_icon"
-                android:summary="@string/show_setup_wizard_icon_summary" />
-        </PreferenceScreen>
-        <PreferenceScreen
-            android:key="send_feedback"
-            android:title="@string/send_feedback" />
-        <PreferenceScreen
-            android:key="about_keyboard" />
-        <PreferenceScreen
-            android:key="debug_settings"
+            android:key="screen_debug"
             android:title="Debug settings"
             android:persistent="true"
             android:defaultValue="false" />
-    </PreferenceCategory>
+    </PreferenceScreen>
 </PreferenceScreen>
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index 0bcc5cb..be4c8b3 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -20,20 +20,26 @@
     android:title="@string/prefs_debug_mode"
     android:key="english_ime_debug_settings"
 >
-    <CheckBoxPreference
+    <SwitchPreference
         android:key="debug_mode"
         android:title="@string/prefs_debug_mode"
+        android:switchTextOn=""
+        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="false" />
-    <CheckBoxPreference
+    <SwitchPreference
         android:key="force_non_distinct_multitouch"
         android:title="@string/prefs_force_non_distinct_multitouch"
+        android:switchTextOn=""
+        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="false" />
-    <CheckBoxPreference
+    <SwitchPreference
         android:key="pref_sliding_key_input_preview"
         android:title="@string/sliding_key_input_preview"
         android:summary="@string/sliding_key_input_preview_summary"
+        android:switchTextOn=""
+        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="true" />
     <com.android.inputmethod.latin.settings.SeekBarDialogPreference
diff --git a/java/res/xml/spell_checker_settings.xml b/java/res/xml/spell_checker_settings.xml
index de67e7f..e3db485 100644
--- a/java/res/xml/spell_checker_settings.xml
+++ b/java/res/xml/spell_checker_settings.xml
@@ -15,11 +15,14 @@
 -->
 
 <PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android">
-  <CheckBoxPreference
-     android:key="pref_spellcheck_use_contacts"
-     android:title="@string/use_contacts_for_spellchecking_option_title"
-     android:summary="@string/use_contacts_for_spellchecking_option_summary"
-     android:persistent="true"
-     android:defaultValue="true" />
+    xmlns:android="http://schemas.android.com/apk/res/android"
+>
+    <SwitchPreference
+        android:key="pref_spellcheck_use_contacts"
+        android:title="@string/use_contacts_for_spellchecking_option_title"
+        android:summary="@string/use_contacts_for_spellchecking_option_summary"
+        android:switchTextOn=""
+        android:switchTextOff=""
+        android:persistent="true"
+        android:defaultValue="true" />
 </PreferenceScreen>