From 93568c580d730911a6e2734e79fbe6dc27c1bca1 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 20 May 2015 16:43:42 -0400 Subject: Add permission summaries back - Add summaries to manage permissions screen - Add some shortcuts to skip loading unneeded labels/icons for summary info - Add way for Settings to broadcast request for info about granted permissions. Bug: 21078474 Change-Id: I28582129971385203f4e4316addf73e07ee53940 --- .../permission/model/PermissionStatusReceiver.java | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java (limited to 'src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java') diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java new file mode 100644 index 00000000..f84a0757 --- /dev/null +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.packageinstaller.permission.model; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.util.SparseArray; + +import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; +import com.android.packageinstaller.permission.utils.Utils; + +public class PermissionStatusReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + int[] result = new int[2]; + boolean succeeded = false; + 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)) { + String pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); + succeeded = getPermissionsCount(context, pkg, result); + } else { + succeeded = getAppsWithPermissionsCount(context, result); + } + responseIntent.putExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT, + succeeded ? result : null); + context.sendBroadcast(responseIntent); + } + + public boolean getPermissionsCount(Context context, String pkg, int[] counts) { + try { + PackageInfo packageInfo = + context.getPackageManager().getPackageInfo(pkg, PackageManager.GET_PERMISSIONS); + AppPermissions appPermissions = + new AppPermissions(context, packageInfo, null, null); + int grantedCount = 0; + int totalCount = 0; + for (AppPermissionGroup group : appPermissions.getPermissionGroups()) { + if (Utils.shouldShowPermission(group, false)) { + totalCount++; + if (group.areRuntimePermissionsGranted()) { + grantedCount++; + } + } + } + counts[0] = grantedCount; + counts[1] = totalCount; + return true; + } catch (NameNotFoundException e) { + return false; + } + } + + public boolean getAppsWithPermissionsCount(Context context, int[] counts) { + // Indexed by uid. + SparseArray grantedApps = new SparseArray<>(); + SparseArray allApps = new SparseArray<>(); + for (String group : Utils.MODERN_PERMISSION_GROUPS) { + PermissionApps permissionApps = new PermissionApps(context, + group, null); + permissionApps.loadNowWithoutUi(); + for (PermissionApp app : permissionApps.getApps()) { + int uid = app.getUid(); + if (app.areRuntimePermissionsGranted()) { + grantedApps.put(uid, true); + } + allApps.put(uid, true); + } + } + counts[0] = grantedApps.size(); + counts[1] = allApps.size(); + return true; + } +} -- cgit v1.2.3