From 10bb870d42d7bacf7670891bc4c0a501e6c88062 Mon Sep 17 00:00:00 2001 From: Winson Date: Thu, 5 Mar 2020 18:58:09 -0800 Subject: [PATCH] Copy over PkgState in PackageSetting updateFrom Previously, the two PackageSetting objects used during scan/install would reference the same PackageParser.Package object, so it didn't matter which one was accessed to set stateful fields. It would implicitly be reflected in the other PackageSetting through the shared object. With these fields now moved out of the shared object and into the PackageSetting itself, these have to be updated once the 2 settings are reconciled. Bug: 150812845 Bug: 150596321 Test: manual update a system app, reboot, dumpsys package and verify that flags field contains UPDATED_SYSTEM_APP Test: manual run dexopt for updated system app after install and after a reboot; verify paths are correct Change-Id: Iaf5dfa7fb480eef760f6a44e01f5ee8317055709 --- .../com/android/server/pm/PackageSetting.java | 2 ++ .../server/pm/pkg/PackageStateUnserialized.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index 2bd1a26f1e286..a83a8476b8db5 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -321,6 +321,8 @@ public class PackageSetting extends PackageSettingBase { Set mimeGroupNames = other.mimeGroups != null ? other.mimeGroups.keySet() : null; updateMimeGroups(mimeGroupNames); + + getPkgState().updateFrom(other.getPkgState()); } @NonNull diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java index e27bf48b6b61f..edb6d65bd96f2 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java @@ -27,6 +27,7 @@ import android.content.pm.SharedLibraryInfo; import com.android.internal.util.DataClass; import com.android.server.pm.PackageSetting; +import java.util.ArrayList; import java.util.List; /** @@ -88,6 +89,22 @@ public class PackageStateUnserialized { return latestUse; } + public void updateFrom(PackageStateUnserialized other) { + this.hiddenUntilInstalled = other.hiddenUntilInstalled; + + if (!other.usesLibraryInfos.isEmpty()) { + this.usesLibraryInfos = new ArrayList<>(other.usesLibraryInfos); + } + + if (!other.usesLibraryFiles.isEmpty()) { + this.usesLibraryFiles = new ArrayList<>(other.usesLibraryFiles); + } + + this.updatedSystemApp = other.updatedSystemApp; + this.lastPackageUsageTimeInMills = other.lastPackageUsageTimeInMills; + this.overrideSeInfo = other.overrideSeInfo; + } + // Code below generated by codegen v1.0.14.