diff --git a/res/xml/assist_gesture_settings.xml b/res/xml/assist_gesture_settings.xml
index d941c80..cf84e8a 100644
--- a/res/xml/assist_gesture_settings.xml
+++ b/res/xml/assist_gesture_settings.xml
@@ -31,10 +31,4 @@
         android:summary="@string/assist_gesture_summary"
         app:keywords="@string/keywords_squeeze_to_launch_gesture"/>
 
-    <com.android.settings.widget.SeekBarPreference
-        android:key="gesture_assist_sensitivity"
-        android:title="@string/assist_gesture_sensitivity_title"
-        android:defaultValue="5"
-        android:max="10" />
-
 </PreferenceScreen>
diff --git a/src/com/android/settings/gestures/AssistGestureFeatureProvider.java b/src/com/android/settings/gestures/AssistGestureFeatureProvider.java
index f06f6c1..8902393 100644
--- a/src/com/android/settings/gestures/AssistGestureFeatureProvider.java
+++ b/src/com/android/settings/gestures/AssistGestureFeatureProvider.java
@@ -18,10 +18,24 @@
 
 import android.content.Context;
 
+import com.android.settings.core.PreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import java.util.List;
+
 /** Feature provider for the assist gesture. */
 public interface AssistGestureFeatureProvider {
 
     /** Returns true if the assist gesture is supported. */
     boolean isSupported(Context context);
 
+    /** Returns true if the sensor is available. */
+    boolean isSensorAvailable(Context context);
+
+    /** Returns the resource */
+    int getPreferenceResourceId();
+
+    /** Returns a list of additional preference controllers */
+    List<PreferenceController> getControllers(Context context, Lifecycle lifecycle);
+
 }
diff --git a/src/com/android/settings/gestures/AssistGestureFeatureProviderImpl.java b/src/com/android/settings/gestures/AssistGestureFeatureProviderImpl.java
index b17d892..a2579ac 100644
--- a/src/com/android/settings/gestures/AssistGestureFeatureProviderImpl.java
+++ b/src/com/android/settings/gestures/AssistGestureFeatureProviderImpl.java
@@ -18,6 +18,13 @@
 
 import android.content.Context;
 
+import com.android.settings.R;
+import com.android.settings.core.PreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import java.util.ArrayList;
+import java.util.List;
+
 public class AssistGestureFeatureProviderImpl implements AssistGestureFeatureProvider {
 
     @Override
@@ -25,4 +32,19 @@
         return false;
     }
 
+    @Override
+    public boolean isSensorAvailable(Context context) {
+        return false;
+    }
+
+    @Override
+    public int getPreferenceResourceId() {
+        return R.xml.assist_gesture_settings;
+    }
+
+    @Override
+    public List<PreferenceController> getControllers(Context context, Lifecycle lifecycle) {
+        return new ArrayList<>();
+    }
+
 }
diff --git a/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceController.java
deleted file mode 100644
index 0f42803..0000000
--- a/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceController.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2017 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.ContentResolver;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.provider.Settings;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.widget.SeekBarPreference;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnPause;
-import com.android.settingslib.core.lifecycle.events.OnResume;
-
-public class AssistGestureSensitivityPreferenceController extends PreferenceController
-        implements Preference.OnPreferenceChangeListener, LifecycleObserver, OnPause, OnResume {
-
-    private static final String PREF_KEY_ASSIST_GESTURE_SENSITIVITY = "gesture_assist_sensitivity";
-
-    private final AssistGestureFeatureProvider mFeatureProvider;
-    private final SettingObserver mSettingObserver;
-
-    private PreferenceScreen mScreen;
-    private SeekBarPreference mPreference;
-
-    public AssistGestureSensitivityPreferenceController(Context context, Lifecycle lifecycle) {
-        super(context);
-        mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider();
-        mSettingObserver = new SettingObserver();
-
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
-    }
-
-    @Override
-    public void onResume() {
-        mSettingObserver.register(mContext.getContentResolver(), true /* register */);
-        updatePreference();
-    }
-
-    @Override
-    public void onPause() {
-        mSettingObserver.register(mContext.getContentResolver(), false /* register */);
-    }
-
-    @Override
-    public boolean isAvailable() {
-        // The sensitivity control is contingent on the assist gesture being supported and the
-        // gesture being enabled.
-        final int gestureEnabled = Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_ENABLED,
-                1);
-        return (gestureEnabled == 1) && mFeatureProvider.isSupported(mContext);
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        mScreen = screen;
-        mPreference = (SeekBarPreference) screen.findPreference(getPreferenceKey());
-        // Call super last or AbstractPreferenceController might remove the preference from the
-        // screen (if !isAvailable()) before we can save a reference to it.
-        super.displayPreference(screen);
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-        updatePreference();
-    }
-
-    private void updatePreference() {
-        if (mPreference == null) {
-            return;
-        }
-
-        if (isAvailable()) {
-            if (mScreen.findPreference(getPreferenceKey()) == null) {
-                mScreen.addPreference(mPreference);
-            }
-        } else {
-            mScreen.removePreference(mPreference);
-        }
-
-        final int sensitivity = Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_SENSITIVITY,
-                mPreference.getProgress());
-        mPreference.setProgress(sensitivity);
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        final int sensitivity = (int) newValue;
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_SENSITIVITY, sensitivity);
-        return true;
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return PREF_KEY_ASSIST_GESTURE_SENSITIVITY;
-    }
-
-    class SettingObserver extends ContentObserver {
-
-        private final Uri ASSIST_GESTURE_ENABLED_URI =
-                Settings.Secure.getUriFor(Settings.Secure.ASSIST_GESTURE_ENABLED);
-        private final Uri ASSIST_GESTURE_SENSITIVITY_URI =
-                Settings.Secure.getUriFor(Settings.Secure.ASSIST_GESTURE_SENSITIVITY);
-
-        public SettingObserver() {
-            super(null /* handler */);
-        }
-
-        public void register(ContentResolver cr, boolean register) {
-            if (register) {
-                cr.registerContentObserver(ASSIST_GESTURE_ENABLED_URI, false, this);
-                cr.registerContentObserver(ASSIST_GESTURE_SENSITIVITY_URI, false, this);
-            } else {
-                cr.unregisterContentObserver(this);
-            }
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            updatePreference();
-        }
-    }
-}
diff --git a/src/com/android/settings/gestures/AssistGestureSettings.java b/src/com/android/settings/gestures/AssistGestureSettings.java
index 64187a3..93d3a39 100644
--- a/src/com/android/settings/gestures/AssistGestureSettings.java
+++ b/src/com/android/settings/gestures/AssistGestureSettings.java
@@ -23,6 +23,7 @@
 import com.android.settings.R;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -48,7 +49,8 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.assist_gesture_settings;
