Search in sources :

Example 11 with PermissionInfo

use of android.content.pm.PermissionInfo in project XobotOS by xamarin.

the class AppSecurityPermissions method aggregateGroupDescs.

/*
     * Utility method that aggregates all permission descriptions categorized by group
     * Say group1 has perm11, perm12, perm13, the group description will be
     * perm11_Desc, perm12_Desc, perm13_Desc
     */
private void aggregateGroupDescs(Map<String, List<PermissionInfo>> map, Map<String, String> retMap) {
    if (map == null) {
        return;
    }
    if (retMap == null) {
        return;
    }
    Set<String> grpNames = map.keySet();
    Iterator<String> grpNamesIter = grpNames.iterator();
    while (grpNamesIter.hasNext()) {
        String grpDesc = null;
        String grpNameKey = grpNamesIter.next();
        List<PermissionInfo> grpPermsList = map.get(grpNameKey);
        if (grpPermsList == null) {
            continue;
        }
        for (PermissionInfo permInfo : grpPermsList) {
            CharSequence permDesc = permInfo.loadLabel(mPm);
            grpDesc = formatPermissions(grpDesc, permDesc);
        }
        // Insert grpDesc into map
        if (grpDesc != null) {
            if (localLOGV)
                Log.i(TAG, "Group:" + grpNameKey + " description:" + grpDesc.toString());
            retMap.put(grpNameKey, grpDesc.toString());
        }
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo)

Example 12 with PermissionInfo

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

the class PackageManagerService method generatePermissionInfo.

static 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 13 with PermissionInfo

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

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 14 with PermissionInfo

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

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 15 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