diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
index bed04d3..5f97608 100644
--- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
@@ -34,11 +34,17 @@
     private static final int MY_USER = UserHandle.myUserId();
 
     private final AmbientDisplayConfiguration mConfig;
+    private final OnPreferenceChangedCallback mCallback;
+
+    public interface OnPreferenceChangedCallback {
+        void onPreferenceChanged();
+    }
 
     public AmbientDisplayAlwaysOnPreferenceController(Context context,
-            AmbientDisplayConfiguration config) {
+            AmbientDisplayConfiguration config, OnPreferenceChangedCallback callback) {
         super(context);
         mConfig = config;
+        mCallback = callback;
     }
 
     @Override
@@ -55,6 +61,9 @@
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         int enabled = (boolean) newValue ? 1 : 0;
         Settings.Secure.putInt(mContext.getContentResolver(), DOZE_ALWAYS_ON, enabled);
+        if (mCallback != null) {
+            mCallback.onPreferenceChanged();
+        }
         return true;
     }
 
diff --git a/src/com/android/settings/display/AmbientDisplaySettings.java b/src/com/android/settings/display/AmbientDisplaySettings.java
index 011cccb..666d47a6 100644
--- a/src/com/android/settings/display/AmbientDisplaySettings.java
+++ b/src/com/android/settings/display/AmbientDisplaySettings.java
@@ -51,11 +51,13 @@
 
     private static List<PreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle, AmbientDisplayConfiguration config,
-            MetricsFeatureProvider metricsFeatureProvider) {
+            MetricsFeatureProvider metricsFeatureProvider,
+            AmbientDisplayAlwaysOnPreferenceController.OnPreferenceChangedCallback aodCallback) {
         final List<PreferenceController> controllers = new ArrayList<>();
         controllers.add(new AmbientDisplayNotificationsPreferenceController(context, config,
                 metricsFeatureProvider));
-        controllers.add(new AmbientDisplayAlwaysOnPreferenceController(context, config));
+        controllers.add(new AmbientDisplayAlwaysOnPreferenceController(context, config,
+                aodCallback));
         controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle, config,
                 MY_USER_ID, KEY_AMBIENT_DISPLAY_DOUBLE_TAP));
         controllers.add(new PickupGesturePreferenceController(context, lifecycle, config,
@@ -77,7 +79,8 @@
     @Override
     protected List<PreferenceController> getPreferenceControllers(Context context) {
         return buildPreferenceControllers(context, getLifecycle(),
-                new AmbientDisplayConfiguration(context), mMetricsFeatureProvider);
+                new AmbientDisplayConfiguration(context), mMetricsFeatureProvider,
+                () -> { updatePreferenceStates(); });
     }
 
     @Override
@@ -101,7 +104,7 @@
                 @Override
                 public List<PreferenceController> getPreferenceControllers(Context context) {
                     return buildPreferenceControllers(context, null,
-                            new AmbientDisplayConfiguration(context), null);
+                            new AmbientDisplayConfiguration(context), null, null);
                 }
             };
 }
diff --git a/src/com/android/settings/gestures/GesturePreferenceController.java b/src/com/android/settings/gestures/GesturePreferenceController.java
index e647bf3..a5df949 100644
--- a/src/com/android/settings/gestures/GesturePreferenceController.java
+++ b/src/com/android/settings/gestures/GesturePreferenceController.java
@@ -61,6 +61,8 @@
                         ? R.string.gesture_setting_on
                         : R.string.gesture_setting_off);
             }
+            // Different meanings of "Enabled" for the Preference and Controller.
+            preference.setEnabled(canHandleClicks());
         }
     }
 
@@ -81,4 +83,8 @@
     protected abstract String getVideoPrefKey();
 
     protected abstract boolean isSwitchPrefEnabled();
+
+    protected boolean canHandleClicks() {
+        return true;
+    }
 }
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index 6308b37..9b36b7c 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -76,4 +76,9 @@
                 Settings.Secure.DOZE_PULSE_ON_PICK_UP, enabled ? 1 : 0);
         return true;
     }
+
+    @Override
+    public boolean canHandleClicks() {
+        return mAmbientConfig.pulseOnPickupCanBeModified(mUserId);
+    }
 }
diff --git a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
index 7e3cd84..59ca483 100644
--- a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
+++ b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java
@@ -34,6 +34,10 @@
         return true;
     }
 
+    public boolean pulseOnPickupCanBeModified(int user) {
+        return true;
+    }
+
     public boolean pulseOnDoubleTapAvailable() {
         return true;
     }
diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
index d38ac51..f01190a 100644
--- a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
@@ -48,11 +48,13 @@
     @Mock SwitchPreference mSwitchPreference;
 
     AmbientDisplayAlwaysOnPreferenceController mController;
+    boolean mCallbackInvoked;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mController = new AmbientDisplayAlwaysOnPreferenceController(mContext, mConfig);
+        mController = new AmbientDisplayAlwaysOnPreferenceController(mContext, mConfig,
+                () -> { mCallbackInvoked = true; });
     }
 
     @Test
@@ -76,6 +78,13 @@
     }
 
     @Test
+    public void onPreferenceChange_callback() throws Exception {
+        assertThat(mCallbackInvoked).isFalse();
+        mController.onPreferenceChange(mSwitchPreference, true);
+        assertThat(mCallbackInvoked).isTrue();
+    }
+
+    @Test
     public void onPreferenceChange_enable() throws Exception {
         mController.onPreferenceChange(mSwitchPreference, true);
 
diff --git a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
index d81163d..1877200 100644
--- a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
@@ -83,4 +83,18 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
+
+    @Test
+    public void testCanHandleClicks_configIsSet_shouldReturnTrue() {
+        when(mAmbientDisplayConfiguration.pulseOnPickupCanBeModified(anyInt())).thenReturn(true);
+
+        assertThat(mController.canHandleClicks()).isTrue();
+    }
+
+    @Test
+    public void testCanHandleClicks_configIsNotSet_shouldReturnFalse() {
+        when(mAmbientDisplayConfiguration.pulseOnPickupCanBeModified(anyInt())).thenReturn(false);
+
+        assertThat(mController.canHandleClicks()).isFalse();
+    }
 }
