diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2549f61..0145de9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -537,11 +537,11 @@
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter android:priority="5">
+            <intent-filter android:priority="240">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.system" />
+                android:value="com.android.settings.category.ia.system" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.DateTimeSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -552,7 +552,7 @@
                 android:label="@string/language_picker_title"
                 android:icon="@drawable/ic_settings_language"
                 android:taskAffinity="com.android.settings"
-                android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+                android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.LOCALE_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -568,25 +568,25 @@
                 android:value="true" />
         </activity>
 
-        <activity android:name="Settings$InputMethodAndLanguageSettingsActivity"
+        <activity android:name=".Settings$LanguageAndInputSettingsActivity"
             android:label="@string/language_keyboard_settings_title"
             android:icon="@drawable/ic_settings_language"
             android:taskAffinity="com.android.settings"
-            android:parentActivityName="Settings">
+            android:parentActivityName="Settings$SystemDashboardActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter android:priority="-1">
-                <action android:name="com.android.settings.action.SETTINGS" />
+            <intent-filter android:priority="260">
+                <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.personal" />
+                android:value="com.android.settings.category.ia.system"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.inputmethod.InputMethodAndLanguageSettings" />
+                android:value="com.android.settings.language.LanguageAndInputSettings"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                android:value="true" />
+                android:value="true"/>
         </activity>
 
         <activity android:name="Settings$AvailableVirtualKeyboardActivity"
@@ -648,15 +648,15 @@
                 android:label="@string/language_keyboard_settings_title"
                 android:clearTaskOnLaunch="true"
                 android:exported="true"
-                android:targetActivity="Settings$InputMethodAndLanguageSettingsActivity">
+                android:targetActivity="Settings$LanguageAndInputSettingsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.inputmethod.InputMethodAndLanguageSettings" />
+                android:value="com.android.settings.language.LanguageAndInputSettings" />
         </activity-alias>
 
         <activity android:name="Settings$SpellCheckersSettingsActivity"
                 android:label="@string/spellcheckers_settings_title"
                 android:taskAffinity="com.android.settings"
-                android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+                android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
@@ -692,7 +692,7 @@
         <activity android:name="Settings$UserDictionarySettingsActivity"
                 android:label="@string/user_dict_settings_title"
                 android:taskAffinity="com.android.settings"
-                android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+                android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.USER_DICTIONARY_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -955,11 +955,11 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
-            <intent-filter android:priority="-1">
+            <intent-filter android:priority="10">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.system" />
+                android:value="com.android.settings.category.ia.system" />
             <meta-data android:name="com.android.settings.title"
                 android:resource="@string/about_settings" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1454,15 +1454,17 @@
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="4">
+            <intent-filter android:priority="2">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.system" />
+                android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.AccessibilitySettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
+            <meta-data android:name="com.android.settings.summary"
+                android:resource="@string/accessibility_settings_summary" />
         </activity>
 
         <activity android:name=".accessibility.AccessibilitySettingsForSetupWizardActivity"
@@ -1520,7 +1522,7 @@
         <activity android:name="Settings$TextToSpeechSettingsActivity"
                 android:label="@string/tts_settings"
                 android:taskAffinity="com.android.settings"
-                android:parentActivityName="Settings$InputMethodAndLanguageSettingsActivity">
+                android:parentActivityName="Settings$LanguageAndInputSettingsActivity">
             <intent-filter android:priority="1">
                 <action android:name="com.android.settings.TTS_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -1540,11 +1542,11 @@
                 <action android:name="android.settings.ENTERPRISE_PRIVACY_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter>
+            <intent-filter android:priority="-1">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.device" />
+                android:value="com.android.settings.category.ia.system" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.enterprise.EnterprisePrivacySettings" />
         </activity>
@@ -1918,11 +1920,11 @@
                 <action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter android:priority="2">
+            <intent-filter android:priority="50">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.system" />
+                android:value="com.android.settings.category.ia.system" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.DevelopmentSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -2931,27 +2933,7 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.webview.WebViewAppPicker" />
-      </activity-alias>
-
-        <!-- activity for gesture settings -->
-        <activity android:name="Settings$GestureSettingsActivity"
-                  android:label="@string/gesture_preference_title"
-                  android:icon="@drawable/ic_settings_gestures"
-                  android:enabled="@bool/config_gesture_settings_enabled">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.SHORTCUT" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.device" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.GestureSettings" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/gesture_preference_summary" />
-        </activity>
+        </activity-alias>
 
         <activity android:name=".backup.BackupSettingsActivity"
                   android:label="@string/privacy_settings_title"
@@ -2968,11 +2950,11 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
-            <intent-filter android:priority="-2">
+            <intent-filter android:priority="60">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
             <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.personal" />
+                       android:value="com.android.settings.category.ia.system" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3118,21 +3100,6 @@
               android:value="true" />
         </activity>
 
-        <activity-alias android:name="AccessibilityDashboardAlias"
-                        android:targetActivity="Settings$AccessibilitySettingsActivity">
-            <intent-filter android:priority="2">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.homepage" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.accessibility.AccessibilitySettings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/accessibility_settings_summary" />
-        </activity-alias>
-
         <activity android:name=".Settings$SystemDashboardActivity"
                   android:label="@string/header_category_system"
                   android:icon="@drawable/ic_dashboard_system">
@@ -3161,78 +3128,6 @@
                        android:resource="@string/support_summary"/>
         </activity>
 
