Merge "Set default display timeout if current value is disabled by admin."
This commit is contained in:
committed by
Android (Google) Code Review
commit
ce287b9fb6
129
src/com/android/settings/display/TimeoutListPreference.java
Normal file
129
src/com/android/settings/display/TimeoutListPreference.java
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.display;
|
||||
|
||||
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.RestrictedListPreference;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class TimeoutListPreference extends RestrictedListPreference {
|
||||
private static final String TAG = "TimeoutListPreference";
|
||||
private EnforcedAdmin mAdmin;
|
||||
private final CharSequence[] mInitialEntries;
|
||||
private final CharSequence[] mInitialValues;
|
||||
|
||||
public TimeoutListPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mInitialEntries = getEntries();
|
||||
mInitialValues = getEntryValues();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPrepareDialogBuilder(AlertDialog.Builder builder,
|
||||
DialogInterface.OnClickListener listener) {
|
||||
super.onPrepareDialogBuilder(builder, listener);
|
||||
if (mAdmin != null) {
|
||||
builder.setView(R.layout.admin_disabled_other_options_footer);
|
||||
} else {
|
||||
builder.setView(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDialogCreated(Dialog dialog) {
|
||||
super.onDialogCreated(dialog);
|
||||
dialog.create();
|
||||
if (mAdmin != null) {
|
||||
View footerView = dialog.findViewById(R.id.admin_disabled_other_options);
|
||||
footerView.findViewById(R.id.admin_more_details_link).setOnClickListener(
|
||||
new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
|
||||
getContext(), mAdmin);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void removeUnusableTimeouts(long maxTimeout, EnforcedAdmin admin) {
|
||||
final DevicePolicyManager dpm = (DevicePolicyManager) getContext().getSystemService(
|
||||
Context.DEVICE_POLICY_SERVICE);
|
||||
if (dpm == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (admin == null && mAdmin == null && !isDisabledByAdmin()) {
|
||||
return;
|
||||
}
|
||||
if (admin == null) {
|
||||
maxTimeout = Long.MAX_VALUE;
|
||||
}
|
||||
|
||||
ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>();
|
||||
ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>();
|
||||
for (int i = 0; i < mInitialValues.length; ++i) {
|
||||
long timeout = Long.parseLong(mInitialValues[i].toString());
|
||||
if (timeout <= maxTimeout) {
|
||||
revisedEntries.add(mInitialEntries[i]);
|
||||
revisedValues.add(mInitialValues[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// If there are no possible options for the user, then set this preference as disabled
|
||||
// by admin, otherwise remove the padlock in case it was set earlier.
|
||||
if (revisedValues.size() == 0) {
|
||||
setDisabledByAdmin(admin);
|
||||
return;
|
||||
} else {
|
||||
setDisabledByAdmin(null);
|
||||
}
|
||||
|
||||
if (revisedEntries.size() != getEntries().length) {
|
||||
final int userPreference = Integer.parseInt(getValue());
|
||||
setEntries(revisedEntries.toArray(new CharSequence[0]));
|
||||
setEntryValues(revisedValues.toArray(new CharSequence[0]));
|
||||
mAdmin = admin;
|
||||
if (userPreference <= maxTimeout) {
|
||||
setValue(String.valueOf(userPreference));
|
||||
} else if (revisedValues.size() > 0
|
||||
&& Long.parseLong(revisedValues.get(revisedValues.size() - 1).toString())
|
||||
== maxTimeout) {
|
||||
// If the last one happens to be the same as the max timeout, select that
|
||||
setValue(String.valueOf(maxTimeout));
|
||||
} else {
|
||||
// The selected time out value is longer than the max timeout allowed by the admin.
|
||||
// Select the largest value from the list by default.
|
||||
Log.w(TAG, "Default to longest timeout. Value disabled by admin:" + userPreference);
|
||||
setValue(revisedValues.get(revisedValues.size() - 1).toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -23,7 +23,6 @@ import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.TimeoutListPreference;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||
@@ -71,12 +70,13 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
|
||||
dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId());
|
||||
timeoutListPreference.removeUnusableTimeouts(maxTimeout, admin);
|
||||
}
|
||||
updateTimeoutPreferenceDescription(timeoutListPreference, currentTimeout);
|
||||
updateTimeoutPreferenceDescription(timeoutListPreference,
|
||||
Long.parseLong(timeoutListPreference.getValue()));
|
||||
|
||||
EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
|
||||
mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
|
||||
UserHandle.myUserId());
|
||||
if(admin != null) {
|
||||
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
|
||||
mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
|
||||
UserHandle.myUserId());
|
||||
if (admin != null) {
|
||||
timeoutListPreference.removeUnusableTimeouts(0/* disable all*/, admin);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user