diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java index bed04d3591f..5f97608743e 100644 --- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java +++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java @@ -34,11 +34,17 @@ public class AmbientDisplayAlwaysOnPreferenceController extends PreferenceContro 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 class AmbientDisplayAlwaysOnPreferenceController extends PreferenceContro 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 011cccbd877..666d47a6e75 100644 --- a/src/com/android/settings/display/AmbientDisplaySettings.java +++ b/src/com/android/settings/display/AmbientDisplaySettings.java @@ -51,11 +51,13 @@ public class AmbientDisplaySettings extends DashboardFragment { private static List buildPreferenceControllers(Context context, Lifecycle lifecycle, AmbientDisplayConfiguration config, - MetricsFeatureProvider metricsFeatureProvider) { + MetricsFeatureProvider metricsFeatureProvider, + AmbientDisplayAlwaysOnPreferenceController.OnPreferenceChangedCallback aodCallback) { final List 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 @@ public class AmbientDisplaySettings extends DashboardFragment { @Override protected List getPreferenceControllers(Context context) { return buildPreferenceControllers(context, getLifecycle(), - new AmbientDisplayConfiguration(context), mMetricsFeatureProvider); + new AmbientDisplayConfiguration(context), mMetricsFeatureProvider, + () -> { updatePreferenceStates(); }); } @Override @@ -101,7 +104,7 @@ public class AmbientDisplaySettings extends DashboardFragment { @Override public List 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 e647bf30df8..a5df9499fe3 100644 --- a/src/com/android/settings/gestures/GesturePreferenceController.java +++ b/src/com/android/settings/gestures/GesturePreferenceController.java @@ -61,6 +61,8 @@ public abstract class GesturePreferenceController extends PreferenceController ? 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 @@ public abstract class GesturePreferenceController extends PreferenceController 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 6308b37b64c..9b36b7c3052 100644 --- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java +++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java @@ -76,4 +76,9 @@ public class PickupGesturePreferenceController extends GesturePreferenceControll 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 7e3cd84bfbf..59ca4830365 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 @@ public class AmbientDisplayConfiguration { 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 d38ac51d6fe..f01190a97f2 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 @@ public class AmbientDisplayAlwaysOnPreferenceControllerTest { @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 @@ -75,6 +77,13 @@ public class AmbientDisplayAlwaysOnPreferenceControllerTest { verify(mSwitchPreference).setChecked(false); } + @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 d81163de370..18772004629 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 @@ public class PIckupGesturePreferenceControllerTest { 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(); + } }