Merge "Invalidate cached result of getPackagesForUid" into sc-dev am: 8b77168f47
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13449182 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I30820f67e5f4716740ef23e687d341be13aaaa8f
This commit is contained in:
@@ -588,29 +588,32 @@ 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) {
|
||||
final boolean changed = mImplicitlyQueryable.add(recipientUid, visibleUid);
|
||||
if (changed && DEBUG_LOGGING) {
|
||||
Slog.i(TAG, "implicit access granted: " + recipientUid + " -> " + visibleUid);
|
||||
}
|
||||
synchronized (mCacheLock) {
|
||||
if (mShouldFilterCache != null) {
|
||||
// update the cache in a one-off manner since we've got all the information we
|
||||
// need.
|
||||
SparseBooleanArray visibleUids = mShouldFilterCache.get(recipientUid);
|
||||
if (visibleUids == null) {
|
||||
visibleUids = new SparseBooleanArray();
|
||||
mShouldFilterCache.put(recipientUid, visibleUids);
|
||||
}
|
||||
visibleUids.put(visibleUid, false);
|
||||
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);
|
||||
}
|
||||
synchronized (mCacheLock) {
|
||||
if (mShouldFilterCache != null) {
|
||||
// update the cache in a one-off manner since we've got all the information we
|
||||
// need.
|
||||
SparseBooleanArray visibleUids = mShouldFilterCache.get(recipientUid);
|
||||
if (visibleUids == null) {
|
||||
visibleUids = new SparseBooleanArray();
|
||||
mShouldFilterCache.put(recipientUid, visibleUids);
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
onChanged();
|
||||
visibleUids.put(visibleUid, false);
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
onChanged();
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
public void onSystemReady() {
|
||||
|
||||
@@ -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);
|
||||
@@ -500,6 +511,7 @@ class InstantAppRegistry implements Watchable, Snappable {
|
||||
targetAppList.put(recipientUid, instantGrantList);
|
||||
}
|
||||
instantGrantList.put(instantAppId, true /*granted*/);
|
||||
return true;
|
||||
}
|
||||
|
||||
@GuardedBy("mService.mLock")
|
||||
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user