Merge "Keep overlay info for the android app info up to date" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e0142a3d06
@@ -803,6 +803,13 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
private AndroidPackage mPlatformPackage;
|
||||
ComponentName mCustomResolverComponentName;
|
||||
|
||||
// Recorded overlay paths configuration for the Android app info.
|
||||
private String[] mPlatformPackageOverlayPaths = null;
|
||||
private String[] mPlatformPackageOverlayResourceDirs = null;
|
||||
// And the same paths for the replaced resolver activity package
|
||||
private String[] mReplacedResolverPackageOverlayPaths = null;
|
||||
private String[] mReplacedResolverPackageOverlayResourceDirs = null;
|
||||
|
||||
private boolean mResolverReplaced = false;
|
||||
|
||||
@NonNull
|
||||
@@ -6562,11 +6569,61 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
});
|
||||
}
|
||||
|
||||
if (userId == UserHandle.USER_SYSTEM) {
|
||||
// Keep the overlays in the system application info (and anything special cased as well)
|
||||
// up to date to make sure system ui is themed correctly.
|
||||
maybeUpdateSystemOverlays(targetPackageName, newOverlayPaths);
|
||||
}
|
||||
|
||||
invalidatePackageInfoCache();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void maybeUpdateSystemOverlays(String targetPackageName, OverlayPaths newOverlayPaths) {
|
||||
if (!mResolverReplaced) {
|
||||
if (targetPackageName.equals("android")) {
|
||||
if (newOverlayPaths == null) {
|
||||
mPlatformPackageOverlayPaths = null;
|
||||
mPlatformPackageOverlayResourceDirs = null;
|
||||
} else {
|
||||
mPlatformPackageOverlayPaths = newOverlayPaths.getOverlayPaths().toArray(
|
||||
new String[0]);
|
||||
mPlatformPackageOverlayResourceDirs = newOverlayPaths.getResourceDirs().toArray(
|
||||
new String[0]);
|
||||
}
|
||||
applyUpdatedSystemOverlayPaths();
|
||||
}
|
||||
} else {
|
||||
if (targetPackageName.equals(mResolveActivity.applicationInfo.packageName)) {
|
||||
if (newOverlayPaths == null) {
|
||||
mReplacedResolverPackageOverlayPaths = null;
|
||||
mReplacedResolverPackageOverlayResourceDirs = null;
|
||||
} else {
|
||||
mReplacedResolverPackageOverlayPaths =
|
||||
newOverlayPaths.getOverlayPaths().toArray(new String[0]);
|
||||
mReplacedResolverPackageOverlayResourceDirs =
|
||||
newOverlayPaths.getResourceDirs().toArray(new String[0]);
|
||||
}
|
||||
applyUpdatedSystemOverlayPaths();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void applyUpdatedSystemOverlayPaths() {
|
||||
if (mAndroidApplication == null) {
|
||||
Slog.i(TAG, "Skipped the AndroidApplication overlay paths update - no app yet");
|
||||
} else {
|
||||
mAndroidApplication.overlayPaths = mPlatformPackageOverlayPaths;
|
||||
mAndroidApplication.resourceDirs = mPlatformPackageOverlayResourceDirs;
|
||||
}
|
||||
if (mResolverReplaced) {
|
||||
mResolveActivity.applicationInfo.overlayPaths = mReplacedResolverPackageOverlayPaths;
|
||||
mResolveActivity.applicationInfo.resourceDirs =
|
||||
mReplacedResolverPackageOverlayResourceDirs;
|
||||
}
|
||||
}
|
||||
|
||||
private void enforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(
|
||||
@NonNull String message) {
|
||||
if (mContext.checkCallingOrSelfPermission(
|
||||
@@ -7043,6 +7100,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
||||
}
|
||||
PackageManagerService.onChanged();
|
||||
}
|
||||
applyUpdatedSystemOverlayPaths();
|
||||
}
|
||||
|
||||
ApplicationInfo getCoreAndroidApplication() {
|
||||
|
||||
Reference in New Issue
Block a user