OSDN Git Service

Fix 2527411: Remove unusable display timeouts from Settings.
authorJim Miller <jaggies@google.com>
Tue, 30 Mar 2010 03:18:51 +0000 (20:18 -0700)
committerJim Miller <jaggies@google.com>
Tue, 30 Mar 2010 05:16:55 +0000 (22:16 -0700)
This fix removes unusable display timeouts from Settings when
a device policy is enabled.

Patch 3 catches the case where not having any active policies clears the list.

Change-Id: I5b08d420c73b1c2e6fe2bb4e65656790290574cd

src/com/android/settings/DisplaySettings.java

index 72a0741..813df00 100644 (file)
@@ -18,14 +18,11 @@ package com.android.settings;
 
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
 
-import com.android.settings.bluetooth.DockEventReceiver;
+import java.util.ArrayList;
 
-import android.content.BroadcastReceiver;
+import android.app.admin.DevicePolicyManager;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.media.AudioManager;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -33,11 +30,8 @@ import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
-import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
-import android.provider.Settings.SettingNotFoundException;
-import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.view.IWindowManager;
 
@@ -76,7 +70,35 @@ public class DisplaySettings extends PreferenceActivity implements
         screenTimeoutPreference.setValue(String.valueOf(Settings.System.getInt(
                 resolver, SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE)));
         screenTimeoutPreference.setOnPreferenceChangeListener(this);
+        disableUnusableTimeouts(screenTimeoutPreference);
+    }
 
+    private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) {
+        DevicePolicyManager dpm =
+            (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
+        long maxTimeout = dpm != null ? dpm.getMaximumTimeToLock(null) : 0;
+        if (maxTimeout == 0) {
+            return; // policy not enforced
+        }
+        final CharSequence[] entries = screenTimeoutPreference.getEntries();
+        final CharSequence[] values = screenTimeoutPreference.getEntryValues();
+        ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>();
+        ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>();
+        for (int i = 0; i < values.length; i++) {
+            long timeout = Long.valueOf(values[i].toString());
+            if (timeout <= maxTimeout) {
+                revisedEntries.add(entries[i]);
+                revisedValues.add(values[i]);
+            }
+        }
+        if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) {
+            screenTimeoutPreference.setEntries(
+                    revisedEntries.toArray(new CharSequence[revisedEntries.size()]));
+            screenTimeoutPreference.setEntryValues(
+                    revisedValues.toArray(new CharSequence[revisedValues.size()]));
+            screenTimeoutPreference.setValue(String.valueOf(maxTimeout));
+        }
+        screenTimeoutPreference.setEnabled(revisedEntries.size() > 0);
     }
 
     @Override