Disable screen attention when DISALLOW_CONFIG_SCREEN_TIMEOUT

Test: atest AdaptiveSleepDetailPreferenceControllerTest
Bug: 161938926
Change-Id: I4ed96ad36efe67091a26cbfe2cde16c116f7c8fb
This commit is contained in:
Yi Jiang
2020-09-08 21:58:56 -07:00
parent bf4aa65842
commit 038d18ff73
2 changed files with 70 additions and 5 deletions

View File

@@ -17,13 +17,25 @@
package com.android.settings.display; package com.android.settings.display;
import android.content.Context; import android.content.Context;
import android.os.UserManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import com.android.settings.bluetooth.RestrictionUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedSwitchPreference;
public class AdaptiveSleepDetailPreferenceController extends AdaptiveSleepPreferenceController { public class AdaptiveSleepDetailPreferenceController extends AdaptiveSleepPreferenceController {
private RestrictionUtils mRestrictionUtils;
public AdaptiveSleepDetailPreferenceController(Context context, String key,
RestrictionUtils restrictionUtils) {
super(context, key);
mRestrictionUtils = restrictionUtils;
}
public AdaptiveSleepDetailPreferenceController(Context context, String key) { public AdaptiveSleepDetailPreferenceController(Context context, String key) {
super(context, key); this(context, key, new RestrictionUtils());
} }
@Override @Override
@@ -43,6 +55,12 @@ public class AdaptiveSleepDetailPreferenceController extends AdaptiveSleepPrefer
@Override @Override
public void updateState(Preference preference) { public void updateState(Preference preference) {
super.updateState(preference); super.updateState(preference);
preference.setEnabled(hasSufficientPermission(mContext.getPackageManager())); final EnforcedAdmin enforcedAdmin = mRestrictionUtils.checkIfRestrictionEnforced(mContext,
UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT);
if (enforcedAdmin != null) {
((RestrictedSwitchPreference) preference).setDisabledByAdmin(enforcedAdmin);
} else {
preference.setEnabled(hasSufficientPermission(mContext.getPackageManager()));
}
} }
} }

View File

@@ -21,15 +21,26 @@ import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.internal.R; import com.android.internal.R;
import com.android.settings.bluetooth.RestrictionUtils;
import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedSwitchPreference;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
@@ -42,17 +53,32 @@ import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.class}) @Config(shadows = {SettingsShadowResources.class})
public class AdaptiveSleepDetailPreferenceControllerTest { public class AdaptiveSleepDetailPreferenceControllerTest {
private static RestrictedLockUtils.EnforcedAdmin sFakeEnforcedAdmin;
@BeforeClass
public static void beforeClass() {
sFakeEnforcedAdmin = new RestrictedLockUtils.EnforcedAdmin(
new ComponentName("test.package", "test.Class"),
UserHandle.of(10));
}
private AdaptiveSleepDetailPreferenceController mController; private AdaptiveSleepDetailPreferenceController mController;
@Mock @Mock
private PackageManager mPackageManager; private PackageManager mPackageManager;
@Mock
private RestrictionUtils mRestrictionUtils;
@Mock
private RestrictedSwitchPreference mPreference;
private Context mContext;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
Context context = Mockito.spy(RuntimeEnvironment.application); mContext = Mockito.spy(RuntimeEnvironment.application);
doReturn(mPackageManager).when(context).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
mController = new AdaptiveSleepDetailPreferenceController(context, "test_key"); mController = new AdaptiveSleepDetailPreferenceController(mContext, "test_key",
mRestrictionUtils);
} }
@Test @Test
@@ -77,4 +103,25 @@ public class AdaptiveSleepDetailPreferenceControllerTest {
SettingsShadowResources.overrideResource(R.bool.config_adaptive_sleep_available, false); SettingsShadowResources.overrideResource(R.bool.config_adaptive_sleep_available, false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
} }
@Test
public void updateState_noRestriction_allowScreenAttentionSet() {
when(mRestrictionUtils.checkIfRestrictionEnforced(mContext,
UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT)).thenReturn(null);
mController.updateState(mPreference);
verify(mPreference, never()).setDisabledByAdmin(
any(RestrictedLockUtils.EnforcedAdmin.class));
}
@Test
public void updateState_enforceRestrictions_disallowScreenAttentionSet() {
when(mRestrictionUtils.checkIfRestrictionEnforced(mContext,
UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT)).thenReturn(sFakeEnforcedAdmin);
mController.updateState(mPreference);
verify(mPreference).setDisabledByAdmin(sFakeEnforcedAdmin);
}
} }