Search in sources :

Example 16 with PermissionGroupInfo

use of android.content.pm.PermissionGroupInfo 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 17 with PermissionGroupInfo

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

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 18 with PermissionGroupInfo

use of android.content.pm.PermissionGroupInfo in project SmartAndroidSource by jaychou2012.

the class AppInfo method getUsesPermission.

/**
	 * Get the App's All use Permission
	 * 
	 * @param packageName
	 * @return the use Permissions by ArrayList<MyPermission> permissions
	 */
public ArrayList<MyPermission> getUsesPermission(String packageName) {
    ArrayList<MyPermission> myPerms = new ArrayList<MyPermission>();
    try {
        PackageManager packageManager = c.getPackageManager();
        PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
        String[] usesPermissionsArray = packageInfo.requestedPermissions;
        for (int i = 0; i < usesPermissionsArray.length; i++) {
            MyPermission permi = new MyPermission();
            // �õ�ÿ��Ȩ�޵�����,��:android.permission.INTERNET
            String usesPermissionName = usesPermissionsArray[i];
            permi.setPermissionName(usesPermissionName);
            System.out.println("usesPermissionName=" + usesPermissionName);
            // ͨ��usesPermissionName��ȡ��Ȩ�޵���ϸ��Ϣ
            PermissionInfo permissionInfo = packageManager.getPermissionInfo(usesPermissionName, 0);
            // ��ø�Ȩ�������ĸ�Ȩ����,��:����ͨ��
            PermissionGroupInfo permissionGroupInfo = packageManager.getPermissionGroupInfo(permissionInfo.group, 0);
            permi.setPermissionGroup(permissionGroupInfo.loadLabel(packageManager).toString());
            System.out.println("permissionGroup=" + permissionGroupInfo.loadLabel(packageManager).toString());
            // ��ȡ��Ȩ�޵ı�ǩ��Ϣ,����:��ȫ���������Ȩ��
            String permissionLabel = permissionInfo.loadLabel(packageManager).toString();
            permi.setPermissionLabel(permissionLabel);
            System.out.println("permissionLabel=" + permissionLabel);
            // ��ȡ��Ȩ�޵���ϸ������Ϣ,����:�����Ӧ�ô��������׽��ֺ�ʹ���Զ�������Э��
            // �����������ijЩӦ���ṩ���������������ݵ�;��,���Ӧ�������Ȩ�޼�����������������.
            String permissionDescription = permissionInfo.loadDescription(packageManager).toString();
            permi.setPermissionDescription(permissionDescription);
            System.out.println("permissionDescription=" + permissionDescription);
            System.out.println("===========================================");
            myPerms.add(permi);
        }
        return myPerms;
    } catch (Exception e) {
    }
    return myPerms;
}
Also used : PackageManager(android.content.pm.PackageManager) PermissionInfo(android.content.pm.PermissionInfo) MyPermission(com.smartandroid.sa.entity.MyPermission) PackageInfo(android.content.pm.PackageInfo) ArrayList(java.util.ArrayList) PermissionGroupInfo(android.content.pm.PermissionGroupInfo) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException)

Example 19 with PermissionGroupInfo

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

the class Pm method doListPermissions.

