Search in sources :

Example 1 with PermissionInfo

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

the class MetaDataTest method testPermissionWithData.

@SmallTest
public void testPermissionWithData() throws Exception {
    ComponentName cn = new ComponentName("foo", "com.android.frameworks.coretests.permission.TEST_GRANTED");
    PermissionInfo pi = mContext.getPackageManager().getPermissionInfo(cn.getClassName(), PackageManager.GET_META_DATA);
    checkMetaData(cn, pi);
    pi = mContext.getPackageManager().getPermissionInfo(cn.getClassName(), 0);
    assertNull("Meta data returned when not requested", pi.metaData);
}
Also used : PermissionInfo(android.content.pm.PermissionInfo) ComponentName(android.content.ComponentName) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 2 with PermissionInfo

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

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];
        // care about permissions that have actually been granted to it.
        if (installedPkgInfo != null && info == installedPkgInfo) {
            if ((flagsList[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
                continue;
            }
        }
        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 3 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 4 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 5 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)

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