-        <!-- Alias for IME & Language in new IA. Should merge into TargetActivity when launch -->
-        <activity android:name=".Settings$LanguageAndInputSettingsActivity"
-                  android:label="@string/language_keyboard_settings_title"
-                  android:icon="@drawable/ic_settings_language">
-            <intent-filter android:priority="260">
-                <action android:name="com.android.settings.action.SETTINGS"/>
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system"/>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.language.LanguageAndInputSettings"/>
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true"/>
-            <!-- Inherit intent-filter from LanguageSettingsActivity -->
-        </activity>
-
-        <!-- Alias for Date & Time in new IA. Should merge into TargetActivity when launch -->
-        <activity-alias android:name="DateTimeDashboardAlias"
-                        android:targetActivity="Settings$DateTimeSettingsActivity">
-            <intent-filter android:priority="240">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.DateTimeSettings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-        </activity-alias>
-
-        <activity-alias android:name="BackupResetDashboardAlias"
-                        android:targetActivity=".backup.BackupSettingsActivity">
-            <intent-filter android:priority="60">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-        </activity-alias>
-
-        <!-- Alias for developer setting in new IA. Should merge into TargetActivity when launch -->
-        <activity-alias android:name="DevelopmentSettingsDashboardAlias"
-                        android:targetActivity="Settings$DevelopmentSettingsActivity"
-                        android:label="@string/development_settings_title"
-                        android:icon="@drawable/ic_settings_development">
-            <intent-filter android:priority="50">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.DevelopmentSettings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-        </activity-alias>
-
-        <activity-alias android:name="AboutDeviceDashboardAlias"
-                        android:targetActivity="Settings$DeviceInfoSettingsActivity">
-            <intent-filter android:priority="10">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                       android:value="com.android.settings.category.ia.system" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.DeviceInfoSettings" />
-            <meta-data android:name="com.android.settings.title"
-                android:resource="@string/about_settings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                       android:value="true" />
-        </activity-alias>
-
         <activity-alias android:name="MemorySettingsDashboardAlias"
                         android:targetActivity=".Settings$MemorySettingsActivity">
             <intent-filter>
@@ -3335,18 +3230,6 @@
                        android:value="true"/>
         </activity-alias>
 
-        <!-- Alias for enterprise privacy setting in new IA. Should merge into TargetActivity when launch -->
-        <activity-alias android:name="EnterprisePrivacyDashboardAlias"
-                        android:targetActivity="Settings$EnterprisePrivacySettingsActivity">
-            <intent-filter android:priority="-1">
-                <action android:name="com.android.settings.action.SETTINGS" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.category"
-                android:value="com.android.settings.category.ia.system" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.enterprise.EnterprisePrivacySettings" />
-        </activity-alias>
-
         <!-- End of information architecture host activities -->
 
         <service
diff --git a/res/xml/gesture_settings.xml b/res/xml/gesture_settings.xml
deleted file mode 100644
index 808c9b2..0000000
--- a/res/xml/gesture_settings.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/gesture_preference_title"
-    settings:keywords="@string/keywords_gesture">
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_assist"
-        android:title="@string/assist_gesture_title"
-        android:summary="@string/assist_gesture_summary"
-        settings:animation="@raw/gesture_assist"
-        settings:preview="@drawable/gesture_assist"/>
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_swipe_down_fingerprint"
-        android:title="@string/fingerprint_swipe_for_notifications_title"
-        android:summary="@string/fingerprint_swipe_for_notifications_summary"
-        settings:animation="@raw/gesture_fingerprint_swipe"
-        settings:preview="@drawable/gesture_fingerprint_swipe"/>
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_double_tap_power"
-        android:title="@string/double_tap_power_for_camera_title"
-        android:summary="@string/double_tap_power_for_camera_summary"
-        settings:animation="@raw/gesture_double_tap"
-        settings:preview="@drawable/gesture_double_tap"/>
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_double_twist"
-        android:title="@string/double_twist_for_camera_mode_title"
-        android:summary="@string/double_twist_for_camera_mode_summary"
-        settings:animation="@raw/gesture_twist"
-        settings:preview="@drawable/gesture_twist"/>
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_double_tap_screen"
-        android:title="@string/ambient_display_title"
-        android:summary="@string/ambient_display_summary"
-        settings:animation="@raw/gesture_ambient_tap"
-        settings:preview="@drawable/gesture_ambient_tap"/>
-
-    <com.android.settings.gestures.GesturePreference
-        android:key="gesture_pick_up"
-        android:title="@string/ambient_display_pickup_title"
-        android:summary="@string/ambient_display_pickup_summary"
-        settings:animation="@raw/gesture_ambient_lift"
-        settings:preview="@drawable/gesture_ambient_lift"/>
-
-</PreferenceScreen>
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
deleted file mode 100644
index 8aa105b..0000000
--- a/res/xml/language_settings.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:key="language_keyboard_settings"
-                  android:title="@string/language_keyboard_settings_title">
-
-    <Preference
-            android:key="phone_language"
-            android:title="@string/phone_language"
-            android:fragment="com.android.settings.localepicker.LocaleListEditor"
-            />
-
-    <!-- Spell checker preference title, summary and fragment will be set programmatically. -->
-    <!-- Note: Mark this as persistent="false" to remove unnecessarily saved shared preference.
-         See: InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference. -->
-    <Preference
-        android:key="spellcheckers_settings"
-        android:title="@string/spellcheckers_settings_title"
-        android:fragment="com.android.settings.inputmethod.SpellCheckersSettings"
-        android:persistent="false"/>
-
-    <!-- User dictionary preference title and fragment will be set programmatically. -->
-    <Preference
-            android:key="key_user_dictionary_settings"
-            android:title="@string/user_dict_settings_title"
-            />
-
-    <PreferenceCategory
-        android:title="@string/keyboard_and_input_methods_category">
-        <Preference
-            android:title="@string/virtual_keyboard_category"
-            android:fragment="com.android.settings.inputmethod.VirtualKeyboardFragment" />
-        <Preference
-            android:title="@string/physical_keyboard_title"
-            android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" />
-    </PreferenceCategory>
-
-    <PreferenceCategory
-            android:key="voice_category"
-            android:title="@string/voice_category" >
-
-        <Preference
-                android:key="tts_settings"
-                android:title="@string/tts_settings_title"
-                android:fragment="com.android.settings.tts.TextToSpeechSettings"
-                />
-
-    </PreferenceCategory>
-
-    <PreferenceCategory
-            android:key="pointer_settings_category"
-            android:title="@string/pointer_settings_category">
-
-        <com.android.settings.PointerSpeedPreference
-                android:key="pointer_speed"
-                android:title="@string/pointer_speed"
-                android:dialogTitle="@string/pointer_speed"
-                />
-
-    </PreferenceCategory>
-
-    <PreferenceCategory
-            android:key="game_controller_settings_category"
-            android:title="@string/game_controller_settings_category">
-
-        <SwitchPreference
-                android:key="vibrate_input_devices"
-                android:title="@string/vibrate_input_devices"
-                android:summaryOn="@string/vibrate_input_devices_summary"
-                android:summaryOff="@string/vibrate_input_devices_summary"
-                />
-
-    </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index e92027a..a2b499d 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -40,7 +40,6 @@
     public static class PublicVolumeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
