Update service map when application info is updated
Bug: 77271275
Test: PoC app from b/77271275#3 on user 0 and 10
Change-Id: I78dec7e4b0649928cca8275b84259cdd72fe3c97
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index b32ece7..0b37fdb 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -3592,6 +3592,21 @@
}
}
+ public void updateServiceApplicationInfoLocked(ApplicationInfo applicationInfo) {
+ final int userId = UserHandle.getUserId(applicationInfo.uid);
+ ServiceMap serviceMap = mServiceMap.get(userId);
+ if (serviceMap != null) {
+ ArrayMap<ComponentName, ServiceRecord> servicesByName = serviceMap.mServicesByName;
+ for (int j = servicesByName.size() - 1; j >= 0; j--) {
+ ServiceRecord serviceRecord = servicesByName.valueAt(j);
+ if (applicationInfo.packageName.equals(serviceRecord.appInfo.packageName)) {
+ serviceRecord.appInfo = applicationInfo;
+ serviceRecord.serviceInfo.applicationInfo = applicationInfo;
+ }
+ }
+ }
+ }
+
void serviceForegroundCrash(ProcessRecord app, CharSequence serviceRecord) {
mAm.crashApplication(app.uid, app.pid, app.info.packageName, app.userId,
"Context.startForegroundService() did not then call Service.startForeground(): "
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f83d9e6..78c663d 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -21455,6 +21455,7 @@
return ActivityManager.BROADCAST_SUCCESS;
}
mStackSupervisor.updateActivityApplicationInfoLocked(aInfo);
+ mServices.updateServiceApplicationInfoLocked(aInfo);
sendPackageBroadcastLocked(ApplicationThreadConstants.PACKAGE_REPLACED,
new String[] {ssp}, userId);
}
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index 32887e4..4d89d015 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -73,7 +73,7 @@
// original intent used to find service.
final ServiceInfo serviceInfo;
// all information about the service.
- final ApplicationInfo appInfo;
+ ApplicationInfo appInfo;
// information about service's app.
final int userId; // user that this service is running as
final String packageName; // the package implementing intent's component