Loading services/core/java/com/android/server/pm/AppsFilter.java +22 −19 Original line number Diff line number Diff line Loading @@ -588,9 +588,12 @@ public class AppsFilter implements Watchable, Snappable { * * @param recipientUid the uid gaining visibility of the {@code visibleUid}. * @param visibleUid the uid becoming visible to the {@recipientUid} * @return {@code true} if implicit access was not already granted. */ public void grantImplicitAccess(int recipientUid, int visibleUid) { if (recipientUid != visibleUid) { public boolean grantImplicitAccess(int recipientUid, int visibleUid) { if (recipientUid == visibleUid) { return false; } final boolean changed = mImplicitlyQueryable.add(recipientUid, visibleUid); if (changed && DEBUG_LOGGING) { Slog.i(TAG, "implicit access granted: " + recipientUid + " -> " + visibleUid); Loading @@ -610,7 +613,7 @@ public class AppsFilter implements Watchable, Snappable { if (changed) { onChanged(); } } return changed; } public void onSystemReady() { Loading services/core/java/com/android/server/pm/InstantAppRegistry.java +17 −5 Original line number Diff line number Diff line Loading @@ -470,23 +470,34 @@ class InstantAppRegistry implements Watchable, Snappable { return instantGrantList.get(instantAppId); } /** * Allows an app to see an instant app. * * @param userId the userId in which this access is being granted * @param intent when provided, this serves as the intent that caused * this access to be granted * @param recipientUid the uid of the app receiving visibility * @param instantAppId the app ID of the instant app being made visible * to the recipient * @return {@code true} if access is granted. */ @GuardedBy("mService.mLock") public void grantInstantAccessLPw(@UserIdInt int userId, @Nullable Intent intent, public boolean grantInstantAccessLPw(@UserIdInt int userId, @Nullable Intent intent, int recipientUid, int instantAppId) { if (mInstalledInstantAppUids == null) { return; // no instant apps installed; no need to grant return false; // no instant apps installed; no need to grant } WatchedSparseBooleanArray instantAppList = mInstalledInstantAppUids.get(userId); if (instantAppList == null || !instantAppList.get(instantAppId)) { return; // instant app id isn't installed; no need to grant return false; // instant app id isn't installed; no need to grant } if (instantAppList.get(recipientUid)) { return; // target app id is an instant app; no need to grant return false; // target app id is an instant app; no need to grant } if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) { final Set<String> categories = intent.getCategories(); if (categories != null && categories.contains(Intent.CATEGORY_BROWSABLE)) { return; // launched via VIEW/BROWSABLE intent; no need to grant return false; // launched via VIEW/BROWSABLE intent; no need to grant } } WatchedSparseArray<WatchedSparseBooleanArray> targetAppList = mInstantGrants.get(userId); Loading @@ -500,6 +511,7 @@ class InstantAppRegistry implements Watchable, Snappable { targetAppList.put(recipientUid, instantGrantList); } instantGrantList.put(instantAppId, true /*granted*/); return true; } @GuardedBy("mService.mLock") Loading services/core/java/com/android/server/pm/PackageManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -27188,6 +27188,7 @@ public class PackageManagerService extends IPackageManager.Stub final boolean instantApp = isInstantAppInternal(visiblePackage.getPackageName(), userId, visibleUid); final boolean accessGranted; if (instantApp) { if (!direct) { // if the interaction that lead to this granting access to an instant app Loading @@ -27195,10 +27196,13 @@ public class PackageManagerService extends IPackageManager.Stub // grant. return; } mInstantAppRegistry.grantInstantAccessLPw(userId, intent, accessGranted = mInstantAppRegistry.grantInstantAccessLPw(userId, intent, recipientAppId, UserHandle.getAppId(visibleUid) /*instantAppId*/); } else { mAppsFilter.grantImplicitAccess(recipientUid, visibleUid); accessGranted = mAppsFilter.grantImplicitAccess(recipientUid, visibleUid); } if (accessGranted) { ApplicationPackageManager.invalidateGetPackagesForUidCache(); } } } Loading
services/core/java/com/android/server/pm/AppsFilter.java +22 −19 Original line number Diff line number Diff line Loading @@ -588,9 +588,12 @@ public class AppsFilter implements Watchable, Snappable { * * @param recipientUid the uid gaining visibility of the {@code visibleUid}. * @param visibleUid the uid becoming visible to the {@recipientUid} * @return {@code true} if implicit access was not already granted. */ public void grantImplicitAccess(int recipientUid, int visibleUid) { if (recipientUid != visibleUid) { public boolean grantImplicitAccess(int recipientUid, int visibleUid) { if (recipientUid == visibleUid) { return false; } final boolean changed = mImplicitlyQueryable.add(recipientUid, visibleUid); if (changed && DEBUG_LOGGING) { Slog.i(TAG, "implicit access granted: " + recipientUid + " -> " + visibleUid); Loading @@ -610,7 +613,7 @@ public class AppsFilter implements Watchable, Snappable { if (changed) { onChanged(); } } return changed; } public void onSystemReady() { Loading
services/core/java/com/android/server/pm/InstantAppRegistry.java +17 −5 Original line number Diff line number Diff line Loading @@ -470,23 +470,34 @@ class InstantAppRegistry implements Watchable, Snappable { return instantGrantList.get(instantAppId); } /** * Allows an app to see an instant app. * * @param userId the userId in which this access is being granted * @param intent when provided, this serves as the intent that caused * this access to be granted * @param recipientUid the uid of the app receiving visibility * @param instantAppId the app ID of the instant app being made visible * to the recipient * @return {@code true} if access is granted. */ @GuardedBy("mService.mLock") public void grantInstantAccessLPw(@UserIdInt int userId, @Nullable Intent intent, public boolean grantInstantAccessLPw(@UserIdInt int userId, @Nullable Intent intent, int recipientUid, int instantAppId) { if (mInstalledInstantAppUids == null) { return; // no instant apps installed; no need to grant return false; // no instant apps installed; no need to grant } WatchedSparseBooleanArray instantAppList = mInstalledInstantAppUids.get(userId); if (instantAppList == null || !instantAppList.get(instantAppId)) { return; // instant app id isn't installed; no need to grant return false; // instant app id isn't installed; no need to grant } if (instantAppList.get(recipientUid)) { return; // target app id is an instant app; no need to grant return false; // target app id is an instant app; no need to grant } if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) { final Set<String> categories = intent.getCategories(); if (categories != null && categories.contains(Intent.CATEGORY_BROWSABLE)) { return; // launched via VIEW/BROWSABLE intent; no need to grant return false; // launched via VIEW/BROWSABLE intent; no need to grant } } WatchedSparseArray<WatchedSparseBooleanArray> targetAppList = mInstantGrants.get(userId); Loading @@ -500,6 +511,7 @@ class InstantAppRegistry implements Watchable, Snappable { targetAppList.put(recipientUid, instantGrantList); } instantGrantList.put(instantAppId, true /*granted*/); return true; } @GuardedBy("mService.mLock") Loading
services/core/java/com/android/server/pm/PackageManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -27188,6 +27188,7 @@ public class PackageManagerService extends IPackageManager.Stub final boolean instantApp = isInstantAppInternal(visiblePackage.getPackageName(), userId, visibleUid); final boolean accessGranted; if (instantApp) { if (!direct) { // if the interaction that lead to this granting access to an instant app Loading @@ -27195,10 +27196,13 @@ public class PackageManagerService extends IPackageManager.Stub // grant. return; } mInstantAppRegistry.grantInstantAccessLPw(userId, intent, accessGranted = mInstantAppRegistry.grantInstantAccessLPw(userId, intent, recipientAppId, UserHandle.getAppId(visibleUid) /*instantAppId*/); } else { mAppsFilter.grantImplicitAccess(recipientUid, visibleUid); accessGranted = mAppsFilter.grantImplicitAccess(recipientUid, visibleUid); } if (accessGranted) { ApplicationPackageManager.invalidateGetPackagesForUidCache(); } } }