Fix a lot of OVERLAY_CHANGED broadcasts
A regression was introduced during refactoring where replacing with PackageStateMutation. This caused a lot of OVERLAY_CHANGED sent while switching to Owner user from Secondary user. This CL modifies the logic to check if OverlayPaths can be updated like Android S. Bug: 245485968 Test: manually verified that OVERLAY_CHANGED not sent as expected. Merged-In: I247aa6d2abce28eebe60e622dbffad12d1c9540c Change-Id: I247aa6d2abce28eebe60e622dbffad12d1c9540c
This commit is contained in:
committed by
Winson Chiu
parent
9fa7296648
commit
4b5b23c3fd
@@ -6546,7 +6546,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
if (dependentState == null) {
|
||||
continue;
|
||||
}
|
||||
if (!Objects.equals(dependentState.getUserStateOrDefault(userId)
|
||||
if (canSetOverlayPaths(dependentState.getUserStateOrDefault(userId)
|
||||
.getSharedLibraryOverlayPaths()
|
||||
.get(libName), newOverlayPaths)) {
|
||||
String dependentPackageName = dependent.getPackageName();
|
||||
@@ -6562,7 +6562,10 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
}
|
||||
}
|
||||
|
||||
outUpdatedPackageNames.add(targetPackageName);
|
||||
if (canSetOverlayPaths(packageState.getUserStateOrDefault(userId).getOverlayPaths(),
|
||||
newOverlayPaths)) {
|
||||
outUpdatedPackageNames.add(targetPackageName);
|
||||
}
|
||||
|
||||
commitPackageStateMutation(null, mutator -> {
|
||||
mutator.forPackage(targetPackageName)
|
||||
@@ -6593,6 +6596,17 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean canSetOverlayPaths(OverlayPaths origPaths, OverlayPaths newPaths) {
|
||||
if (Objects.equals(origPaths, newPaths)) {
|
||||
return false;
|
||||
}
|
||||
if ((origPaths == null && newPaths.isEmpty())
|
||||
|| (newPaths == null && origPaths.isEmpty())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void maybeUpdateSystemOverlays(String targetPackageName, OverlayPaths newOverlayPaths) {
|
||||
if (!mResolverReplaced) {
|
||||
if (targetPackageName.equals("android")) {
|
||||
|
||||
Reference in New Issue
Block a user