-    public static class InputMethodAndLanguageSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AvailableVirtualKeyboardActivity extends SettingsActivity { /* empty */ }
     public static class KeyboardLayoutPickerActivity extends SettingsActivity { /* empty */ }
     public static class PhysicalKeyboardActivity extends SettingsActivity { /* empty */ }
@@ -68,10 +67,7 @@
     }
     public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ }
     public static class StorageUseActivity extends SettingsActivity { /* empty */ }
-    public static class DevelopmentSettingsActivity extends SettingsActivity {
-        public static final String DASHBOARD_ALIAS =
-                "com.android.settings.DevelopmentSettingsDashboardAlias";
-    }
+    public static class DevelopmentSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
     public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
@@ -87,7 +83,6 @@
     public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
-    public static class GestureSettingsActivity extends SettingsActivity { /* empty */ }
     public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
     public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
     public static class DataUsageSummaryActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 00bdf57..b0426ad 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -951,9 +951,6 @@
         setTileEnabled(new ComponentName(packageName,
                         Settings.DevelopmentSettingsActivity.class.getName()),
                 showDev, isAdmin);
-        setTileEnabled(new ComponentName(packageName,
-                        Settings.DevelopmentSettingsActivity.DASHBOARD_ALIAS),
-                showDev, isAdmin);
 
         if (UserHandle.MU_ENABLED && !isAdmin) {
             // When on restricted users, disable all extra categories (but only the settings ones).
@@ -981,17 +978,11 @@
         setTileEnabled(new ComponentName(packageName,
                 BackupSettingsActivity.class.getName()), true,
                 isAdmin || Utils.isCarrierDemoUser(this));
-        setTileEnabled(new ComponentName(packageName,
-                "com.android.settings.BackupResetDashboardAlias"), true, isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
                 Settings.EnterprisePrivacySettingsActivity.class.getName()),
                 FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
                         .hasDeviceOwner(), isAdmin);
-        setTileEnabled(new ComponentName(packageName,
-                        "com.android.settings.EnterprisePrivacyDashboardAlias"),
-                FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
-                        .hasDeviceOwner(), isAdmin);
         // Final step, refresh categories.
         updateCategories();
     }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index e0bb8bc..add504e 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -84,11 +84,9 @@
 import com.android.settings.gestures.DoubleTapPowerSettings;
 import com.android.settings.gestures.DoubleTapScreenSettings;
 import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.GestureSettings;
 import com.android.settings.gestures.PickupGestureSettings;
 import com.android.settings.gestures.SwipeToNotificationSettings;
 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.inputmethod.SpellCheckersSettings;
@@ -147,7 +145,6 @@
             VpnSettings.class.getName(),
             DateTimeSettings.class.getName(),
             LocaleListEditor.class.getName(),
-            InputMethodAndLanguageSettings.class.getName(),
             AvailableVirtualKeyboardFragment.class.getName(),
             LanguageAndInputSettings.class.getName(),
             SpellCheckersSettings.class.getName(),
@@ -180,7 +177,6 @@
             WifiDisplaySettings.class.getName(),
             PowerUsageSummary.class.getName(),
             AccountSyncSettings.class.getName(),
-            GestureSettings.class.getName(),
             AssistGestureSettings.class.getName(),
             SwipeToNotificationSettings.class.getName(),
             DoubleTapPowerSettings.class.getName(),
@@ -263,11 +259,9 @@
             Settings.StorageSettingsActivity.class.getName(),
             Settings.ManageApplicationsActivity.class.getName(),
             Settings.PowerUsageSummaryActivity.class.getName(),
-            Settings.GestureSettingsActivity.class.getName(),
             //personal_section
             Settings.LocationSettingsActivity.class.getName(),
             Settings.SecuritySettingsActivity.class.getName(),
-            Settings.InputMethodAndLanguageSettingsActivity.class.getName(),
             Settings.UserSettingsActivity.class.getName(),
             //system_section
             Settings.DateTimeSettingsActivity.class.getName(),
@@ -296,9 +290,5 @@
             "com.android.settings.DataUsageDashboardAlias",
             // Home page > System
             Settings.LanguageAndInputSettingsActivity.class.getName(),
-            "com.android.settings.DateTimeDashboardAlias",
-            "com.android.settings.AccessibilityDashboardAlias",
-            "com.android.settings.AboutDeviceDashboardAlias",
-            "com.android.settings.EnterprisePrivacyDashboardAlias",
     };
 }
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 4d0b8cf..8935ee3 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -28,7 +28,6 @@
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.deviceinfo.StorageDashboardFragment;
 import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.network.NetworkDashboardFragment;
 import com.android.settings.notification.SoundSettings;
