From 321f01574e523dd680090694ea22e38b83a7c2b3 Mon Sep 17 00:00:00 2001 From: Svet Ganov Date: Sat, 16 May 2015 22:51:50 -0700 Subject: [PATCH] Hide platform platform legacy permissions behind a menu option - framework. bug:21195624 Change-Id: I563c448e2abd7d33070ed2d8f62ba1b60a3744e8 --- api/system-current.txt | 1 + core/java/android/content/Intent.java | 16 ++ core/res/AndroidManifest.xml | 1 + .../settingslib/applications/PermissionsInfo.java | 192 --------------------- 4 files changed, 18 insertions(+), 192 deletions(-) delete mode 100644 packages/SettingsLib/src/com/android/settingslib/applications/PermissionsInfo.java diff --git a/api/system-current.txt b/api/system-current.txt index 14b56c712bd1..351ec8e703fd 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -8367,6 +8367,7 @@ package android.content { field public static final java.lang.String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS"; field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE"; field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE"; + field public static final java.lang.String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS"; field public static final java.lang.String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS"; field public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL"; field public static final java.lang.String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON"; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 7d767602541a..2db623b342da 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1535,6 +1535,22 @@ public class Intent implements Parcelable, Cloneable { "android.intent.action.MANAGE_APP_PERMISSIONS"; /** + * Activity action: Launch UI to manage permissions. + *

+ * Input: Nothing. + *

+ *

+ * Output: Nothing. + *

+ * + * @hide + */ + @SystemApi + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_MANAGE_PERMISSIONS = + "android.intent.action.MANAGE_PERMISSIONS"; + + /** * Intent extra: An app package name. *

* Type: String diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 79532e44cdba..608d718be133 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -678,6 +678,7 @@ diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/PermissionsInfo.java b/packages/SettingsLib/src/com/android/settingslib/applications/PermissionsInfo.java deleted file mode 100644 index 8b38a5f1fb3e..000000000000 --- a/packages/SettingsLib/src/com/android/settingslib/applications/PermissionsInfo.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * 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.settingslib.applications; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.PermissionGroupInfo; -import android.content.pm.PermissionInfo; -import android.graphics.drawable.Drawable; -import android.os.AsyncTask; -import android.os.Build; -import android.os.UserHandle; -import android.os.UserManager; -import android.util.ArrayMap; -import android.util.Log; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -public class PermissionsInfo { - - private static final String TAG = "PermissionsInfo"; - - private final PackageManager mPm; - private final ArrayList mGroups = new ArrayList<>(); - private final Map mGroupLookup = new ArrayMap<>(); - private final Callback mCallback; - private final Context mContext; - // Count of apps that request runtime permissions. - private int mRuntimePermAppsCt; - // Count of apps that are granted runtime permissions. - private int mRuntimePermAppsGrantedCt; - - public PermissionsInfo(Context context, Callback callback) { - mContext = context; - mPm = context.getPackageManager(); - mCallback = callback; - new PermissionsLoader().execute(); - } - - public List getGroups() { - synchronized (mGroups) { - return new ArrayList<>(mGroups); - } - } - - public int getRuntimePermAppsCount() { - return mRuntimePermAppsCt; - } - - public int getRuntimePermAppsGrantedCount() { - return mRuntimePermAppsGrantedCt; - } - - private PermissionGroup getOrCreateGroup(String permission) { - PermissionGroup group = mGroupLookup.get(permission); - if (group == null) { - // Some permissions don't have a group, in that case treat them like a group - // and create their own PermissionGroup (only if they are runtime). - try { - PermissionInfo info = mPm.getPermissionInfo(permission, 0); - if (info.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) { - group = new PermissionGroup(); - // TODO: Add default permission icon. - group.icon = info.icon != 0 ? info.loadIcon(mPm) : mContext.getDrawable( - com.android.internal.R.drawable.ic_perm_device_info); - group.name = info.name; - group.packageName = info.packageName; - group.label = info.loadLabel(mPm).toString(); - mGroups.add(group); - mGroupLookup.put(permission, group); - } - } catch (NameNotFoundException e) { - Log.w(TAG, "Unknown permission " + permission, e); - } - } - return group; - } - - private class PermissionsLoader extends AsyncTask { - - @Override - protected Void doInBackground(Void... params) { - List groups = - mPm.getAllPermissionGroups(PackageManager.GET_META_DATA); - // Get the groups. - for (PermissionGroupInfo groupInfo : groups) { - PermissionGroup group = new PermissionGroup(); - // TODO: Add default permission icon. - group.icon = groupInfo.icon != 0 ? groupInfo.loadIcon(mPm) : mContext.getDrawable( - com.android.internal.R.drawable.ic_perm_device_info); - group.name = groupInfo.name; - group.packageName = groupInfo.packageName; - group.label = groupInfo.loadLabel(mPm).toString(); - synchronized (mGroups) { - mGroups.add(group); - } - } - // Load permissions and which are runtime. - for (PermissionGroup group : mGroups) { - try { - List permissions = - mPm.queryPermissionsByGroup(group.name, 0); - for (PermissionInfo info : permissions) { - if (info.protectionLevel != PermissionInfo.PROTECTION_DANGEROUS) continue; - mGroupLookup.put(info.name, group); - } - } catch (NameNotFoundException e) { - Log.w(TAG, "Problem getting permissions", e); - } - } - // Load granted info. - for (UserHandle user : UserManager.get(mContext).getUserProfiles()) { - List allApps = mPm.getInstalledPackages( - PackageManager.GET_PERMISSIONS, user.getIdentifier()); - for (PackageInfo info : allApps) { - if (info.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1 - || info.requestedPermissions == null) { - continue; - } - final int N = info.requestedPermissionsFlags.length; - boolean appHasRuntimePerms = false; - boolean appGrantedRuntimePerms = false; - for (int i = 0; i < N; i++) { - boolean granted = (info.requestedPermissionsFlags[i] - & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0; - PermissionGroup group = getOrCreateGroup(info.requestedPermissions[i]); - String key = Integer.toString(info.applicationInfo.uid); - if (group != null && !group.possibleApps.contains(key)) { - appHasRuntimePerms = true; - group.possibleApps.add(key); - if (granted) { - appGrantedRuntimePerms = true; - group.grantedApps.add(key); - } - } - } - if (appHasRuntimePerms) { - mRuntimePermAppsCt++; - if (appGrantedRuntimePerms) { - mRuntimePermAppsGrantedCt++; - } - } - } - } - Collections.sort(mGroups); - - return null; - } - - @Override - protected void onPostExecute(Void result) { - mCallback.onPermissionLoadComplete(); - } - } - - public static class PermissionGroup implements Comparable { - public final List possibleApps = new ArrayList<>(); - public final List grantedApps = new ArrayList<>(); - public String name; - public String packageName; - public String label; - public Drawable icon; - - @Override - public int compareTo(PermissionGroup another) { - return label.compareTo(another.label); - } - } - - public interface Callback { - void onPermissionLoadComplete(); - } - -} -- 2.11.0