Search in sources :

Example 6 with PermissionInfo

use of android.content.pm.PermissionInfo in project platform_frameworks_base by android.

the class AppSecurityPermissions method extractPerms.

private void extractPerms(PackageInfo info, Set<MyPermissionInfo> permSet, PackageInfo installedPkgInfo) {
    String[] strList = info.requestedPermissions;
    int[] flagsList = info.requestedPermissionsFlags;
    if ((strList == null) || (strList.length == 0)) {
        return;
    }
    for (int i = 0; i < strList.length; i++) {
        String permName = strList[i];
        try {
            PermissionInfo tmpPermInfo = mPm.getPermissionInfo(permName, 0);
            if (tmpPermInfo == null) {
                continue;
            }
            int existingIndex = -1;
            if (installedPkgInfo != null && installedPkgInfo.requestedPermissions != null) {
                for (int j = 0; j < installedPkgInfo.requestedPermissions.length; j++) {
                    if (permName.equals(installedPkgInfo.requestedPermissions[j])) {
                        existingIndex = j;
                        break;
                    }
                }
            }
            final int existingFlags = existingIndex >= 0 ? installedPkgInfo.requestedPermissionsFlags[existingIndex] : 0;
            if (!isDisplayablePermission(tmpPermInfo, flagsList[i], existingFlags)) {
                // to see, so skip it.
                continue;
            }
            final String origGroupName = tmpPermInfo.group;
            String groupName = origGroupName;
            if (groupName == null) {
                groupName = tmpPermInfo.packageName;
                tmpPermInfo.group = groupName;
            }
            MyPermissionGroupInfo group = mPermGroups.get(groupName);
            if (group == null) {
                PermissionGroupInfo grp = null;
                if (origGroupName != null) {
                    grp = mPm.getPermissionGroupInfo(origGroupName, 0);
                }
                if (grp != null) {
                    group = new MyPermissionGroupInfo(grp);
                } else {
                    // We could be here either because the permission
                    // didn't originally specify a group or the group it
                    // gave couldn't be found.  In either case, we consider
                    // its group to be the permission's package name.
                    tmpPermInfo.group = tmpPermInfo.packageName;
                    group = mPermGroups.get(tmpPermInfo.group);
                    if (group == null) {
                        group = new MyPermissionGroupInfo(tmpPermInfo);
                    }
                    group = new MyPermissionGroupInfo(tmpPermInfo);
                }
                mPermGroups.put(tmpPermInfo.group, group);
            }
            final boolean newPerm = installedPkgInfo != null && (existingFlags & PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0;
            MyPermissionInfo myPerm = new MyPermissionInfo(tmpPermInfo);
            myPerm.mNewReqFlags = flagsList[i];
            myPerm.mExistingReqFlags = existingFlags;
            // This is a new permission if the app is already installed and
            // doesn't currently hold this permission.
            myPerm.mNew = newPerm;
            permSet.add(myPerm);
        } catch (NameNotFoundException e) {
            Log.i(TAG, "Ignoring unknown permission:" + permName);
        }
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException) PermissionGroupInfo(android.content.pm.PermissionGroupInfo)

Example 7 with PermissionInfo

use of android.content.pm.PermissionInfo in project android_frameworks_base by ParanoidAndroid.

the class Settings method writePermissionLPr.

void writePermissionLPr(XmlSerializer serializer, BasePermission bp) throws XmlPullParserException, java.io.IOException {
    if (bp.type != BasePermission.TYPE_BUILTIN && bp.sourcePackage != null) {
        serializer.startTag(null, TAG_ITEM);
        serializer.attribute(null, ATTR_NAME, bp.name);
        serializer.attribute(null, "package", bp.sourcePackage);
        if (bp.protectionLevel != PermissionInfo.PROTECTION_NORMAL) {
            serializer.attribute(null, "protection", Integer.toString(bp.protectionLevel));
        }
        if (PackageManagerService.DEBUG_SETTINGS)
            Log.v(PackageManagerService.TAG, "Writing perm: name=" + bp.name + " type=" + bp.type);
        if (bp.type == BasePermission.TYPE_DYNAMIC) {
            final PermissionInfo pi = bp.perm != null ? bp.perm.info : bp.pendingInfo;
            if (pi != null) {
                serializer.attribute(null, "type", "dynamic");
                if (pi.icon != 0) {
                    serializer.attribute(null, "icon", Integer.toString(pi.icon));
                }
                if (pi.nonLocalizedLabel != null) {
                    serializer.attribute(null, "label", pi.nonLocalizedLabel.toString());
                }
            }
        }
        serializer.endTag(null, TAG_ITEM);
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo)

Example 8 with PermissionInfo

use of android.content.pm.PermissionInfo in project android_frameworks_base by ParanoidAndroid.

the class PackageManagerService method addPermissionLocked.

boolean addPermissionLocked(PermissionInfo info, boolean async) {
    if (info.labelRes == 0 && info.nonLocalizedLabel == null) {
        throw new SecurityException("Label must be specified in permission");
    }
    BasePermission tree = checkPermissionTreeLP(info.name);
    BasePermission bp = mSettings.mPermissions.get(info.name);
    boolean added = bp == null;
    boolean changed = true;
    int fixedLevel = PermissionInfo.fixProtectionLevel(info.protectionLevel);
    if (added) {
        bp = new BasePermission(info.name, tree.sourcePackage, BasePermission.TYPE_DYNAMIC);
    } else if (bp.type != BasePermission.TYPE_DYNAMIC) {
        throw new SecurityException("Not allowed to modify non-dynamic permission " + info.name);
    } else {
        if (bp.protectionLevel == fixedLevel && bp.perm.owner.equals(tree.perm.owner) && bp.uid == tree.uid && comparePermissionInfos(bp.perm.info, info)) {
            changed = false;
        }
    }
    bp.protectionLevel = fixedLevel;
    info = new PermissionInfo(info);
    info.protectionLevel = fixedLevel;
    bp.perm = new PackageParser.Permission(tree.perm.owner, info);
    bp.perm.info.packageName = tree.perm.info.packageName;
    bp.uid = tree.uid;
    if (added) {
        mSettings.mPermissions.put(info.name, bp);
    }
    if (changed) {
        if (!async) {
            mSettings.writeLPr();
        } else {
            scheduleWriteSettingsLocked();
        }
    }
    return added;
}
Also used : PermissionInfo(android.content.pm.PermissionInfo) PackageParser(android.content.pm.PackageParser)

Example 9 with PermissionInfo

use of android.content.pm.PermissionInfo in project android_frameworks_base by ParanoidAndroid.

the class PackageManagerService method generatePermissionInfo.

static final PermissionInfo generatePermissionInfo(BasePermission bp, int flags) {
    if (bp.perm != null) {
        return PackageParser.generatePermissionInfo(bp.perm, flags);
    }
    PermissionInfo pi = new PermissionInfo();
    pi.name = bp.name;
    pi.packageName = bp.sourcePackage;
    pi.nonLocalizedLabel = bp.name;
    pi.protectionLevel = bp.protectionLevel;
    return pi;
}
Also used : PermissionInfo(android.content.pm.PermissionInfo)

Example 10 with PermissionInfo

use of android.content.pm.PermissionInfo in project android_frameworks_base by ResurrectionRemix.

the class Settings method readPermissionsLPw.

private void readPermissionsLPw(ArrayMap<String, BasePermission> out, XmlPullParser parser) throws IOException, XmlPullParserException {
    int outerDepth = parser.getDepth();
    int type;
    while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
        if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
            continue;
        }
        final String tagName = parser.getName();
        if (tagName.equals(TAG_ITEM)) {
            final String name = parser.getAttributeValue(null, ATTR_NAME);
            final String sourcePackage = parser.getAttributeValue(null, "package");
            final String ptype = parser.getAttributeValue(null, "type");
            if (name != null && sourcePackage != null) {
                final boolean dynamic = "dynamic".equals(ptype);
                BasePermission bp = out.get(name);
                // If the permission is builtin, do not clobber it.
                if (bp == null || bp.type != BasePermission.TYPE_BUILTIN) {
                    bp = new BasePermission(name.intern(), sourcePackage, dynamic ? BasePermission.TYPE_DYNAMIC : BasePermission.TYPE_NORMAL);
                }
                bp.protectionLevel = readInt(parser, null, "protection", PermissionInfo.PROTECTION_NORMAL);
                bp.protectionLevel = PermissionInfo.fixProtectionLevel(bp.protectionLevel);
                bp.allowViaWhitelist = readInt(parser, null, "allowViaWhitelist", 0) == 1;
                if (dynamic) {
                    PermissionInfo pi = new PermissionInfo();
                    pi.packageName = sourcePackage.intern();
                    pi.name = name.intern();
                    pi.icon = readInt(parser, null, "icon", 0);
                    pi.nonLocalizedLabel = parser.getAttributeValue(null, "label");
                    pi.protectionLevel = bp.protectionLevel;
                    pi.allowViaWhitelist = bp.allowViaWhitelist;
                    bp.pendingInfo = pi;
                }
                out.put(bp.name, bp);
            } else {
                PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: permissions has" + " no name at " + parser.getPositionDescription());
            }
        } else {
            PackageManagerService.reportSettingsProblem(Log.WARN, "Unknown element reading permissions: " + parser.getName() + " at " + parser.getPositionDescription());
        }
        XmlUtils.skipCurrentTag(parser);
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo)

Aggregations

PermissionInfo (android.content.pm.PermissionInfo)43 PermissionGroupInfo (android.content.pm.PermissionGroupInfo)14 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)12 ComponentName (android.content.ComponentName)6 Resources (android.content.res.Resources)6 SmallTest (android.test.suitebuilder.annotation.SmallTest)6 PrintWriter (java.io.PrintWriter)4 ArrayList (java.util.ArrayList)4 PackageInfo (android.content.pm.PackageInfo)3 PackageManager (android.content.pm.PackageManager)3 PackageParser (android.content.pm.PackageParser)3 AppOpsManager (android.app.AppOpsManager)1 RemoteException (android.os.RemoteException)1 View (android.view.View)1 AdapterView (android.widget.AdapterView)1 CompoundButton (android.widget.CompoundButton)1 ImageView (android.widget.ImageView)1 Spinner (android.widget.Spinner)1 Switch (android.widget.Switch)1 TextView (android.widget.TextView)1