summaryrefslogtreecommitdiffstats
path: root/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-05-20 16:43:42 -0400
committerJason Monk <jmonk@google.com>2015-05-26 11:10:21 -0400
commit93568c580d730911a6e2734e79fbe6dc27c1bca1 (patch)
treefce9e658e4e118792f07b725426ecd29083d9c03 /src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
parent0b085665998b69aa9543d50ecca1a5bc62d6bb77 (diff)
downloadandroid_packages_apps_PackageInstaller-93568c580d730911a6e2734e79fbe6dc27c1bca1.tar.gz
android_packages_apps_PackageInstaller-93568c580d730911a6e2734e79fbe6dc27c1bca1.tar.bz2
android_packages_apps_PackageInstaller-93568c580d730911a6e2734e79fbe6dc27c1bca1.zip
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
Diffstat (limited to 'src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java')
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java93
1 files changed, 93 insertions, 0 deletions
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<Boolean> grantedApps = new SparseArray<>();
+ SparseArray<Boolean> 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;
+ }
+}