OSDN Git Service

Disabling the activate button when paused
[android-x86/packages-apps-Settings.git] / src / com / android / settings / DeviceAdminAdd.java
index 27e7a54..5e05a22 100644 (file)
@@ -16,6 +16,8 @@
 
 package com.android.settings;
 
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import org.xmlpull.v1.XmlPullParserException;
 
 import android.app.Activity;
@@ -88,7 +90,7 @@ public class DeviceAdminAdd extends Activity {
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-
+        getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
         mHandler = new Handler(getMainLooper());
         
         mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
@@ -116,34 +118,38 @@ public class DeviceAdminAdd extends Activity {
             return;
         }
 
-        // Make sure the given component name is actually a valid device admin.
-        List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
-                new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
-                PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
-        int count = avail == null ? 0 : avail.size();
-        boolean found = false;
-        for (int i=0; i<count; i++) {
-            ResolveInfo ri = avail.get(i);
-            if (ai.packageName.equals(ri.activityInfo.packageName)
-                    && ai.name.equals(ri.activityInfo.name)) {
-                try {
-                    // We didn't retrieve the meta data for all possible matches, so
-                    // need to use the activity info of this specific one that was retrieved.
-                    ri.activityInfo = ai;
-                    DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
-                    found = true;
-                } catch (XmlPullParserException e) {
-                    Log.w(TAG, "Bad " + ri.activityInfo, e);
-                } catch (IOException e) {
-                    Log.w(TAG, "Bad " + ri.activityInfo, e);
+        // When activating, make sure the given component name is actually a valid device admin.
+        // No need to check this when deactivating, because it is safe to deactivate an active
+        // invalid device admin.
+        if (!mDPM.isAdminActive(cn)) {
+            List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
+                    new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
+                    PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
+            int count = avail == null ? 0 : avail.size();
+            boolean found = false;
+            for (int i=0; i<count; i++) {
+                ResolveInfo ri = avail.get(i);
+                if (ai.packageName.equals(ri.activityInfo.packageName)
+                        && ai.name.equals(ri.activityInfo.name)) {
+                    try {
+                        // We didn't retrieve the meta data for all possible matches, so
+                        // need to use the activity info of this specific one that was retrieved.
+                        ri.activityInfo = ai;
+                        DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
+                        found = true;
+                    } catch (XmlPullParserException e) {
+                        Log.w(TAG, "Bad " + ri.activityInfo, e);
+                    } catch (IOException e) {
+                        Log.w(TAG, "Bad " + ri.activityInfo, e);
+                    }
+                    break;
                 }
-                break;
             }
-        }
-        if (!found) {
-            Log.w(TAG, "Request to add invalid device admin: " + cn);
-            finish();
-            return;
+            if (!found) {
+                Log.w(TAG, "Request to add invalid device admin: " + cn);
+                finish();
+                return;
+            }
         }
 
         ResolveInfo ri = new ResolveInfo();
@@ -260,13 +266,20 @@ public class DeviceAdminAdd extends Activity {
             }
         });
     }
-    
+
     @Override
     protected void onResume() {
         super.onResume();
+        mActionButton.setEnabled(true);
         updateInterface();
     }
-    
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        mActionButton.setEnabled(false);
+    }
+
     @Override
     protected Dialog onCreateDialog(int id, Bundle args) {
         switch (id) {