Merge "Fix bugs with null AppOp permissions."
This commit is contained in:
committed by
Android (Google) Code Review
commit
f6ab51cd67
@@ -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));
|
||||
|
@@ -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 (dummyOps == null) {
|
||||
dummyOps = new ArrayList<AppOpsManager.OpEntry>();
|
||||
pkgOps = new AppOpsManager.PackageOps(
|
||||
appInfo.packageName, appInfo.applicationInfo.uid, dummyOps);
|
||||
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);
|
||||
}
|
||||
AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(
|
||||
permOps.get(k), AppOpsManager.MODE_ALLOWED, 0, 0, 0);
|
||||
dummyOps.add(opEntry);
|
||||
addOp(entries, pkgOps, appEntry, opEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user