From 9872f4322b2a89350dd290b986415f0734d591f1 Mon Sep 17 00:00:00 2001 From: Lucas Silva Date: Thu, 18 May 2023 14:38:54 -0400 Subject: [PATCH] Disable dreams home controls button when disabled on lockscreen. When home controls are disable on lockscreen, we should also disable them on dreams. Bug: 282680621 Test: flashed device, disabled/enabled home controls on lockscreen and verified that dreams home controls button was hidden/shown correctly Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.dream.DreamHomeControlsPreferenceControllerTest" Change-Id: I535b079cabc2838e77f3afc74bb8f8730b850653 --- ...DreamHomeControlsPreferenceController.java | 22 +++++++++++++++++-- ...mHomeControlsPreferenceControllerTest.java | 21 ++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) 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); + } }