summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Harshit Mahajan <harshitmahajan@google.com> 2024-08-19 15:47:52 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-19 15:47:52 +0000
commitc9f170ca81d92dbb14ac8046c84959be374a31f2 (patch)
tree638314e5cd2375cd361f46fe6fd692e903709332
parent7b945edaea7a93773655045fcfcd7866966d912a (diff)
parent377e629c70211a2cbc38ea0a80b6b8bdd02a9a27 (diff)
Merge "Use public API to determine apk-in-apex" into main
-rw-r--r--services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java48
1 files changed, 36 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
index e084813b893c..e91097cbd8f8 100644
--- a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
+++ b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
@@ -16,6 +16,8 @@
package com.android.server.rollback;
+import static android.content.pm.Flags.provideInfoOfApkInApex;
+
import android.annotation.AnyThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -23,6 +25,7 @@ import android.annotation.WorkerThread;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
@@ -486,19 +489,40 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
*/
@AnyThread
private boolean isModule(String packageName) {
- // Check if the package is an APK inside an APEX. If it is, use the parent APEX package when
- // querying PackageManager.
- String apexPackageName = mApexManager.getActiveApexPackageNameContainingPackage(
- packageName);
- if (apexPackageName != null) {
- packageName = apexPackageName;
- }
-
PackageManager pm = mContext.getPackageManager();
- try {
- return pm.getModuleInfo(packageName, 0) != null;
- } catch (PackageManager.NameNotFoundException ignore) {
- return false;
+
+ if (Flags.refactorCrashrecovery() && provideInfoOfApkInApex()) {
+ // Check if the package is listed among the system modules.
+ boolean isApex = false;
+ try {
+ isApex = (pm.getModuleInfo(packageName, 0 /* flags */) != null);
+ } catch (PackageManager.NameNotFoundException e) {
+ //pass
+ }
+
+ // Check if the package is an APK inside an APEX.
+ boolean isApkInApex = false;
+ try {
+ final PackageInfo pkg = pm.getPackageInfo(packageName, 0 /* flags */);
+ isApkInApex = (pkg.getApexPackageName() != null);
+ } catch (PackageManager.NameNotFoundException e) {
+ // pass
+ }
+ return isApex || isApkInApex;
+ } else {
+ // Check if the package is an APK inside an APEX. If it is, use the parent APEX package
+ // when querying PackageManager.
+ String apexPackageName = mApexManager.getActiveApexPackageNameContainingPackage(
+ packageName);
+ if (apexPackageName != null) {
+ packageName = apexPackageName;
+ }
+
+ try {
+ return pm.getModuleInfo(packageName, 0) != null;
+ } catch (PackageManager.NameNotFoundException ignore) {
+ return false;
+ }
}
}