diff --git a/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java b/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java index b39f3b1ace6..0e777ec4c9d 100644 --- a/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java +++ b/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java @@ -17,6 +17,9 @@ package com.android.settings.dream; import android.content.Context; +import android.provider.Settings; + +import androidx.preference.Preference; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; @@ -46,12 +49,21 @@ public class DreamHomeControlsPreferenceController extends TogglePreferenceContr final boolean supported = mBackend.getSupportedComplications() .contains(DreamBackend.COMPLICATION_TYPE_HOME_CONTROLS); - return supported ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; + + return controlsEnabledOnLockscreen() ? (supported ? AVAILABLE : CONDITIONALLY_UNAVAILABLE) + : DISABLED_DEPENDENT_SETTING; + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + preference.setEnabled(getAvailabilityStatus() == AVAILABLE); + refreshSummary(preference); } @Override public boolean isChecked() { - return mBackend.getEnabledComplications().contains( + return controlsEnabledOnLockscreen() && mBackend.getEnabledComplications().contains( DreamBackend.COMPLICATION_TYPE_HOME_CONTROLS); } @@ -61,6 +73,12 @@ public class DreamHomeControlsPreferenceController extends TogglePreferenceContr return true; } + private boolean controlsEnabledOnLockscreen() { + return Settings.Secure.getInt( + mContext.getContentResolver(), + Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, 0) != 0; + } + @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_display; diff --git a/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java index 452604c8012..57736151419 100644 --- a/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java @@ -23,6 +23,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; import android.content.Context; +import android.provider.Settings; import android.util.ArraySet; import androidx.preference.PreferenceScreen; @@ -80,6 +81,7 @@ public class DreamHomeControlsPreferenceControllerTest { @Test public void testSetChecked_setTrue_enablesSetting() { + setControlsEnabledOnLockscreen(true); mBackend.setHomeControlsEnabled(false); assertThat(mBackend.getEnabledComplications()) .doesNotContain(COMPLICATION_TYPE_HOME_CONTROLS); @@ -91,6 +93,7 @@ public class DreamHomeControlsPreferenceControllerTest { @Test public void testSetChecked_setFalse_disablesSetting() { + setControlsEnabledOnLockscreen(true); mBackend.setHomeControlsEnabled(true); assertThat(mBackend.getEnabledComplications()) .contains(COMPLICATION_TYPE_HOME_CONTROLS); @@ -102,15 +105,33 @@ public class DreamHomeControlsPreferenceControllerTest { @Test public void testIsChecked_returnsFalse() { + setControlsEnabledOnLockscreen(true); mBackend.setHomeControlsEnabled(false); assertThat(mController.isChecked()).isFalse(); } @Test public void testIsChecked_returnsTrue() { + setControlsEnabledOnLockscreen(true); mBackend.setHomeControlsEnabled(true); assertThat(mBackend.getEnabledComplications()) .contains(COMPLICATION_TYPE_HOME_CONTROLS); assertThat(mController.isChecked()).isTrue(); } + + @Test + public void testIsChecked_lockScreenDisabled_returnsFalse() { + setControlsEnabledOnLockscreen(false); + mBackend.setHomeControlsEnabled(true); + assertThat(mBackend.getEnabledComplications()) + .doesNotContain(COMPLICATION_TYPE_HOME_CONTROLS); + assertThat(mController.isChecked()).isFalse(); + } + + private void setControlsEnabledOnLockscreen(boolean enabled) { + Settings.Secure.putInt( + mContext.getContentResolver(), + Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, + enabled ? 1 : 0); + } }