Loading src/com/android/settings/display/ScreenTimeoutSettings.java +36 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.util.Log; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; Loading Loading @@ -59,9 +60,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements /** If there is no setting in the provider, use this. */ public static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; private static final int DEFAULT_ORDER_OF_LOWEST_PREFERENCE = Integer.MAX_VALUE - 1; private CharSequence[] mInitialEntries; private CharSequence[] mInitialValues; private FooterPreference mPrivacyPreference; @VisibleForTesting RestrictedLockUtils.EnforcedAdmin mAdmin; @VisibleForTesting Preference mDisableOptionsPreference; @VisibleForTesting AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController; Loading @@ -88,6 +97,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy); mPrivacyPreference.setSelectable(false); mPrivacyPreference.setLayoutResource(R.layout.preference_footer); mDisableOptionsPreference = new FooterPreference(context); mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer); mDisableOptionsPreference.setTitle(R.string.admin_disabled_other_options); mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp); // The 'disabled by admin' preference should always be at the end of the setting page. mDisableOptionsPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE); mPrivacyPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE - 1); } @Override Loading Loading @@ -120,6 +138,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); if (mAdmin != null) { mDisableOptionsPreference.setOnPreferenceClickListener(p -> { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); return true; }); screen.addPreference(mDisableOptionsPreference); } final List<? extends CandidateInfo> candidateList = getCandidates(); if (candidateList == null) { return; Loading @@ -137,6 +163,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepController.addToScreen(screen); screen.addPreference(mPrivacyPreference); } if (mAdmin != null) { mDisableOptionsPreference.setOnPreferenceClickListener(p -> { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); return true; }); screen.addPreference(mDisableOptionsPreference); } } @Override Loading Loading @@ -178,9 +212,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements if (dpm == null) { return Long.MAX_VALUE; } final RestrictedLockUtils.EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context); if (admin != null) { mAdmin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context); if (mAdmin != null) { return dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId()); } return Long.MAX_VALUE; Loading tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; Loading @@ -34,9 +35,11 @@ import android.content.res.Resources; import android.provider.SearchIndexableResource; import android.provider.Settings; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settingslib.RestrictedLockUtils; import org.junit.Before; import org.junit.Test; Loading Loading @@ -68,6 +71,9 @@ public class ScreenTimeoutSettingsTest { @Mock AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController; @Mock Preference mDisableOptionsPreference; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -127,6 +133,16 @@ public class ScreenTimeoutSettingsTest { verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen); } @Test public void updateCandidates_enforcedAdmin_showDisabledByAdminPreference() { mSettings.mAdmin = new RestrictedLockUtils.EnforcedAdmin(); mSettings.mDisableOptionsPreference = mDisableOptionsPreference; mSettings.updateCandidates(); verify(mPreferenceScreen, atLeast(1)).addPreference(mDisableOptionsPreference); } @Test public void setDefaultKey_controlCurrentScreenTimeout() { mSettings.setDefaultKey(TIMEOUT_VALUES[0]); Loading Loading
src/com/android/settings/display/ScreenTimeoutSettings.java +36 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.util.Log; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; Loading Loading @@ -59,9 +60,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements /** If there is no setting in the provider, use this. */ public static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000; private static final int DEFAULT_ORDER_OF_LOWEST_PREFERENCE = Integer.MAX_VALUE - 1; private CharSequence[] mInitialEntries; private CharSequence[] mInitialValues; private FooterPreference mPrivacyPreference; @VisibleForTesting RestrictedLockUtils.EnforcedAdmin mAdmin; @VisibleForTesting Preference mDisableOptionsPreference; @VisibleForTesting AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController; Loading @@ -88,6 +97,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy); mPrivacyPreference.setSelectable(false); mPrivacyPreference.setLayoutResource(R.layout.preference_footer); mDisableOptionsPreference = new FooterPreference(context); mDisableOptionsPreference.setLayoutResource(R.layout.preference_footer); mDisableOptionsPreference.setTitle(R.string.admin_disabled_other_options); mDisableOptionsPreference.setIcon(R.drawable.ic_info_outline_24dp); // The 'disabled by admin' preference should always be at the end of the setting page. mDisableOptionsPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE); mPrivacyPreference.setOrder(DEFAULT_ORDER_OF_LOWEST_PREFERENCE - 1); } @Override Loading Loading @@ -120,6 +138,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); if (mAdmin != null) { mDisableOptionsPreference.setOnPreferenceClickListener(p -> { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); return true; }); screen.addPreference(mDisableOptionsPreference); } final List<? extends CandidateInfo> candidateList = getCandidates(); if (candidateList == null) { return; Loading @@ -137,6 +163,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements mAdaptiveSleepController.addToScreen(screen); screen.addPreference(mPrivacyPreference); } if (mAdmin != null) { mDisableOptionsPreference.setOnPreferenceClickListener(p -> { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin); return true; }); screen.addPreference(mDisableOptionsPreference); } } @Override Loading Loading @@ -178,9 +212,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements if (dpm == null) { return Long.MAX_VALUE; } final RestrictedLockUtils.EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context); if (admin != null) { mAdmin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context); if (mAdmin != null) { return dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId()); } return Long.MAX_VALUE; Loading
tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; Loading @@ -34,9 +35,11 @@ import android.content.res.Resources; import android.provider.SearchIndexableResource; import android.provider.Settings; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settingslib.RestrictedLockUtils; import org.junit.Before; import org.junit.Test; Loading Loading @@ -68,6 +71,9 @@ public class ScreenTimeoutSettingsTest { @Mock AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController; @Mock Preference mDisableOptionsPreference; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -127,6 +133,16 @@ public class ScreenTimeoutSettingsTest { verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen); } @Test public void updateCandidates_enforcedAdmin_showDisabledByAdminPreference() { mSettings.mAdmin = new RestrictedLockUtils.EnforcedAdmin(); mSettings.mDisableOptionsPreference = mDisableOptionsPreference; mSettings.updateCandidates(); verify(mPreferenceScreen, atLeast(1)).addPreference(mDisableOptionsPreference); } @Test public void setDefaultKey_controlCurrentScreenTimeout() { mSettings.setDefaultKey(TIMEOUT_VALUES[0]); Loading