+        return FeatureFactory.getFactory(getContext())
+                .getAssistGestureFeatureProvider().getPreferenceResourceId();
     }
 
     @Override
@@ -60,7 +62,9 @@
             Lifecycle lifecycle) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST));
-        controllers.add(new AssistGestureSensitivityPreferenceController(context, lifecycle));
+        controllers.addAll(FeatureFactory.getFactory(context).getAssistGestureFeatureProvider()
+                .getControllers(context, lifecycle));
+
         return controllers;
     }
 
diff --git a/tests/robotests/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceControllerTest.java
deleted file mode 100644
index 349ca4f..0000000
--- a/tests/robotests/src/com/android/settings/gestures/AssistGestureSensitivityPreferenceControllerTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2017 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.provider.Settings;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.FakeFeatureFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class AssistGestureSensitivityPreferenceControllerTest {
-
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-    private FakeFeatureFactory mFactory;
-    private AssistGestureSensitivityPreferenceController mController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        FakeFeatureFactory.setupForTest(mContext);
-        mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
-        mController = new AssistGestureSensitivityPreferenceController(mContext, null);
-    }
-
-    @Test
-    public void isAvailable_whenSupportedAndEnabled_shouldReturnTrue() {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_ENABLED, 1);
-        when(mFactory.assistGestureFeatureProvider.isSupported(mContext)).thenReturn(true);
-
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
-    public void isAvailable_whenSupportedAndDisabled_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_ENABLED, 0);
-        when(mFactory.assistGestureFeatureProvider.isSupported(mContext)).thenReturn(true);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void isAvailable_whenUnsupportedAndEnabled_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_ENABLED, 1);
-        when(mFactory.assistGestureFeatureProvider.isSupported(mContext)).thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
-    public void isAvailable_whenUnsupportedAndDisabled_shouldReturnFalse() {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ASSIST_GESTURE_ENABLED, 0);
-        when(mFactory.assistGestureFeatureProvider.isSupported(mContext)).thenReturn(false);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-}
-
diff --git a/tests/robotests/src/com/android/settings/gestures/AssistGestureSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/AssistGestureSettingsTest.java
index ba0a90a..17fa17b 100644
--- a/tests/robotests/src/com/android/settings/gestures/AssistGestureSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/AssistGestureSettingsTest.java
@@ -20,6 +20,7 @@
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.R;
+import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.core.PreferenceController;
@@ -35,22 +36,28 @@
 import java.util.List;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class AssistGestureSettingsTest {
     @Mock
     private Context mContext;
+    private FakeFeatureFactory mFakeFeatureFactory;
+    private AssistGestureFeatureProvider mFeatureProvider;
     private AssistGestureSettings mSettings;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+        mFeatureProvider = mFakeFeatureFactory.getAssistGestureFeatureProvider();
         mSettings = new AssistGestureSettings();
     }
 
     @Test
     public void testGetPreferenceScreenResId() {
+        when(mFeatureProvider.getPreferenceResourceId()).thenReturn(R.xml.assist_gesture_settings);
         assertThat(mSettings.getPreferenceScreenResId())
                 .isEqualTo(R.xml.assist_gesture_settings);
     }
@@ -69,6 +76,7 @@
                         ShadowApplication.getInstance().getApplicationContext(),
                         true /* enabled */);
 
+        when(mFeatureProvider.getPreferenceResourceId()).thenReturn(R.xml.assist_gesture_settings);
         assertThat(indexRes).isNotNull();
         assertThat(indexRes.get(0).xmlResId).isEqualTo(mSettings.getPreferenceScreenResId());
     }
