From 4a352431a88e508681d27968bc045c8e4e5f5ee3 Mon Sep 17 00:00:00 2001 From: Bill Lin Date: Wed, 9 Oct 2019 16:22:25 +0800 Subject: [PATCH] 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 --- services/core/java/com/android/server/pm/ApexManager.java | 4 ++-- .../java/com/android/server/pm/PackageManagerService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index dc00cb45596c8..db267e5a90cdc 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 @@ abstract class ApexManager { 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 ca577ee3c0a23..63e68fcb72fb3 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 @@ public class PackageManagerService extends IPackageManager.Stub } return generatePackageInfo(ps, flags, userId); } - if (!matchFactoryOnly && (flags & MATCH_APEX) != 0) { + if ((flags & MATCH_APEX) != 0) { return mApexManager.getPackageInfo(packageName, ApexManager.MATCH_ACTIVE_PACKAGE); } }