private void doListPermissions(ArrayList<String> groupList, boolean groups, boolean labels, boolean summary, int startProtectionLevel, int endProtectionLevel) throws RemoteException {
    for (int i = 0; i < groupList.size(); i++) {
        String groupName = groupList.get(i);
        String prefix = "";
        if (groups) {
            if (i > 0)
                System.out.println("");
            if (groupName != null) {
                PermissionGroupInfo pgi = mPm.getPermissionGroupInfo(groupName, 0);
                if (summary) {
                    Resources res = getResources(pgi);
                    if (res != null) {
                        System.out.print(loadText(pgi, pgi.labelRes, pgi.nonLocalizedLabel) + ": ");
                    } else {
                        System.out.print(pgi.name + ": ");
                    }
                } else {
                    System.out.println((labels ? "+ " : "") + "group:" + pgi.name);
                    if (labels) {
                        System.out.println("  package:" + pgi.packageName);
                        Resources res = getResources(pgi);
                        if (res != null) {
                            System.out.println("  label:" + loadText(pgi, pgi.labelRes, pgi.nonLocalizedLabel));
                            System.out.println("  description:" + loadText(pgi, pgi.descriptionRes, pgi.nonLocalizedDescription));
                        }
                    }
                }
            } else {
                System.out.println(((labels && !summary) ? "+ " : "") + "ungrouped:");
            }
            prefix = "  ";
        }
        List<PermissionInfo> ps = mPm.queryPermissionsByGroup(groupList.get(i), 0);
        int count = ps.size();
        boolean first = true;
        for (int p = 0; p < count; p++) {
            PermissionInfo pi = ps.get(p);
            if (groups && groupName == null && pi.group != null) {
                continue;
            }
            final int base = pi.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
            if (base < startProtectionLevel || base > endProtectionLevel) {
                continue;
            }
            if (summary) {
                if (first) {
                    first = false;
                } else {
                    System.out.print(", ");
                }
                Resources res = getResources(pi);
                if (res != null) {
                    System.out.print(loadText(pi, pi.labelRes, pi.nonLocalizedLabel));
                } else {
                    System.out.print(pi.name);
                }
            } else {
                System.out.println(prefix + (labels ? "+ " : "") + "permission:" + pi.name);
                if (labels) {
                    System.out.println(prefix + "  package:" + pi.packageName);
                    Resources res = getResources(pi);
                    if (res != null) {
                        System.out.println(prefix + "  label:" + loadText(pi, pi.labelRes, pi.nonLocalizedLabel));
                        System.out.println(prefix + "  description:" + loadText(pi, pi.descriptionRes, pi.nonLocalizedDescription));
                    }
                    System.out.println(prefix + "  protectionLevel:" + PermissionInfo.protectionToString(pi.protectionLevel));
                }
            }
        }
        if (summary) {
            System.out.println("");
        }
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo) PermissionGroupInfo(android.content.pm.PermissionGroupInfo) Resources(android.content.res.Resources)

Example 20 with PermissionGroupInfo

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

the class PackageManagerShellCommand method doListPermissions.

private void doListPermissions(ArrayList<String> groupList, boolean groups, boolean labels, boolean summary, int startProtectionLevel, int endProtectionLevel) throws RemoteException {
    final PrintWriter pw = getOutPrintWriter();
    final int groupCount = groupList.size();
    for (int i = 0; i < groupCount; i++) {
        String groupName = groupList.get(i);
        String prefix = "";
        if (groups) {
            if (i > 0) {
                pw.println("");
            }
            if (groupName != null) {
                PermissionGroupInfo pgi = mInterface.getPermissionGroupInfo(groupName, 0);
                if (summary) {
                    Resources res = getResources(pgi);
                    if (res != null) {
                        pw.print(loadText(pgi, pgi.labelRes, pgi.nonLocalizedLabel) + ": ");
                    } else {
                        pw.print(pgi.name + ": ");
                    }
                } else {
                    pw.println((labels ? "+ " : "") + "group:" + pgi.name);
                    if (labels) {
                        pw.println("  package:" + pgi.packageName);
                        Resources res = getResources(pgi);
                        if (res != null) {
                            pw.println("  label:" + loadText(pgi, pgi.labelRes, pgi.nonLocalizedLabel));
                            pw.println("  description:" + loadText(pgi, pgi.descriptionRes, pgi.nonLocalizedDescription));
                        }
                    }
                }
            } else {
                pw.println(((labels && !summary) ? "+ " : "") + "ungrouped:");
            }
            prefix = "  ";
        }
        List<PermissionInfo> ps = mInterface.queryPermissionsByGroup(groupList.get(i), 0).getList();
        final int count = ps.size();
        boolean first = true;
        for (int p = 0; p < count; p++) {
            PermissionInfo pi = ps.get(p);
            if (groups && groupName == null && pi.group != null) {
                continue;
            }
            final int base = pi.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
            if (base < startProtectionLevel || base > endProtectionLevel) {
                continue;
            }
            if (summary) {
                if (first) {
                    first = false;
                } else {
                    pw.print(", ");
                }
                Resources res = getResources(pi);
                if (res != null) {
                    pw.print(loadText(pi, pi.labelRes, pi.nonLocalizedLabel));
                } else {
                    pw.print(pi.name);
                }
            } else {
                pw.println(prefix + (labels ? "+ " : "") + "permission:" + pi.name);
                if (labels) {
                    pw.println(prefix + "  package:" + pi.packageName);
                    Resources res = getResources(pi);
                    if (res != null) {
                        pw.println(prefix + "  label:" + loadText(pi, pi.labelRes, pi.nonLocalizedLabel));
                        pw.println(prefix + "  description:" + loadText(pi, pi.descriptionRes, pi.nonLocalizedDescription));
                    }
                    pw.println(prefix + "  protectionLevel:" + PermissionInfo.protectionToString(pi.protectionLevel));
                }
            }
        }
        if (summary) {
            pw.println("");
        }
    }
}
Also used : PermissionInfo(android.content.pm.PermissionInfo) PermissionGroupInfo(android.content.pm.PermissionGroupInfo) Resources(android.content.res.Resources) PrintWriter(java.io.PrintWriter)

Aggregations

PermissionGroupInfo (android.content.pm.PermissionGroupInfo)28 PermissionInfo (android.content.pm.PermissionInfo)14 PrintWriter (java.io.PrintWriter)12 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)11 ArrayList (java.util.ArrayList)8 Resources (android.content.res.Resources)6 PackageInfo (android.content.pm.PackageInfo)2 PackageManager (android.content.pm.PackageManager)2 RemoteException (android.os.RemoteException)2 AppOpsManager (android.app.AppOpsManager)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 VPackage (com.lody.virtual.server.pm.parser.VPackage)1 PluginPackageParser (com.morgoo.droidplugin.pm.parser.PluginPackageParser)1 MyPermission (com.smartandroid.sa.entity.MyPermission)1