Loading core/java/android/app/ActivityThread.java +1 −2 Original line number Diff line number Diff line Loading @@ -6681,8 +6681,7 @@ public final class ActivityThread extends ClientTransactionHandler { private InstrumentationInfo prepareInstrumentation(AppBindData data) { final InstrumentationInfo ii; try { ii = new ApplicationPackageManager( null, getPackageManager(), getPermissionManager()) ii = new ApplicationPackageManager(null, getPackageManager()) .getInstrumentationInfo(data.instrumentationName, 0); } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( Loading core/java/android/app/ApplicationPackageManager.java +48 −236 Original line number Diff line number Diff line Loading @@ -59,8 +59,6 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.Property; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; Loading Loading @@ -95,8 +93,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.permission.IOnPermissionsChangeListener; import android.permission.IPermissionManager; import android.permission.PermissionManager; import android.provider.Settings; import android.system.ErrnoException; Loading @@ -106,7 +102,6 @@ import android.system.StructStat; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.DebugUtils; import android.util.LauncherIcons; import android.util.Log; Loading @@ -129,7 +124,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; Loading @@ -137,14 +131,6 @@ import java.util.Set; public class ApplicationPackageManager extends PackageManager { private static final String TAG = "ApplicationPackageManager"; private static final boolean DEBUG_ICONS = false; /** * Note: Changing this won't do anything on it's own - you should also change the filtering in * {@link #shouldTraceGrant} * * @hide */ public static final boolean DEBUG_TRACE_GRANTS = false; public static final boolean DEBUG_TRACE_PERMISSION_UPDATES = false; private static final int DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES = 16384; // 16KB Loading @@ -171,6 +157,8 @@ public class ApplicationPackageManager extends PackageManager { @GuardedBy("mLock") private UserManager mUserManager; @GuardedBy("mLock") private PermissionManager mPermissionManager; @GuardedBy("mLock") private PackageInstaller mInstaller; @GuardedBy("mLock") private ArtManager mArtManager; Loading @@ -190,6 +178,15 @@ public class ApplicationPackageManager extends PackageManager { } } private PermissionManager getPermissionManager() { synchronized (mLock) { if (mPermissionManager == null) { mPermissionManager = mContext.getSystemService(PermissionManager.class); } return mPermissionManager; } } @Override public int getUserId() { return mContext.getUserId(); Loading Loading @@ -355,67 +352,42 @@ public class ApplicationPackageManager extends PackageManager { @Override @SuppressWarnings("unchecked") public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { try { final ParceledListSlice<PermissionGroupInfo> parceledList = mPermissionManager.getAllPermissionGroups(flags); if (parceledList == null) { return Collections.emptyList(); } return parceledList.getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getAllPermissionGroups(flags); } @Override public PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags) throws NameNotFoundException { try { final PermissionGroupInfo pgi = mPermissionManager.getPermissionGroupInfo(groupName, flags); if (pgi != null) { return pgi; } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final PermissionGroupInfo permissionGroupInfo = getPermissionManager() .getPermissionGroupInfo(groupName, flags); if (permissionGroupInfo == null) { throw new NameNotFoundException(groupName); } return permissionGroupInfo; } @Override public PermissionInfo getPermissionInfo(String permName, int flags) throws NameNotFoundException { try { final String packageName = mContext.getOpPackageName(); final PermissionInfo pi = mPermissionManager.getPermissionInfo(permName, packageName, flags); if (pi != null) { return pi; } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final PermissionInfo permissionInfo = getPermissionManager().getPermissionInfo(permName, flags); if (permissionInfo == null) { throw new NameNotFoundException(permName); } return permissionInfo; } @Override @SuppressWarnings("unchecked") public List<PermissionInfo> queryPermissionsByGroup(String groupName, int flags) throws NameNotFoundException { try { final ParceledListSlice<PermissionInfo> parceledList = mPermissionManager.queryPermissionsByGroup(groupName, flags); if (parceledList != null) { final List<PermissionInfo> pi = parceledList.getList(); if (pi != null) { return pi; } } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final List<PermissionInfo> permissionInfos = getPermissionManager().queryPermissionsByGroup( groupName, flags); if (permissionInfos == null) { throw new NameNotFoundException(groupName); } return permissionInfos; } @Override public boolean arePermissionsIndividuallyControlled() { Loading Loading @@ -724,11 +696,7 @@ public class ApplicationPackageManager extends PackageManager { @Override public boolean isPermissionRevokedByPolicy(String permName, String pkgName) { try { return mPermissionManager.isPermissionRevokedByPolicy(permName, pkgName, getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().isPermissionRevokedByPolicy(pkgName, permName); } /** Loading @@ -750,50 +718,23 @@ public class ApplicationPackageManager extends PackageManager { @Override public boolean addPermission(PermissionInfo info) { try { return mPermissionManager.addPermission(info, false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addPermission(info, false); } @Override public boolean addPermissionAsync(PermissionInfo info) { try { return mPermissionManager.addPermission(info, true); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addPermission(info, true); } @Override public void removePermission(String name) { try { mPermissionManager.removePermission(name); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().removePermission(name); } @Override public void grantRuntimePermission(String packageName, String permissionName, UserHandle user) { if (DEBUG_TRACE_GRANTS && shouldTraceGrant(packageName, permissionName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is granting " + packageName + " " + permissionName + " for user " + user.getIdentifier(), new RuntimeException()); } try { mPM.grantRuntimePermission(packageName, permissionName, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** @hide */ public static boolean shouldTraceGrant(String packageName, String permissionName, int userId) { // To be modified when debugging return false; getPermissionManager().grantRuntimePermission(packageName, permissionName, user); } @Override Loading @@ -804,124 +745,55 @@ public class ApplicationPackageManager extends PackageManager { @Override public void revokeRuntimePermission(String packageName, String permName, UserHandle user, String reason) { if (DEBUG_TRACE_PERMISSION_UPDATES && shouldTraceGrant(packageName, permName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is revoking " + packageName + " " + permName + " for user " + user.getIdentifier() + " with reason " + reason, new RuntimeException()); } try { mPermissionManager .revokeRuntimePermission(packageName, permName, user.getIdentifier(), reason); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().revokeRuntimePermission(packageName, permName, user, reason); } @Override public int getPermissionFlags(String permName, String packageName, UserHandle user) { try { return mPermissionManager .getPermissionFlags(permName, packageName, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getPermissionFlags(packageName, permName, user); } @Override public void updatePermissionFlags(String permName, String packageName, int flagMask, int flagValues, UserHandle user) { if (DEBUG_TRACE_PERMISSION_UPDATES && shouldTraceGrant(packageName, permName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is updating flags for " + packageName + " " + permName + " for user " + user.getIdentifier() + ": " + DebugUtils.flagsToString(PackageManager.class, "FLAG_PERMISSION_", flagMask) + " := " + DebugUtils.flagsToString( PackageManager.class, "FLAG_PERMISSION_", flagValues), new RuntimeException()); } try { final boolean checkAdjustPolicyFlagPermission = mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q; mPermissionManager.updatePermissionFlags(permName, packageName, flagMask, flagValues, checkAdjustPolicyFlagPermission, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().updatePermissionFlags(packageName, permName, flagMask, flagValues, user); } @Override public @NonNull Set<String> getWhitelistedRestrictedPermissions( @NonNull String packageName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); final List<String> whitelist = mPermissionManager .getWhitelistedRestrictedPermissions(packageName, flags, userId); if (whitelist != null) { return new ArraySet<>(whitelist); } return Collections.emptySet(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getAllowlistedRestrictedPermissions(packageName, flags); } @Override public boolean addWhitelistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); return mPermissionManager .addWhitelistedRestrictedPermission(packageName, permName, flags, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addAllowlistedRestrictedPermission(packageName, permName, flags); } @Override public boolean setAutoRevokeWhitelisted( @NonNull String packageName, boolean whitelisted) { try { final int userId = getUserId(); return mPermissionManager.setAutoRevokeWhitelisted(packageName, whitelisted, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } public boolean setAutoRevokeWhitelisted(@NonNull String packageName, boolean whitelisted) { return getPermissionManager().setAutoRevokeExempted(packageName, whitelisted); } @Override public boolean isAutoRevokeWhitelisted(@NonNull String packageName) { try { final int userId = getUserId(); return mPermissionManager.isAutoRevokeWhitelisted(packageName, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().isAutoRevokeExempted(packageName); } @Override public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); return mPermissionManager .removeWhitelistedRestrictedPermission(packageName, permName, flags, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().removeAllowlistedRestrictedPermission(packageName, permName, flags); } @Override @UnsupportedAppUsage public boolean shouldShowRequestPermissionRationale(String permName) { try { final String packageName = mContext.getPackageName(); return mPermissionManager .shouldShowRequestPermissionRationale(permName, packageName, getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().shouldShowRequestPermissionRationale(permName); } @Override Loading Loading @@ -1880,34 +1752,12 @@ public class ApplicationPackageManager extends PackageManager { @Override public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { if (mPermissionListeners.get(listener) != null) { return; } OnPermissionsChangeListenerDelegate delegate = new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper()); try { mPermissionManager.addOnPermissionsChangeListener(delegate); mPermissionListeners.put(listener, delegate); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getPermissionManager().addOnPermissionsChangeListener(listener); } @Override public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener); if (delegate != null) { try { mPermissionManager.removeOnPermissionsChangeListener(delegate); mPermissionListeners.remove(listener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } } getPermissionManager().removeOnPermissionsChangeListener(listener); } @UnsupportedAppUsage Loading @@ -1918,11 +1768,9 @@ public class ApplicationPackageManager extends PackageManager { } } protected ApplicationPackageManager(ContextImpl context, IPackageManager pm, IPermissionManager permissionManager) { protected ApplicationPackageManager(ContextImpl context, IPackageManager pm) { mContext = context; mPM = pm; mPermissionManager = permissionManager; } /** Loading Loading @@ -3234,7 +3082,6 @@ public class ApplicationPackageManager extends PackageManager { private final ContextImpl mContext; @UnsupportedAppUsage private final IPackageManager mPM; private final IPermissionManager mPermissionManager; /** Assume locked until we hear otherwise */ private volatile boolean mUserUnlocked = false; Loading @@ -3245,41 +3092,6 @@ public class ApplicationPackageManager extends PackageManager { private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); private final Map<OnPermissionsChangedListener, IOnPermissionsChangeListener> mPermissionListeners = new ArrayMap<>(); public class OnPermissionsChangeListenerDelegate extends IOnPermissionsChangeListener.Stub implements Handler.Callback{ private static final int MSG_PERMISSIONS_CHANGED = 1; private final OnPermissionsChangedListener mListener; private final Handler mHandler; public OnPermissionsChangeListenerDelegate(OnPermissionsChangedListener listener, Looper looper) { mListener = listener; mHandler = new Handler(looper, this); } @Override public void onPermissionsChanged(int uid) { mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_PERMISSIONS_CHANGED: { final int uid = msg.arg1; mListener.onPermissionsChanged(uid); return true; } } return false; } } @Override public boolean canRequestPackageInstalls() { try { Loading core/java/android/app/ContextImpl.java +2 −4 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.permission.IPermissionManager; import android.permission.PermissionManager; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -370,10 +369,9 @@ class ContextImpl extends Context { } final IPackageManager pm = ActivityThread.getPackageManager(); final IPermissionManager permissionManager = ActivityThread.getPermissionManager(); if (pm != null && permissionManager != null) { if (pm != null) { // Doesn't matter if we make more than one instance. return (mPackageManager = new ApplicationPackageManager(this, pm, permissionManager)); return (mPackageManager = new ApplicationPackageManager(this, pm)); } return null; Loading core/java/android/content/pm/PackageManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -4438,6 +4438,7 @@ public abstract class PackageManager { * @throws NameNotFoundException if a package with the given name cannot be * found on the system. */ //@Deprecated public abstract PermissionInfo getPermissionInfo(@NonNull String permName, @PermissionInfoFlags int flags) throws NameNotFoundException; Loading @@ -4450,9 +4451,10 @@ public abstract class PackageManager { * @param flags Additional option flags to modify the data returned. * @return Returns a list of {@link PermissionInfo} containing information * about all of the permissions in the given group. * @throws NameNotFoundException if a package with the given name cannot be * @throws NameNotFoundException if a group with the given name cannot be * found on the system. */ //@Deprecated @NonNull public abstract List<PermissionInfo> queryPermissionsByGroup(@NonNull String permissionGroup, @PermissionInfoFlags int flags) throws NameNotFoundException; Loading Loading @@ -4481,7 +4483,7 @@ public abstract class PackageManager { * Retrieve all of the information we know about a particular group of * permissions. * * @param permName The fully qualified name (i.e. * @param groupName The fully qualified name (i.e. * com.google.permission_group.APPS) of the permission you are * interested in. * @param flags Additional option flags to modify the data returned. Loading @@ -4490,8 +4492,9 @@ public abstract class PackageManager { * @throws NameNotFoundException if a package with the given name cannot be * found on the system. */ //@Deprecated @NonNull public abstract PermissionGroupInfo getPermissionGroupInfo(@NonNull String permName, public abstract PermissionGroupInfo getPermissionGroupInfo(@NonNull String groupName, @PermissionGroupInfoFlags int flags) throws NameNotFoundException; /** Loading @@ -4501,6 +4504,7 @@ public abstract class PackageManager { * @return Returns a list of {@link PermissionGroupInfo} containing * information about all of the known permission groups. */ //@Deprecated @NonNull public abstract List<PermissionGroupInfo> getAllPermissionGroups( @PermissionGroupInfoFlags int flags); Loading Loading @@ -4757,6 +4761,7 @@ public abstract class PackageManager { * @return Whether the permission is restricted by policy. */ @CheckResult //@Deprecated public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName, @NonNull String packageName); Loading Loading @@ -4805,6 +4810,7 @@ public abstract class PackageManager { * * @see #removePermission(String) */ //@Deprecated public abstract boolean addPermission(@NonNull PermissionInfo info); /** Loading @@ -4814,6 +4820,7 @@ public abstract class PackageManager { * expense of no guarantee the added permission will be retained if * the device is rebooted before it is written. */ //@Deprecated public abstract boolean addPermissionAsync(@NonNull PermissionInfo info); /** Loading @@ -4829,6 +4836,7 @@ public abstract class PackageManager { * * @see #addPermission(PermissionInfo) */ //@Deprecated public abstract void removePermission(@NonNull String permName); /** Loading Loading @@ -4881,6 +4889,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) Loading Loading @@ -4908,6 +4917,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) Loading Loading @@ -4936,6 +4946,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String packageName, Loading @@ -4953,6 +4964,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(anyOf = { Loading @@ -4976,6 +4988,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(anyOf = { Loading Loading @@ -5040,6 +5053,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to access a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public @NonNull Set<String> getWhitelistedRestrictedPermissions( Loading Loading @@ -5106,6 +5120,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to modify a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public boolean addWhitelistedRestrictedPermission(@NonNull String packageName, Loading Loading @@ -5175,6 +5190,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to modify a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName, Loading Loading @@ -5207,6 +5223,7 @@ public abstract class PackageManager { * * @throws SecurityException if you you have no access to modify this. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS, conditional = true) public boolean setAutoRevokeWhitelisted(@NonNull String packageName, boolean whitelisted) { Loading Loading @@ -5234,6 +5251,7 @@ public abstract class PackageManager { * * @throws SecurityException if you you have no access to this. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS, conditional = true) public boolean isAutoRevokeWhitelisted(@NonNull String packageName) { Loading @@ -5252,6 +5270,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @UnsupportedAppUsage public abstract boolean shouldShowRequestPermissionRationale(@NonNull String permName); Loading Loading @@ -7554,6 +7573,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) Loading @@ -7567,6 +7587,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) Loading core/java/android/permission/PermissionManager.java +706 −4 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/app/ActivityThread.java +1 −2 Original line number Diff line number Diff line Loading @@ -6681,8 +6681,7 @@ public final class ActivityThread extends ClientTransactionHandler { private InstrumentationInfo prepareInstrumentation(AppBindData data) { final InstrumentationInfo ii; try { ii = new ApplicationPackageManager( null, getPackageManager(), getPermissionManager()) ii = new ApplicationPackageManager(null, getPackageManager()) .getInstrumentationInfo(data.instrumentationName, 0); } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException( Loading
core/java/android/app/ApplicationPackageManager.java +48 −236 Original line number Diff line number Diff line Loading @@ -59,8 +59,6 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.Property; import android.content.pm.ParceledListSlice; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; Loading Loading @@ -95,8 +93,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.permission.IOnPermissionsChangeListener; import android.permission.IPermissionManager; import android.permission.PermissionManager; import android.provider.Settings; import android.system.ErrnoException; Loading @@ -106,7 +102,6 @@ import android.system.StructStat; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.DebugUtils; import android.util.LauncherIcons; import android.util.Log; Loading @@ -129,7 +124,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; Loading @@ -137,14 +131,6 @@ import java.util.Set; public class ApplicationPackageManager extends PackageManager { private static final String TAG = "ApplicationPackageManager"; private static final boolean DEBUG_ICONS = false; /** * Note: Changing this won't do anything on it's own - you should also change the filtering in * {@link #shouldTraceGrant} * * @hide */ public static final boolean DEBUG_TRACE_GRANTS = false; public static final boolean DEBUG_TRACE_PERMISSION_UPDATES = false; private static final int DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES = 16384; // 16KB Loading @@ -171,6 +157,8 @@ public class ApplicationPackageManager extends PackageManager { @GuardedBy("mLock") private UserManager mUserManager; @GuardedBy("mLock") private PermissionManager mPermissionManager; @GuardedBy("mLock") private PackageInstaller mInstaller; @GuardedBy("mLock") private ArtManager mArtManager; Loading @@ -190,6 +178,15 @@ public class ApplicationPackageManager extends PackageManager { } } private PermissionManager getPermissionManager() { synchronized (mLock) { if (mPermissionManager == null) { mPermissionManager = mContext.getSystemService(PermissionManager.class); } return mPermissionManager; } } @Override public int getUserId() { return mContext.getUserId(); Loading Loading @@ -355,67 +352,42 @@ public class ApplicationPackageManager extends PackageManager { @Override @SuppressWarnings("unchecked") public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { try { final ParceledListSlice<PermissionGroupInfo> parceledList = mPermissionManager.getAllPermissionGroups(flags); if (parceledList == null) { return Collections.emptyList(); } return parceledList.getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getAllPermissionGroups(flags); } @Override public PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags) throws NameNotFoundException { try { final PermissionGroupInfo pgi = mPermissionManager.getPermissionGroupInfo(groupName, flags); if (pgi != null) { return pgi; } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final PermissionGroupInfo permissionGroupInfo = getPermissionManager() .getPermissionGroupInfo(groupName, flags); if (permissionGroupInfo == null) { throw new NameNotFoundException(groupName); } return permissionGroupInfo; } @Override public PermissionInfo getPermissionInfo(String permName, int flags) throws NameNotFoundException { try { final String packageName = mContext.getOpPackageName(); final PermissionInfo pi = mPermissionManager.getPermissionInfo(permName, packageName, flags); if (pi != null) { return pi; } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final PermissionInfo permissionInfo = getPermissionManager().getPermissionInfo(permName, flags); if (permissionInfo == null) { throw new NameNotFoundException(permName); } return permissionInfo; } @Override @SuppressWarnings("unchecked") public List<PermissionInfo> queryPermissionsByGroup(String groupName, int flags) throws NameNotFoundException { try { final ParceledListSlice<PermissionInfo> parceledList = mPermissionManager.queryPermissionsByGroup(groupName, flags); if (parceledList != null) { final List<PermissionInfo> pi = parceledList.getList(); if (pi != null) { return pi; } } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } final List<PermissionInfo> permissionInfos = getPermissionManager().queryPermissionsByGroup( groupName, flags); if (permissionInfos == null) { throw new NameNotFoundException(groupName); } return permissionInfos; } @Override public boolean arePermissionsIndividuallyControlled() { Loading Loading @@ -724,11 +696,7 @@ public class ApplicationPackageManager extends PackageManager { @Override public boolean isPermissionRevokedByPolicy(String permName, String pkgName) { try { return mPermissionManager.isPermissionRevokedByPolicy(permName, pkgName, getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().isPermissionRevokedByPolicy(pkgName, permName); } /** Loading @@ -750,50 +718,23 @@ public class ApplicationPackageManager extends PackageManager { @Override public boolean addPermission(PermissionInfo info) { try { return mPermissionManager.addPermission(info, false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addPermission(info, false); } @Override public boolean addPermissionAsync(PermissionInfo info) { try { return mPermissionManager.addPermission(info, true); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addPermission(info, true); } @Override public void removePermission(String name) { try { mPermissionManager.removePermission(name); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().removePermission(name); } @Override public void grantRuntimePermission(String packageName, String permissionName, UserHandle user) { if (DEBUG_TRACE_GRANTS && shouldTraceGrant(packageName, permissionName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is granting " + packageName + " " + permissionName + " for user " + user.getIdentifier(), new RuntimeException()); } try { mPM.grantRuntimePermission(packageName, permissionName, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** @hide */ public static boolean shouldTraceGrant(String packageName, String permissionName, int userId) { // To be modified when debugging return false; getPermissionManager().grantRuntimePermission(packageName, permissionName, user); } @Override Loading @@ -804,124 +745,55 @@ public class ApplicationPackageManager extends PackageManager { @Override public void revokeRuntimePermission(String packageName, String permName, UserHandle user, String reason) { if (DEBUG_TRACE_PERMISSION_UPDATES && shouldTraceGrant(packageName, permName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is revoking " + packageName + " " + permName + " for user " + user.getIdentifier() + " with reason " + reason, new RuntimeException()); } try { mPermissionManager .revokeRuntimePermission(packageName, permName, user.getIdentifier(), reason); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().revokeRuntimePermission(packageName, permName, user, reason); } @Override public int getPermissionFlags(String permName, String packageName, UserHandle user) { try { return mPermissionManager .getPermissionFlags(permName, packageName, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getPermissionFlags(packageName, permName, user); } @Override public void updatePermissionFlags(String permName, String packageName, int flagMask, int flagValues, UserHandle user) { if (DEBUG_TRACE_PERMISSION_UPDATES && shouldTraceGrant(packageName, permName, user.getIdentifier())) { Log.i(TAG, "App " + mContext.getPackageName() + " is updating flags for " + packageName + " " + permName + " for user " + user.getIdentifier() + ": " + DebugUtils.flagsToString(PackageManager.class, "FLAG_PERMISSION_", flagMask) + " := " + DebugUtils.flagsToString( PackageManager.class, "FLAG_PERMISSION_", flagValues), new RuntimeException()); } try { final boolean checkAdjustPolicyFlagPermission = mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q; mPermissionManager.updatePermissionFlags(permName, packageName, flagMask, flagValues, checkAdjustPolicyFlagPermission, user.getIdentifier()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } getPermissionManager().updatePermissionFlags(packageName, permName, flagMask, flagValues, user); } @Override public @NonNull Set<String> getWhitelistedRestrictedPermissions( @NonNull String packageName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); final List<String> whitelist = mPermissionManager .getWhitelistedRestrictedPermissions(packageName, flags, userId); if (whitelist != null) { return new ArraySet<>(whitelist); } return Collections.emptySet(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().getAllowlistedRestrictedPermissions(packageName, flags); } @Override public boolean addWhitelistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); return mPermissionManager .addWhitelistedRestrictedPermission(packageName, permName, flags, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().addAllowlistedRestrictedPermission(packageName, permName, flags); } @Override public boolean setAutoRevokeWhitelisted( @NonNull String packageName, boolean whitelisted) { try { final int userId = getUserId(); return mPermissionManager.setAutoRevokeWhitelisted(packageName, whitelisted, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } public boolean setAutoRevokeWhitelisted(@NonNull String packageName, boolean whitelisted) { return getPermissionManager().setAutoRevokeExempted(packageName, whitelisted); } @Override public boolean isAutoRevokeWhitelisted(@NonNull String packageName) { try { final int userId = getUserId(); return mPermissionManager.isAutoRevokeWhitelisted(packageName, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().isAutoRevokeExempted(packageName); } @Override public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName, @NonNull String permName, @PermissionWhitelistFlags int flags) { try { final int userId = getUserId(); return mPermissionManager .removeWhitelistedRestrictedPermission(packageName, permName, flags, userId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().removeAllowlistedRestrictedPermission(packageName, permName, flags); } @Override @UnsupportedAppUsage public boolean shouldShowRequestPermissionRationale(String permName) { try { final String packageName = mContext.getPackageName(); return mPermissionManager .shouldShowRequestPermissionRationale(permName, packageName, getUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } return getPermissionManager().shouldShowRequestPermissionRationale(permName); } @Override Loading Loading @@ -1880,34 +1752,12 @@ public class ApplicationPackageManager extends PackageManager { @Override public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { if (mPermissionListeners.get(listener) != null) { return; } OnPermissionsChangeListenerDelegate delegate = new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper()); try { mPermissionManager.addOnPermissionsChangeListener(delegate); mPermissionListeners.put(listener, delegate); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } getPermissionManager().addOnPermissionsChangeListener(listener); } @Override public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) { synchronized (mPermissionListeners) { IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener); if (delegate != null) { try { mPermissionManager.removeOnPermissionsChangeListener(delegate); mPermissionListeners.remove(listener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } } getPermissionManager().removeOnPermissionsChangeListener(listener); } @UnsupportedAppUsage Loading @@ -1918,11 +1768,9 @@ public class ApplicationPackageManager extends PackageManager { } } protected ApplicationPackageManager(ContextImpl context, IPackageManager pm, IPermissionManager permissionManager) { protected ApplicationPackageManager(ContextImpl context, IPackageManager pm) { mContext = context; mPM = pm; mPermissionManager = permissionManager; } /** Loading Loading @@ -3234,7 +3082,6 @@ public class ApplicationPackageManager extends PackageManager { private final ContextImpl mContext; @UnsupportedAppUsage private final IPackageManager mPM; private final IPermissionManager mPermissionManager; /** Assume locked until we hear otherwise */ private volatile boolean mUserUnlocked = false; Loading @@ -3245,41 +3092,6 @@ public class ApplicationPackageManager extends PackageManager { private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); private final Map<OnPermissionsChangedListener, IOnPermissionsChangeListener> mPermissionListeners = new ArrayMap<>(); public class OnPermissionsChangeListenerDelegate extends IOnPermissionsChangeListener.Stub implements Handler.Callback{ private static final int MSG_PERMISSIONS_CHANGED = 1; private final OnPermissionsChangedListener mListener; private final Handler mHandler; public OnPermissionsChangeListenerDelegate(OnPermissionsChangedListener listener, Looper looper) { mListener = listener; mHandler = new Handler(looper, this); } @Override public void onPermissionsChanged(int uid) { mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_PERMISSIONS_CHANGED: { final int uid = msg.arg1; mListener.onPermissionsChanged(uid); return true; } } return false; } } @Override public boolean canRequestPackageInstalls() { try { Loading
core/java/android/app/ContextImpl.java +2 −4 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.permission.IPermissionManager; import android.permission.PermissionManager; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -370,10 +369,9 @@ class ContextImpl extends Context { } final IPackageManager pm = ActivityThread.getPackageManager(); final IPermissionManager permissionManager = ActivityThread.getPermissionManager(); if (pm != null && permissionManager != null) { if (pm != null) { // Doesn't matter if we make more than one instance. return (mPackageManager = new ApplicationPackageManager(this, pm, permissionManager)); return (mPackageManager = new ApplicationPackageManager(this, pm)); } return null; Loading
core/java/android/content/pm/PackageManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -4438,6 +4438,7 @@ public abstract class PackageManager { * @throws NameNotFoundException if a package with the given name cannot be * found on the system. */ //@Deprecated public abstract PermissionInfo getPermissionInfo(@NonNull String permName, @PermissionInfoFlags int flags) throws NameNotFoundException; Loading @@ -4450,9 +4451,10 @@ public abstract class PackageManager { * @param flags Additional option flags to modify the data returned. * @return Returns a list of {@link PermissionInfo} containing information * about all of the permissions in the given group. * @throws NameNotFoundException if a package with the given name cannot be * @throws NameNotFoundException if a group with the given name cannot be * found on the system. */ //@Deprecated @NonNull public abstract List<PermissionInfo> queryPermissionsByGroup(@NonNull String permissionGroup, @PermissionInfoFlags int flags) throws NameNotFoundException; Loading Loading @@ -4481,7 +4483,7 @@ public abstract class PackageManager { * Retrieve all of the information we know about a particular group of * permissions. * * @param permName The fully qualified name (i.e. * @param groupName The fully qualified name (i.e. * com.google.permission_group.APPS) of the permission you are * interested in. * @param flags Additional option flags to modify the data returned. Loading @@ -4490,8 +4492,9 @@ public abstract class PackageManager { * @throws NameNotFoundException if a package with the given name cannot be * found on the system. */ //@Deprecated @NonNull public abstract PermissionGroupInfo getPermissionGroupInfo(@NonNull String permName, public abstract PermissionGroupInfo getPermissionGroupInfo(@NonNull String groupName, @PermissionGroupInfoFlags int flags) throws NameNotFoundException; /** Loading @@ -4501,6 +4504,7 @@ public abstract class PackageManager { * @return Returns a list of {@link PermissionGroupInfo} containing * information about all of the known permission groups. */ //@Deprecated @NonNull public abstract List<PermissionGroupInfo> getAllPermissionGroups( @PermissionGroupInfoFlags int flags); Loading Loading @@ -4757,6 +4761,7 @@ public abstract class PackageManager { * @return Whether the permission is restricted by policy. */ @CheckResult //@Deprecated public abstract boolean isPermissionRevokedByPolicy(@NonNull String permName, @NonNull String packageName); Loading Loading @@ -4805,6 +4810,7 @@ public abstract class PackageManager { * * @see #removePermission(String) */ //@Deprecated public abstract boolean addPermission(@NonNull PermissionInfo info); /** Loading @@ -4814,6 +4820,7 @@ public abstract class PackageManager { * expense of no guarantee the added permission will be retained if * the device is rebooted before it is written. */ //@Deprecated public abstract boolean addPermissionAsync(@NonNull PermissionInfo info); /** Loading @@ -4829,6 +4836,7 @@ public abstract class PackageManager { * * @see #addPermission(PermissionInfo) */ //@Deprecated public abstract void removePermission(@NonNull String permName); /** Loading Loading @@ -4881,6 +4889,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) Loading Loading @@ -4908,6 +4917,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) Loading Loading @@ -4936,6 +4946,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SystemApi @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String packageName, Loading @@ -4953,6 +4964,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(anyOf = { Loading @@ -4976,6 +4988,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(anyOf = { Loading Loading @@ -5040,6 +5053,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to access a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public @NonNull Set<String> getWhitelistedRestrictedPermissions( Loading Loading @@ -5106,6 +5120,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to modify a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public boolean addWhitelistedRestrictedPermission(@NonNull String packageName, Loading Loading @@ -5175,6 +5190,7 @@ public abstract class PackageManager { * * @throws SecurityException if you try to modify a whitelist that you have no access to. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS, conditional = true) public boolean removeWhitelistedRestrictedPermission(@NonNull String packageName, Loading Loading @@ -5207,6 +5223,7 @@ public abstract class PackageManager { * * @throws SecurityException if you you have no access to modify this. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS, conditional = true) public boolean setAutoRevokeWhitelisted(@NonNull String packageName, boolean whitelisted) { Loading Loading @@ -5234,6 +5251,7 @@ public abstract class PackageManager { * * @throws SecurityException if you you have no access to this. */ //@Deprecated @RequiresPermission(value = Manifest.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS, conditional = true) public boolean isAutoRevokeWhitelisted(@NonNull String packageName) { Loading @@ -5252,6 +5270,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @UnsupportedAppUsage public abstract boolean shouldShowRequestPermissionRationale(@NonNull String permName); Loading Loading @@ -7554,6 +7573,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) Loading @@ -7567,6 +7587,7 @@ public abstract class PackageManager { * * @hide */ //@Deprecated @SuppressWarnings("HiddenAbstractMethod") @SystemApi @RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS) Loading
core/java/android/permission/PermissionManager.java +706 −4 File changed.Preview size limit exceeded, changes collapsed. Show changes