@@ -80,8 +79,6 @@
                 CategoryKey.CATEGORY_ACCOUNT);
         PARENT_TO_CATEGORY_KEY_MAP.put(
                 SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
-        PARENT_TO_CATEGORY_KEY_MAP.put(InputMethodAndLanguageSettings.class.getName(),
-                CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
         PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
                 CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
         PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
deleted file mode 100644
index 8c038ff..0000000
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.gestures;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.provider.SearchIndexableResource;
-import android.support.v7.preference.Preference;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.hardware.AmbientDisplayConfiguration;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.core.lifecycle.Lifecycle;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Top level fragment for gesture settings.
- * This will create individual switch preference for each gesture and handle updates when each
- * preference is updated
- */
-public class GestureSettings extends DashboardFragment {
-
-    private static final String TAG = "GestureSettings";
-    private List<GesturePreference> mPreferences;
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.gesture_settings;
-    }
-
-    @Override
-    protected List<PreferenceController> getPreferenceControllers(Context context) {
-        final AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
-        final List<PreferenceController> controllers = new ArrayList<>();
-        final Lifecycle lifecycle = getLifecycle();
-        controllers.add(new AssistGesturePreferenceController(context, lifecycle));
-        controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle));
-        controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle));
-        controllers.add(new DoubleTwistPreferenceController(context, lifecycle));
-        controllers.add(new PickupGesturePreferenceController(
-                context, lifecycle, ambientConfig, UserHandle.myUserId()));
-        controllers.add(new DoubleTapScreenPreferenceController(
-                context, lifecycle, ambientConfig, UserHandle.myUserId()));
-        return controllers;
-    }
-
-    @Override
-    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-        super.onCreatePreferences(savedInstanceState, rootKey);
-        mPreferences = new ArrayList();
-        addPreferenceToTrackingList(AssistGesturePreferenceController.class);
-        addPreferenceToTrackingList(SwipeToNotificationPreferenceController.class);
-        addPreferenceToTrackingList(DoubleTapScreenPreferenceController.class);
-        addPreferenceToTrackingList(DoubleTwistPreferenceController.class);
-        addPreferenceToTrackingList(PickupGesturePreferenceController.class);
-        addPreferenceToTrackingList(DoubleTapPowerPreferenceController.class);
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        View view = super.onCreateView(inflater, container, savedInstanceState);
-        RecyclerView listview = getListView();
-        listview.addOnScrollListener(new RecyclerView.OnScrollListener() {
-            @Override
-            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
-                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
-                    for (GesturePreference pref : mPreferences) {
-                        pref.setScrolling(true);
-                    }
-                } else if (newState == RecyclerView.SCROLL_STATE_IDLE) {
-                    for (GesturePreference pref : mPreferences) {
-                        pref.setScrolling(false);
-                    }
-                }
-            }
-
-            @Override
-            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
-            }
-        });
-        return view;
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        for (GesturePreference preference : mPreferences) {
-            preference.onViewVisible();
-        }
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        for (GesturePreference preference : mPreferences) {
-            preference.onViewInvisible();
-        }
-    }
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getHelpResource() {
-        return R.string.help_url_gestures;
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.SETTINGS_GESTURES;
-    }
-
-    private <T extends PreferenceController> void addPreferenceToTrackingList(Class<T> clazz) {
-        final PreferenceController controller = getPreferenceController(clazz);
-        final Preference preference = findPreference(controller.getPreferenceKey());
-        if (preference != null && preference instanceof GesturePreference) {
-            mPreferences.add((GesturePreference) preference);
-        }
-    }
-}
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
deleted file mode 100644
index 121af98..0000000
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.inputmethod;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.hardware.input.InputDeviceIdentifier;
-import android.speech.tts.TtsEngines;
-import android.support.v7.preference.Preference;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.Settings.KeyboardLayoutPickerActivity;
-import com.android.settings.Utils;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.language.PhoneLanguagePreferenceController;
-import com.android.settings.language.TtsPreferenceController;
-import com.android.settings.language.UserDictionaryPreferenceController;
-import com.android.settings.localepicker.LocaleFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settings.search.SearchIndexableRaw;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @deprecated New features should use {@code InputAndGestureSettings} and
- * {@code LanguageAndRegionSettings} instead.
- */
-@Deprecated
-public class InputMethodAndLanguageSettings extends DashboardFragment
-        implements KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable {
-
-    private static final String TAG = "IMEAndLanguageSetting";
-
-    private Intent mIntentWaitingForResult;
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.INPUTMETHOD_LANGUAGE;
-    }
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.language_settings;
-    }
-
-    @Override
-    protected List<PreferenceController> getPreferenceControllers(Context context) {
-        final GameControllerPreferenceController gameControllerPreferenceController =
-                new GameControllerPreferenceController(context);
-        getLifecycle().addObserver(gameControllerPreferenceController);
-
-        final List<PreferenceController> list = new ArrayList<>();
-        list.add(gameControllerPreferenceController);
-        list.add(new PhoneLanguagePreferenceController(context));
-        list.add(new SpellCheckerPreferenceController(context));
-        list.add(new UserDictionaryPreferenceController(context));
-        list.add(new TtsPreferenceController(context, new TtsEngines(context)));
-        return list;
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(Preference preference) {
-        // Input Method stuff
-        if (Utils.isMonkeyRunning()) {
-            return false;
-        }
-        return super.onPreferenceTreeClick(preference);
-    }
-
-    private void showKeyboardLayoutDialog(InputDeviceIdentifier inputDeviceIdentifier) {
-        KeyboardLayoutDialogFragment fragment = (KeyboardLayoutDialogFragment)
-                getFragmentManager().findFragmentByTag("keyboardLayout");
-        if (fragment == null) {
-            fragment = new KeyboardLayoutDialogFragment(inputDeviceIdentifier);
-            fragment.setTargetFragment(this, 0);
-            fragment.show(getActivity().getFragmentManager(), "keyboardLayout");
-        }
-    }
-
-    @Override
-    public void onSetupKeyboardLayouts(InputDeviceIdentifier inputDeviceIdentifier) {
-        final Intent intent = new Intent(Intent.ACTION_MAIN);
-        intent.setClass(getActivity(), KeyboardLayoutPickerActivity.class);
-        intent.putExtra(KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER,
-                inputDeviceIdentifier);
-        mIntentWaitingForResult = intent;
-        startActivityForResult(intent, 0);
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-
-        if (mIntentWaitingForResult != null) {
-            InputDeviceIdentifier inputDeviceIdentifier = mIntentWaitingForResult
-                    .getParcelableExtra(KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER);
-            mIntentWaitingForResult = null;
-            showKeyboardLayoutDialog(inputDeviceIdentifier);
-        }
-    }
-
-    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
-
-        private final SummaryLoader mSummaryLoader;
-        private LocaleFeatureProvider mLocaleFeatureProvider;
-
-        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
-            mSummaryLoader = summaryLoader;
-            mLocaleFeatureProvider = FeatureFactory.getFactory(context).getLocaleFeatureProvider();
-        }
-
-        @Override
-        public void setListening(boolean listening) {
-            if (listening) {
-                String localeNames = mLocaleFeatureProvider.getLocaleNames();
-                mSummaryLoader.setSummary(this, localeNames);
-            }
-        }
-    }
-
-    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
-            = new SummaryLoader.SummaryProviderFactory() {
-        @Override
-        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
-                SummaryLoader summaryLoader) {
-            return new SummaryProvider(activity, summaryLoader);
-        }
-    };
-
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-        @Override
-        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
-            List<SearchIndexableRaw> indexables = new ArrayList<>();
-
-            final String screenTitle = context.getString(R.string.language_keyboard_settings_title);
-
-            // Locale picker.
-            final PhoneLanguagePreferenceController mLanguagePrefController =
-                    new PhoneLanguagePreferenceController(context);
-            if (mLanguagePrefController.isAvailable()) {
-                String localeNames = FeatureFactory.getFactory(context).getLocaleFeatureProvider()
-                        .getLocaleNames();
-                SearchIndexableRaw indexable = new SearchIndexableRaw(context);
-                indexable.key = mLanguagePrefController.getPreferenceKey();
-                indexable.title = context.getString(R.string.phone_language);
-                indexable.summaryOn = localeNames;
-                indexable.summaryOff = localeNames;
-                indexable.screenTitle = screenTitle;
-                indexables.add(indexable);
-            }
-
-            // Spell checker.
-            SearchIndexableRaw indexable = new SearchIndexableRaw(context);
-            indexable.key = SpellCheckerPreferenceController.KEY_SPELL_CHECKERS;
-            indexable.title = context.getString(R.string.spellcheckers_settings_title);
-            indexable.screenTitle = screenTitle;
-            indexable.keywords = context.getString(R.string.keywords_spell_checker);
-            indexables.add(indexable);
-
-            // User dictionary.
-            if (UserDictionaryList.getUserDictionaryLocalesSet(context) != null) {
-                indexable = new SearchIndexableRaw(context);
-                indexable.key = "user_dict_settings";
-                indexable.title = context.getString(R.string.user_dict_settings_title);
-                indexable.screenTitle = screenTitle;
-                indexables.add(indexable);
-            }
-
-            // Keyboard settings.
-            indexable = new SearchIndexableRaw(context);
-            indexable.key = "keyboard_settings";
-            indexable.title = context.getString(R.string.keyboard_settings_category);
-            indexable.screenTitle = screenTitle;
-            indexable.keywords = context.getString(R.string.keywords_keyboard_and_ime);
-            indexables.add(indexable);
-
-            if (!PhysicalKeyboardFragment.getPhysicalFullKeyboards().isEmpty()) {
-                // Hard keyboard category.
-                indexable = new SearchIndexableRaw(context);
-                indexable.key = "builtin_keyboard_settings";
-                indexable.title = context.getString(R.string.builtin_keyboard_settings_title);
-                indexable.screenTitle = screenTitle;
-                indexables.add(indexable);
-            }
-
-            // Text-to-speech.
-            TtsEngines ttsEngines = new TtsEngines(context);
-            if (!ttsEngines.getEngines().isEmpty()) {
-                indexable = new SearchIndexableRaw(context);
-                indexable.key = "tts_settings";
-                indexable.title = context.getString(R.string.tts_settings_title);
-                indexable.screenTitle = screenTitle;
-                indexable.keywords = context.getString(R.string.keywords_text_to_speech_output);
-                indexables.add(indexable);
-            }
-
-            // Pointer settings.
-            indexable = new SearchIndexableRaw(context);
-            indexable.key = "pointer_settings_category";
-            indexable.title = context.getString(R.string.pointer_settings_category);
-            indexable.screenTitle = screenTitle;
-            indexables.add(indexable);
-
-            indexable = new SearchIndexableRaw(context);
-            indexable.key = "pointer_speed";
-            indexable.title = context.getString(R.string.pointer_speed);
-            indexable.screenTitle = screenTitle;
-            indexables.add(indexable);
-
-            // Game controllers.
-            if (!new GameControllerPreferenceController(context).isAvailable()) {
-                indexable = new SearchIndexableRaw(context);
-                indexable.key = GameControllerPreferenceController.PREF_KEY;
-                indexable.title = context.getString(R.string.vibrate_input_devices);
-                indexable.summaryOn = context.getString(R.string.vibrate_input_devices_summary);
-                indexable.summaryOff = context.getString(R.string.vibrate_input_devices_summary);
-                indexable.screenTitle = screenTitle;
-                indexables.add(indexable);
-            }
-
-            return indexables;
-        }
-    };
-}
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index 0cc2688..c91f381 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -49,9 +49,9 @@
 import com.android.internal.content.PackageMonitor;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.inputmethod.VirtualKeyboardFragment;
