diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index 213259b..d38902e 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -64,14 +64,4 @@
                 Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
         return cameraDisabled == 0;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(0, true);
-        valueMap.put(1, false);
-
-        return new InlineSwitchPayload(Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 02d8dd7..49e8f51 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -70,14 +70,4 @@
     protected boolean isSwitchPrefEnabled() {
         return mAmbientConfig.pulseOnDoubleTapEnabled(mUserId);
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.DOZE_PULSE_ON_DOUBLE_TAP,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
index fea1c9d..c5174fd 100644
--- a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
@@ -85,14 +85,4 @@
         }
         return false;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index db6925e..390fd4c 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -170,24 +170,5 @@
                     }
                     return result;
                 }
-
-                @Override
-                public List<PreferenceController> getPreferenceControllers(Context context) {
-                    List<PreferenceController> controllers = new ArrayList<>();
-                    AmbientDisplayConfiguration ambientConfig
-                            = new AmbientDisplayConfiguration(context);
-
-                    controllers.add(new DoubleTapPowerPreferenceController(context,
-                            null /* lifecycle */));
-                    controllers.add(new PickupGesturePreferenceController(context,
-                            null /* lifecycle */, ambientConfig, UserHandle.myUserId()));
-                    controllers.add(new DoubleTapScreenPreferenceController(context,
-                            null /* lifecycle */, ambientConfig, UserHandle.myUserId()));
-                    controllers.add(new SwipeToNotificationPreferenceController(context,
-                            null /* lifecycle */));
-                    controllers.add(new DoubleTwistPreferenceController(context,
-                            null /* lifecycle */));
-                    return controllers;
-                }
             };
 }
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index f48551e..ce20f15 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -70,14 +70,4 @@
                 Settings.Secure.DOZE_PULSE_ON_PICK_UP, enabled ? 1 : 0);
         return true;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.DOZE_PULSE_ON_PICK_UP,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
index 67c8e14..22b88fc 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
@@ -63,14 +63,4 @@
                 Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, 0)
                 == 1;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index 5f7d8b5..bdb3522 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -93,23 +93,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
-        mController = new DoubleTapPowerPreferenceController(context, null);
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
-        mController = new DoubleTapPowerPreferenceController(context, null);
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("camera_double_tap_power_gesture_disabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(0)).isEqualTo(true);
-        assertThat(payload.valueMap.get(1)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index 2f922d5..adf8b75 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -81,19 +81,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("doze_pulse_on_double_tap");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
index ad682b2..9bf6655 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
@@ -113,19 +113,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("camera_double_twist_to_flip_enabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
index f112b9e..9dce074 100644
--- a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
@@ -83,19 +83,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("doze_pulse_on_pick_up");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
index 49d73ea..e909667 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
@@ -89,19 +89,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("system_navigation_keys_enabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
index a13a24e..f4370fc 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
@@ -73,14 +73,6 @@
     }
 
     @Test
-    public void testGetPreferenceControllerUriMap_CompatibleClass_ReturnsNotNull() {
-        String className = "com.android.settings.gestures.GestureSettings";
-
-        Map map = DatabaseIndexingUtils.getPreferenceControllerUriMap(className, mContext);
-        assertThat(map).isNotNull();
-    }
-
-    @Test
     public void testGetPreferenceControllerUriMap_CompatibleClass_ReturnsValidMap() {
         String className = "com.android.settings.DisplaySettings";
 
@@ -96,7 +88,7 @@
     }
 
     @Test
-    public void testGetPayloadFromMap_MatchingKey_ReturnsPayloa() {
+    public void testGetPayloadFromMap_MatchingKey_ReturnsPayload() {
         final String key = "key";
         PreferenceController prefController = new PreferenceController(mContext) {
             @Override
