Grays out Screen Timeout Setting when disabled.

Previously we would hide the screen timeout setting when it is disabled
by admin. Instead of hide it in Display Settings, now we gray it out and
also provide the info of the enforced admin.

Bug: 174834978
Test: manually
Change-Id: Idaa3c4512eb648b67fcf6df2996c771a2f1b9617
This commit is contained in:
Yi Jiang
2020-12-11 15:12:13 -08:00
parent 2441bfc019
commit 111004958d
2 changed files with 27 additions and 21 deletions

View File

@@ -63,7 +63,7 @@
</com.android.settingslib.RestrictedPreference> </com.android.settingslib.RestrictedPreference>
<!-- Cross-listed item, if you change this, also change it in power_usage_summary.xml --> <!-- Cross-listed item, if you change this, also change it in power_usage_summary.xml -->
<Preference <com.android.settingslib.RestrictedPreference
android:key="screen_timeout" android:key="screen_timeout"
android:title="@string/screen_timeout" android:title="@string/screen_timeout"
android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder"

View File

@@ -26,10 +26,13 @@ import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import androidx.preference.Preference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
/** /**
* The controller of {@link ScreenTimeoutSettings}. * The controller of {@link ScreenTimeoutSettings}.
@@ -43,35 +46,38 @@ public class ScreenTimeoutPreferenceController extends BasePreferenceController
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return isDisableByAdmin() ? UNSUPPORTED_ON_DEVICE : AVAILABLE; return AVAILABLE;
} }
@Override @Override
public CharSequence getSummary() { public void updateState(Preference preference) {
if (isDisableByAdmin()) { final RestrictedLockUtils.EnforcedAdmin admin = getEnforcedAdmin();
return mContext.getString(com.android.settings.R.string.disabled_by_policy_title); if (admin != null) {
} else { preference.setEnabled(false);
final long currentTimeout = getCurrentScreenTimeout(); ((RestrictedPreference) preference).setDisabledByAdmin(admin);
final CharSequence[] timeoutEntries = mContext.getResources().getStringArray(
R.array.screen_timeout_entries);
final CharSequence[] timeoutValues = mContext.getResources().getStringArray(
R.array.screen_timeout_values);
final CharSequence description = TimeoutPreferenceController.getTimeoutDescription(
currentTimeout, timeoutEntries, timeoutValues);
return mContext.getString(R.string.screen_timeout_summary, description);
} }
preference.setSummary(getTimeoutSummary());
} }
private boolean isDisableByAdmin() { private CharSequence getTimeoutSummary() {
final long currentTimeout = getCurrentScreenTimeout();
final CharSequence[] timeoutEntries = mContext.getResources().getStringArray(
R.array.screen_timeout_entries);
final CharSequence[] timeoutValues = mContext.getResources().getStringArray(
R.array.screen_timeout_values);
final CharSequence description = TimeoutPreferenceController.getTimeoutDescription(
currentTimeout, timeoutEntries, timeoutValues);
return mContext.getString(R.string.screen_timeout_summary, description);
}
private RestrictedLockUtils.EnforcedAdmin getEnforcedAdmin() {
final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class); final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class);
if (dpm != null) { if (dpm != null) {
final RestrictedLockUtils.EnforcedAdmin admin = return RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
RestrictedLockUtilsInternal.checkIfRestrictionEnforced( mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, UserHandle.myUserId());
UserHandle.myUserId());
return admin != null;
} }
return false; return null;
} }
private long getCurrentScreenTimeout() { private long getCurrentScreenTimeout() {