+import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.print.PrintSettingsFragment;
 
 import java.util.ArrayList;
@@ -423,7 +423,7 @@
             mContentResolver = context.getContentResolver();
             mInputMethodServices.clear();
             // Build index of {@link UserDictionary}.
-            buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
+            buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
             // Build index of IMEs.
             buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
             buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
@@ -478,7 +478,7 @@
                 buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
                 buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
             } else if (UserDictionary.Words.CONTENT_URI.equals(uri)) {
-                buildIndex(InputMethodAndLanguageSettings.class, true /* rebuild */);
+                buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
             }
         }
     }
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index fc1b8d9..40121f4 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -41,8 +41,13 @@
 import com.android.settings.enterprise.EnterprisePrivacySettings;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.gestures.GestureSettings;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
+import com.android.settings.gestures.AssistGestureSettings;
+import com.android.settings.gestures.DoubleTapPowerSettings;
+import com.android.settings.gestures.DoubleTapScreenSettings;
+import com.android.settings.gestures.DoubleTwistGestureSettings;
+import com.android.settings.gestures.PickupGestureSettings;
+import com.android.settings.gestures.SwipeToNotificationSettings;
+import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.location.LocationSettings;
 import com.android.settings.location.ScanningSettings;
 import com.android.settings.notification.ConfigureNotificationSettings;
