Refine getPackageInfo for Apex match policy
The legacy match policy could confuse, for example,
the naming of MATCH_APEX do not named with "ONLY|FACTORY|ACTIVE",
it's make sense to joint both active and factory apexes.
Policy refined:
1. MATCH_FACTORY_ONLY : Return *factory* [eg. the version on the system image] APK packages only
2. MATCH_APEX : Return *active* APK or APEX packages
3. MATCH_FACTORY_ONLY | MATCH_APEX : Return *factory* APK or APEX packages
4. NONE (0) : Return *active* APK packages only
Fixes: 142365486
Bug: 142115351
Test: adb shell pm path $APEX_PKG_NAME
Test: adb shell pm path $APK_PKG_NAME
Test: adb shell pm list packages --apex-only
Test: atest ApexManagerTest
Test: atest CtsStagedInstallHostTestCases
Change-Id: Ifa01278201dd23672dfc1a30f67b888df9bc1bfd
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java
index dc00cb4..db267e5 100644
--- a/services/core/java/com/android/server/pm/ApexManager.java
+++ b/services/core/java/com/android/server/pm/ApexManager.java
@@ -335,8 +335,8 @@
if (!packageInfo.packageName.equals(packageName)) {
continue;
}
- if ((!matchActive || isActive(packageInfo))
- && (!matchFactory || isFactory(packageInfo))) {
+ if ((matchActive && isActive(packageInfo))
+ || (matchFactory && isFactory(packageInfo))) {
return packageInfo;
}
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index ca577ee..63e68fc 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4207,7 +4207,7 @@
}
return generatePackageInfo(ps, flags, userId);
}
- if (!matchFactoryOnly && (flags & MATCH_APEX) != 0) {
+ if ((flags & MATCH_APEX) != 0) {
return mApexManager.getPackageInfo(packageName, ApexManager.MATCH_ACTIVE_PACKAGE);
}
}