Adds 'options disabled by admin' icon in timeout settings.
Bug:171257091 Test: atest ScreenTimeoutSettingsTest Change-Id: Id0411b009a2d4dc0e4f6abf2825580ca42ad8442
This commit is contained in:
@@ -28,6 +28,7 @@ import android.os.UserHandle;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -59,9 +60,17 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
/** If there is no setting in the provider, use this. */
|
/** If there is no setting in the provider, use this. */
|
||||||
public static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
|
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[] mInitialEntries;
|
||||||
private CharSequence[] mInitialValues;
|
private CharSequence[] mInitialValues;
|
||||||
private FooterPreference mPrivacyPreference;
|
private FooterPreference mPrivacyPreference;
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
RestrictedLockUtils.EnforcedAdmin mAdmin;
|
||||||
|
@VisibleForTesting
|
||||||
|
Preference mDisableOptionsPreference;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;
|
AdaptiveSleepPermissionPreferenceController mAdaptiveSleepPermissionController;
|
||||||
|
|
||||||
@@ -88,6 +97,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy);
|
mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy);
|
||||||
mPrivacyPreference.setSelectable(false);
|
mPrivacyPreference.setSelectable(false);
|
||||||
mPrivacyPreference.setLayoutResource(R.layout.preference_footer);
|
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
|
@Override
|
||||||
@@ -120,6 +138,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
final PreferenceScreen screen = getPreferenceScreen();
|
final PreferenceScreen screen = getPreferenceScreen();
|
||||||
screen.removeAll();
|
screen.removeAll();
|
||||||
|
|
||||||
|
if (mAdmin != null) {
|
||||||
|
mDisableOptionsPreference.setOnPreferenceClickListener(p -> {
|
||||||
|
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
screen.addPreference(mDisableOptionsPreference);
|
||||||
|
}
|
||||||
|
|
||||||
final List<? extends CandidateInfo> candidateList = getCandidates();
|
final List<? extends CandidateInfo> candidateList = getCandidates();
|
||||||
if (candidateList == null) {
|
if (candidateList == null) {
|
||||||
return;
|
return;
|
||||||
@@ -137,6 +163,14 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
mAdaptiveSleepController.addToScreen(screen);
|
mAdaptiveSleepController.addToScreen(screen);
|
||||||
screen.addPreference(mPrivacyPreference);
|
screen.addPreference(mPrivacyPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mAdmin != null) {
|
||||||
|
mDisableOptionsPreference.setOnPreferenceClickListener(p -> {
|
||||||
|
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(), mAdmin);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
screen.addPreference(mDisableOptionsPreference);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -178,9 +212,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
if (dpm == null) {
|
if (dpm == null) {
|
||||||
return Long.MAX_VALUE;
|
return Long.MAX_VALUE;
|
||||||
}
|
}
|
||||||
final RestrictedLockUtils.EnforcedAdmin admin =
|
mAdmin = RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
|
||||||
RestrictedLockUtilsInternal.checkIfMaximumTimeToLockIsSet(context);
|
if (mAdmin != null) {
|
||||||
if (admin != null) {
|
|
||||||
return dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId());
|
return dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId());
|
||||||
}
|
}
|
||||||
return Long.MAX_VALUE;
|
return Long.MAX_VALUE;
|
||||||
|
@@ -22,6 +22,7 @@ import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.doReturn;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
@@ -34,9 +35,11 @@ import android.content.res.Resources;
|
|||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -68,6 +71,9 @@ public class ScreenTimeoutSettingsTest {
|
|||||||
@Mock
|
@Mock
|
||||||
AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController;
|
AdaptiveSleepPreferenceController mAdaptiveSleepPreferenceController;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
Preference mDisableOptionsPreference;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -127,6 +133,16 @@ public class ScreenTimeoutSettingsTest {
|
|||||||
verify(mSettings.mAdaptiveSleepController, never()).addToScreen(mPreferenceScreen);
|
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
|
@Test
|
||||||
public void setDefaultKey_controlCurrentScreenTimeout() {
|
public void setDefaultKey_controlCurrentScreenTimeout() {
|
||||||
mSettings.setDefaultKey(TIMEOUT_VALUES[0]);
|
mSettings.setDefaultKey(TIMEOUT_VALUES[0]);
|
||||||
|
Reference in New Issue
Block a user