@@ -154,7 +159,12 @@
         sRankMap.put(UserSettings.class.getName(), RANK_USERS);
 
         // Gestures
-        sRankMap.put(GestureSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(AssistGestureSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(DoubleTapPowerSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(DoubleTapScreenSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(DoubleTwistGestureSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(PickupGestureSettings.class.getName(), RANK_GESTURE);
+        sRankMap.put(SwipeToNotificationSettings.class.getName(), RANK_GESTURE);
 
         // Location
         sRankMap.put(LocationSettings.class.getName(), RANK_LOCATION);
@@ -169,7 +179,7 @@
         sRankMap.put(UserAndAccountDashboardFragment.class.getName(), RANK_ACCOUNT);
 
         // IMEs
-        sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
+        sRankMap.put(LanguageAndInputSettings.class.getName(), RANK_IME);
 
         // Privacy
         sRankMap.put(PrivacySettings.class.getName(), RANK_PRIVACY);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 1968c7a..12b5eae 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -44,7 +44,6 @@
 import com.android.settings.datausage.DataUsageMeteredSettings;
 import com.android.settings.datausage.DataUsageSummary;
 import com.android.settings.deviceinfo.StorageDashboardFragment;
-import com.android.settings.deviceinfo.StorageProfileFragment;
 import com.android.settings.deviceinfo.StorageSettings;
 import com.android.settings.display.ScreenZoomSettings;
 import com.android.settings.enterprise.EnterprisePrivacySettings;
@@ -56,11 +55,9 @@
 import com.android.settings.gestures.DoubleTapPowerSettings;
 import com.android.settings.gestures.DoubleTapScreenSettings;
 import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.GestureSettings;
 import com.android.settings.gestures.PickupGestureSettings;
 import com.android.settings.gestures.SwipeToNotificationSettings;
 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.inputmethod.VirtualKeyboardFragment;
 import com.android.settings.language.LanguageAndInputSettings;
@@ -139,7 +136,6 @@
         addIndex(SpecialAccessSettings.class,
                 R.xml.special_access, R.drawable.ic_settings_applications);
         addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser);
-        addIndex(GestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
         addIndex(AssistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
         addIndex(PickupGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
         addIndex(DoubleTapScreenSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
@@ -156,8 +152,6 @@
         addIndex(ScreenPinningSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
         addIndex(UserAndAccountDashboardFragment.class, NO_DATA_RES_ID,
                 R.drawable.ic_settings_accounts);
-        addIndex(InputMethodAndLanguageSettings.class,
-                NO_DATA_RES_ID, R.drawable.ic_settings_language);
         addIndex(VirtualKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
         addIndex(AvailableVirtualKeyboardFragment.class,
                 NO_DATA_RES_ID, R.drawable.ic_settings_language);
diff --git a/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java b/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java
deleted file mode 100644
index 4f3a524..0000000
--- a/tests/app/src/com/android/settings/gesture/GestureSettingsTest.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2016 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.settings.gesture;
-
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Settings.Secure;
-import android.support.test.filters.MediumTest;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.UiScrollable;
-import android.test.InstrumentationTestCase;
-import android.util.Log;
-import android.widget.RelativeLayout;
-import android.widget.Switch;
-
-import com.android.settings.R;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import org.junit.Test;
-
-/**
- * Test for Gesture preferences.
- */
-@MediumTest
-public class GestureSettingsTest extends InstrumentationTestCase {
-
-    private static final String TAG = "GestureSettingsTest";
-
-    private UiDevice mDevice;
-    private Context mTargetContext;
-    private String mTargetPackage;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mDevice = UiDevice.getInstance(getInstrumentation());
-        mTargetContext = getInstrumentation().getTargetContext();
-        mTargetPackage = mTargetContext.getPackageName();
-    }
-
-    @Test
-    public void testAmbientDisplaySwitchPreference() throws Exception {
-        launchSettings();
-        UiObject dozeSwitch = getDozeSwitch();
-        assertNotNull(dozeSwitch);
-        assertTrue(dozeSwitch.exists());
-        assertToggleStateMatchesSettingValue(dozeSwitch, Secure.DOZE_ENABLED, 1, 1);
-    }
-
-    @Test
-    public void testGestureSettingsExists() throws Exception {
-        launchMoves();
-        UiObject titleObj = mDevice.findObject(new UiSelector().text(
-                mTargetContext.getResources().getString(R.string.gesture_preference_title)));
-        assertNotNull(titleObj);
-        assertTrue(titleObj.exists());
-    }
-
-    @Test
-    public void testCameraDoubleTapToggle() throws Exception {
-        assertSwitchToggle(mTargetContext.getResources().getString(
-                R.string.double_tap_power_for_camera_title),
-                Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0, 0);
-    }
-
-    @Test
-    public void testCameraDoubleTwistToggle() throws Exception {
-        assertSwitchToggle(mTargetContext.getResources().getString(
-                R.string.double_twist_for_camera_mode_title),
-                Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1, 1);
-    }
-
-    @Test
-    public void testFingerprintSwipeToggle() throws Exception {
-        assertSwitchToggle(mTargetContext.getResources().getString(
-                R.string.fingerprint_swipe_for_notifications_title),
-                Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, 0, 1);
-    }
-
-    @Test
-    public void testDozeDoubleTapToggle() throws Exception {
-        assertSwitchToggle(mTargetContext.getResources().getString(
-                R.string.ambient_display_title),
-                Secure.DOZE_PULSE_ON_DOUBLE_TAP, 1, 1);
-    }
-
-    @Test
-    public void testDozePickupToggle() throws Exception {
-        assertSwitchToggle(mTargetContext.getResources().getString(
-                R.string.ambient_display_pickup_title),
-                Secure.DOZE_PULSE_ON_PICK_UP, 1, 1);
-    }
-
-    private void launchSettings() {
-        Intent settingsIntent = new Intent(Intent.ACTION_MAIN)
-                .addCategory(Intent.CATEGORY_LAUNCHER)
-                .setPackage(mTargetPackage)
-                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        getInstrumentation().getContext().startActivity(settingsIntent);
-    }
-
-    private void launchMoves() throws Exception  {
-        launchSettings();
-        UiScrollable settings = new UiScrollable(
-                new UiSelector().packageName(mTargetPackage).scrollable(true));
-        String titleMoves =
-                mTargetContext.getResources().getString(R.string.gesture_preference_title);
-        settings.scrollTextIntoView(titleMoves);
-        mDevice.findObject(new UiSelector().text(titleMoves)).click();
-    }
-
-    private void navigateToMovesSetting(String title) throws Exception {
-        launchMoves();
-        UiScrollable moves = new UiScrollable(
-                new UiSelector().packageName(mTargetPackage).scrollable(true));
-        moves.scrollTextIntoView(title);
-    }
-
-    private UiScrollable navigateToAmbientDisplay() throws Exception {
-        UiScrollable settings = new UiScrollable(
-                new UiSelector().packageName(mTargetPackage).scrollable(true));
-        String titleDisplay =
-                mTargetContext.getResources().getString(R.string.display_settings_title);
-        settings.scrollTextIntoView(titleDisplay);
-        mDevice.findObject(new UiSelector().text(titleDisplay)).click();
-        settings.scrollTextIntoView(mTargetContext.getResources().getString(R.string.doze_title));
-        return settings;
-    }
-
-    private UiObject getGestureSwitch(String title) throws Exception {
-        UiObject titleView = mDevice.findObject(new UiSelector().text(title));
-        UiObject gestureSwitch =
-            titleView.getFromParent(new UiSelector().className(Switch.class.getName()));
-        assertNotNull(gestureSwitch);
-        assertTrue(gestureSwitch.exists());
-        return gestureSwitch;
-    }
-
-    private UiObject getDozeSwitch() throws Exception {
-        UiScrollable settings = navigateToAmbientDisplay();
-        UiObject dozeSwitch = null;
-        UiSelector relativeLayoutSelector =
-                new UiSelector().className(RelativeLayout.class.getName());
-        String titleDoze = mTargetContext.getResources().getString(R.string.doze_title);
-        for (int i = 0; i <= settings.getChildCount(relativeLayoutSelector); i++) {
-            UiObject relativeLayout = settings.getChild(relativeLayoutSelector.instance(i));
-            if (relativeLayout.getChildCount() != 2) {
-                continue;
-            }
-            UiObject obj1 = relativeLayout.getChild(new UiSelector().index(0));
-            if (obj1.getText() == titleDoze) {
-                return relativeLayout.getFromParent(
-                        new UiSelector().className(Switch.class.getName()));
-            }
-        }
-        return null;
-    }
-
-    private void assertSwitchToggle(String title, String key, int defaultVal, int enabledVal)
-            throws Exception {
-        navigateToMovesSetting(title);
-        assertToggleStateMatchesSettingValue(getGestureSwitch(title), key, defaultVal, enabledVal);
-    }
-
-    private void assertToggleStateMatchesSettingValue (
-            UiObject testSwitch, String key, int defaultVal, int enabledVal) throws Exception {
-        // check initial state
-        int currentValue = Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal);
-        boolean enabled = currentValue == enabledVal;
-        assertEquals(enabled, testSwitch.isChecked());
-        // toggle the preference
-        testSwitch.click();
-        assertEquals(!enabled, testSwitch.isChecked());
-        int newValue = currentValue == 1 ? 0 : 1;
-        assertEquals(newValue, Secure.getInt(mTargetContext.getContentResolver(), key, defaultVal));
-    }
-
-}
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 76d1013..a63bd7f 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -3,6 +3,5 @@
 com.android.settings.notification.ZenModePrioritySettings
 com.android.settings.inputmethod.InputAndGestureSettings
 com.android.settings.accounts.AccountDetailDashboardFragment
-com.android.settings.gestures.GestureSettings
 com.android.settings.fuelgauge.PowerUsageDetail
 com.android.settings.deviceinfo.StorageProfileFragment
diff --git a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
index 5ebc4b9..0bd651a 100644
--- a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
+++ b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
@@ -58,9 +58,9 @@
 import com.android.settings.TestConfig;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.inputmethod.PhysicalKeyboardFragment;
 import com.android.settings.inputmethod.VirtualKeyboardFragment;
+import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager;
 import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver;
@@ -417,7 +417,7 @@
         final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI);
         assertThat(observer).isNotNull();
 
-        verifyRebuildIndexing(InputMethodAndLanguageSettings.class);
+        verifyRebuildIndexing(LanguageAndInputSettings.class);
 
         /*
          * When user dictionary content is changed, rebuild indexing happens.
@@ -426,7 +426,7 @@
 
         observer.onChange(false /* selfChange */, UserDictionary.Words.CONTENT_URI);
 
-        verifyRebuildIndexing(InputMethodAndLanguageSettings.class);
+        verifyRebuildIndexing(LanguageAndInputSettings.class);
     }
 
     /*
diff --git a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
index 300aaaf..028cbb0 100644
--- a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
+++ b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
@@ -56,40 +56,40 @@
 
     @Test
     public void testDataTitleValid_ReturnsPreferenceTitle() {
-        XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
-                "com.android.settings.gestures.GesturePreference");
+        XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+                "com.android.settings.TimeoutListPreference");
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String title = XmlParserUtils.getDataTitle(mContext, attrs);
-        String expTitle = mContext.getString(R.string.assist_gesture_title);
+        String expTitle = mContext.getString(R.string.screen_timeout);
         assertThat(title).isEqualTo(expTitle);
     }
 
     @Test
     public void testDataKeywordsValid_ReturnsPreferenceKeywords() {
-        XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+        XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String keywords = XmlParserUtils.getDataKeywords(mContext, attrs);
-        String expKeywords = mContext.getString(R.string.keywords_gesture);
+        String expKeywords = mContext.getString(R.string.keywords_display);
         assertThat(keywords).isEqualTo(expKeywords);
     }
 
     @Test
     public void testDataKeyValid_ReturnsPreferenceKey() {
-        XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
-                "com.android.settings.gestures.GesturePreference");
+        XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+                "com.android.settings.TimeoutListPreference");
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String key = XmlParserUtils.getDataKey(mContext, attrs);
-        String expKey = "gesture_assist";
+        String expKey = "screen_timeout";
         assertThat(key).isEqualTo(expKey);
     }
 
     @Test
     public void testDataSummaryValid_ReturnsPreferenceSummary() {
-        XmlResourceParser parser = getChildByType(R.xml.gesture_settings,
-                "com.android.settings.gestures.GesturePreference");
+        XmlResourceParser parser = getChildByType(R.xml.ia_display_settings,
+                "com.android.settings.TimeoutListPreference");
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String summary = XmlParserUtils.getDataSummary(mContext, attrs);
-        String expSummary = mContext.getString(R.string.assist_gesture_summary);
+        String expSummary = mContext.getString(R.string.screen_timeout_summary);
         assertThat(summary).isEqualTo(expSummary);
 
     }
@@ -128,7 +128,7 @@
 
     @Test
     public void testDataKeyInvalid_ReturnsNull() {
-        XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+        XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String key = XmlParserUtils.getDataKey(mContext, attrs);
         assertThat(key).isNull();
@@ -136,7 +136,7 @@
 
     @Test
     public void testDataSummaryInvalid_ReturnsNull() {
-        XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+        XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String summary = XmlParserUtils.getDataSummary(mContext, attrs);
         assertThat(summary).isNull();
@@ -144,7 +144,7 @@
 
     @Test
     public void testDataSummaryOffInvalid_ReturnsNull() {
-        XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+        XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String summaryOff = XmlParserUtils.getDataSummaryOff(mContext, attrs);
         assertThat(summaryOff).isNull();
@@ -152,7 +152,7 @@
 
     @Test
     public void testDataEntriesInvalid_ReturnsNull() {
-        XmlResourceParser parser = getParentPrimedParser(R.xml.gesture_settings);
+        XmlResourceParser parser = getParentPrimedParser(R.xml.ia_display_settings);
         final AttributeSet attrs = Xml.asAttributeSet(parser);
         String entries = XmlParserUtils.getDataEntries(mContext, attrs);
         assertThat(entries).isNull();
diff --git a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
index d69ba3e..6f326ab 100644
--- a/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
+++ b/tests/robotests/src/com/android/settings/search2/CursorToSearchResultConverterTest.java
@@ -29,7 +29,7 @@
 import com.android.settings.SubSettings;
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.SiteMapManager;
-import com.android.settings.gestures.GestureSettings;
+import com.android.settings.gestures.SwipeToNotificationSettings;
 import com.android.settings.search2.ResultPayload.PayloadType;
 
 import org.junit.Before;
@@ -155,7 +155,7 @@
                 TITLES[0], // Title
                 SUMMARY, // Summary on
                 SUMMARY, // summary off
-                GestureSettings.class.getName(),
+                SwipeToNotificationSettings.class.getName(),
                 BLANK,   // screen title
                 null,    // icon
                 BLANK,   // action
@@ -226,7 +226,7 @@
                 TITLES[0], // Title
                 SUMMARY, // Summary on
                 SUMMARY, // summary off
-                GestureSettings.class.getName(),
+                SwipeToNotificationSettings.class.getName(),
                 BLANK,   // screen title
                 null,    // icon
                 BLANK,   // action
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index eaaa00e..fdc1052 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -205,25 +205,25 @@
 
     @Test
     public void testAddResource_RowsInserted() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+        SearchIndexableResource resource = getFakeResource(R.xml.ia_display_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
                 new HashMap<>());
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
-        assertThat(cursor.getCount()).isEqualTo(7);
+        assertThat(cursor.getCount()).isEqualTo(16);
     }
 
     @Test
     public void testAddResourceWithNIKs_RowsInsertedDisabled() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
-        // Only add 2 of 6 items to be disabled.
-        String[] keys = {"gesture_double_tap_power", "gesture_swipe_down_fingerprint"};
+        SearchIndexableResource resource = getFakeResource(R.xml.ia_display_settings);
+        // Only add 2 of 16 items to be disabled.
+        String[] keys = {"brightness", "wallpaper"};
         Map<String, List<String>> niks = getNonIndexableKeys(keys);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource, niks);
 
         Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
         assertThat(cursor.getCount()).isEqualTo(2);
         cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
-        assertThat(cursor.getCount()).isEqualTo(5);
+        assertThat(cursor.getCount()).isEqualTo(14);
     }
 
     @Test
@@ -306,7 +306,7 @@
 
     @Test
     public void testAddResourceCustomSetting_RowsMatch() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+        SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
         mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
                 new HashMap<>());
         final String prefTitle =
@@ -339,7 +339,7 @@
         assertThat(cursor.getString(9)).isEmpty();
         // Screen Title
         assertThat(cursor.getString(10)).isEqualTo(
-                mContext.getString(R.string.gesture_preference_title));
+                mContext.getString(R.string.fingerprint_swipe_for_notifications_title));
         // Class Name
         assertThat(cursor.getString(11)).isEqualTo(className);
         // Icon
@@ -477,7 +477,7 @@
 
     @Test
     public void testResourceProvider_RowInserted() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+        SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
         resource.xmlResId = 0;
         resource.className = "com.android.settings.display.ScreenZoomSettings";
 
@@ -489,7 +489,7 @@
 
     @Test
     public void testResourceProvider_Matches() {
-        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
+        SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings);
         resource.xmlResId = 0;
         resource.className = "com.android.settings.display.ScreenZoomSettings";
 
