OSDN Git Service

Fix bugs with null AppOp permissions.
authorDaniel Sandler <dsandler@android.com>
Thu, 31 Jan 2013 20:22:51 +0000 (15:22 -0500)
committerDaniel Sandler <dsandler@android.com>
Thu, 31 Jan 2013 20:48:56 +0000 (15:48 -0500)
Change-Id: I9f199d4f5843fbba374ced8206902098811b3786

src/com/android/settings/applications/AppOpsDetails.java
src/com/android/settings/applications/AppOpsState.java

index 9bc90a7..85eba0c 100644 (file)
@@ -123,17 +123,19 @@ public class AppOpsDetails extends Fragment {
                             mOperationsSection, false);
                     mOperationsSection.addView(view);
                     String perm = AppOpsManager.opToPermission(op.getOp());
-                    try {
-                        PermissionInfo pi = mPm.getPermissionInfo(perm, 0);
-                        if (pi.group != null && !lastPermGroup.equals(pi.group)) {
-                            lastPermGroup = pi.group;
-                            PermissionGroupInfo pgi = mPm.getPermissionGroupInfo(pi.group, 0);
-                            if (pgi.icon != 0) {
-                                ((ImageView)view.findViewById(R.id.op_icon)).setImageDrawable(
-                                        pgi.loadIcon(mPm));
+                    if (perm != null) {
+                        try {
+                            PermissionInfo pi = mPm.getPermissionInfo(perm, 0);
+                            if (pi.group != null && !lastPermGroup.equals(pi.group)) {
+                                lastPermGroup = pi.group;
+                                PermissionGroupInfo pgi = mPm.getPermissionGroupInfo(pi.group, 0);
+                                if (pgi.icon != 0) {
+                                    ((ImageView)view.findViewById(R.id.op_icon)).setImageDrawable(
+                                            pgi.loadIcon(mPm));
+                                }
                             }
+                        } catch (NameNotFoundException e) {
                         }
-                    } catch (NameNotFoundException e) {
                     }
                     ((TextView)view.findViewById(R.id.op_name)).setText(mState.getLabelText(op));
                     ((TextView)view.findViewById(R.id.op_time)).setText(mState.getTimeText(op));
index 808afa8..4050687 100644 (file)
@@ -359,7 +359,7 @@ public class AppOpsState {
         ArrayList<Integer> permOps = new ArrayList<Integer>();
         for (int i=0; i<tpl.ops.length; i++) {
             String perm = AppOpsManager.opToPermission(tpl.ops[i]);
-            if (!perms.contains(perm)) {
+            if (perm != null && !perms.contains(perm)) {
                 perms.add(perm);
                 permOps.add(tpl.ops[i]);
             }
@@ -408,36 +408,38 @@ public class AppOpsState {
             }
             List<AppOpsManager.OpEntry> dummyOps = null;
             AppOpsManager.PackageOps pkgOps = null;
-            for (int j=0; j<appInfo.requestedPermissions.length; j++) {
-                if (appInfo.requestedPermissionsFlags != null) {
-                    if ((appInfo.requestedPermissionsFlags[j]
-                            & PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
-                        if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm "
-                                + appInfo.requestedPermissions[j] + " not granted; skipping");
-                        break;
+            if (appInfo.requestedPermissions != null) {
+                for (int j=0; j<appInfo.requestedPermissions.length; j++) {
+                    if (appInfo.requestedPermissionsFlags != null) {
+                        if ((appInfo.requestedPermissionsFlags[j]
+                                & PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
+                            if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm "
+                                    + appInfo.requestedPermissions[j] + " not granted; skipping");
+                            break;
+                        }
                     }
-                }
-                if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + ": requested perm "
-                        + appInfo.requestedPermissions[j]);
-                for (int k=0; k<perms.size(); k++) {
-                    if (!perms.get(k).equals(appInfo.requestedPermissions[j])) {
-                        continue;
-                    }
-                    if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + perms.get(k)
-                            + " has op " + permOps.get(k) + ": " + appEntry.hasOp(permOps.get(k)));
-                    if (appEntry.hasOp(permOps.get(k))) {
-                        continue;
+                    if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + ": requested perm "
+                            + appInfo.requestedPermissions[j]);
+                    for (int k=0; k<perms.size(); k++) {
+                        if (!perms.get(k).equals(appInfo.requestedPermissions[j])) {
+                            continue;
+                        }
+                        if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + perms.get(k)
+                                + " has op " + permOps.get(k) + ": " + appEntry.hasOp(permOps.get(k)));
+                        if (appEntry.hasOp(permOps.get(k))) {
+                            continue;
+                        }
+                        if (dummyOps == null) {
+                            dummyOps = new ArrayList<AppOpsManager.OpEntry>();
+                            pkgOps = new AppOpsManager.PackageOps(
+                                    appInfo.packageName, appInfo.applicationInfo.uid, dummyOps);
+
+                        }
+                        AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(
+                                permOps.get(k), AppOpsManager.MODE_ALLOWED, 0, 0, 0);
+                        dummyOps.add(opEntry);
+                        addOp(entries, pkgOps, appEntry, opEntry);
                     }
-                    if (dummyOps == null) {
-                        dummyOps = new ArrayList<AppOpsManager.OpEntry>();
-                        pkgOps = new AppOpsManager.PackageOps(
-                                appInfo.packageName, appInfo.applicationInfo.uid, dummyOps);
-
-                    }
-                    AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(
-                            permOps.get(k), AppOpsManager.MODE_ALLOWED, 0, 0, 0);
-                    dummyOps.add(opEntry);
-                    addOp(entries, pkgOps, appEntry, opEntry);
                 }
             }
         }