diff options
author | Makoto Onuki <omakoto@google.com> | 2015-06-10 16:39:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-10 16:39:01 +0000 |
commit | 765f7dce70f72f1c9b90f31d38e3a1a410df6070 (patch) | |
tree | dbf44c68ac1ddaf0e72ab95b1a7fe2a233c32142 | |
parent | c7745215631446644cbb3e4e58c6a44b03cbfdbc (diff) | |
parent | bf3e576881748a1420fabc9c7ecc55cbadcc8136 (diff) | |
download | android_packages_apps_PackageInstaller-765f7dce70f72f1c9b90f31d38e3a1a410df6070.tar.gz android_packages_apps_PackageInstaller-765f7dce70f72f1c9b90f31d38e3a1a410df6070.tar.bz2 android_packages_apps_PackageInstaller-765f7dce70f72f1c9b90f31d38e3a1a410df6070.zip |
Merge "ACTION_GET_PERMISSIONS_COUNT now returns list of granted..." into mnc-dev
-rw-r--r-- | src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java index 15a33540..8ca67017 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -26,27 +26,44 @@ import android.util.SparseArray; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; import com.android.packageinstaller.permission.utils.Utils; -public class PermissionStatusReceiver extends BroadcastReceiver { +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +public class PermissionStatusReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - int[] result = new int[2]; + int[] counts = new int[3]; + ArrayList<CharSequence> grantedGroups = new ArrayList<>(); boolean succeeded = false; + + boolean isForPackage = intent.hasExtra(Intent.EXTRA_PACKAGE_NAME); + Intent responseIntent = new Intent(intent.getStringExtra( Intent.EXTRA_GET_PERMISSIONS_RESPONSE_INTENT)); responseIntent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); - if (intent.hasExtra(Intent.EXTRA_PACKAGE_NAME)) { + + + if (isForPackage) { String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); - succeeded = getPermissionsCount(context, pkg, result); + succeeded = getPermissionsCount(context, pkg, counts, grantedGroups); } else { - succeeded = getAppsWithPermissionsCount(context, result); + succeeded = getAppsWithPermissionsCount(context, counts); } - responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, - succeeded ? result : null); + if (succeeded) { + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, counts); + + if (isForPackage) { + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT, + grantedGroups.toArray(new CharSequence[grantedGroups.size()])); + } + } + context.sendBroadcast(responseIntent); } - public boolean getPermissionsCount(Context context, String pkg, int[] counts) { + public boolean getPermissionsCount(Context context, String pkg, int[] counts, + ArrayList<CharSequence> grantedGroups) { try { PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, PackageManager.GET_PERMISSIONS); @@ -54,16 +71,33 @@ public class PermissionStatusReceiver extends BroadcastReceiver { new AppPermissions(context, packageInfo, null, false, null); int grantedCount = 0; int totalCount = 0; + int additionalCount = 0; + for (AppPermissionGroup group : appPermissions.getPermissionGroups()) { if (Utils.shouldShowPermission(group, false)) { totalCount++; if (group.areRuntimePermissionsGranted()) { grantedCount++; + + if (Utils.OS_PKG.equals(group.getDeclaringPackage())) { + grantedGroups.add(group.getLabel()); + } else { + additionalCount++; + } } } } + + // Sort + Collator coll = Collator.getInstance(); + coll.setStrength(Collator.PRIMARY); + Collections.sort(grantedGroups, coll); + + // Set results counts[0] = grantedCount; counts[1] = totalCount; + counts[2] = additionalCount; + return true; } catch (NameNotFoundException e) { return false; |