Merge "Grays out Screen Timeout Setting when disabled."

This commit is contained in:
Yi Jiang
2020-12-15 02:59:04 +00:00
committed by Android (Google) Code Review
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() {