Populate fields for committed staged sessions

Those fields are needed for pre-reboot verification and
installation after reboot.

Bug: 181731810
Test: atest StagedInstallTest StagedInstallInternalTest
Test: 1. `adb install --staged SOMEAPP`
      2. reboot the device before the session reaches READY
      3. `adb shell pm list staged-sessions` after boot completed
      4. check the session is READY instead of FAILED
Change-Id: I3de3336cdfac9b925ba6ebb981db773e3a566047
This commit is contained in:
JW Wang
2021-03-03 14:39:24 +08:00
parent d38c0368af
commit 2aa982583b

View File

@@ -2086,15 +2086,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
try {
sealLocked();
// Session that are staged, ready and not multi package will be installed during
// this boot. As such, we need populate all the fields for successful installation.
if (isMultiPackage()) {
// Session that are staged, committed and not multi package will be installed or
// restart verification during this boot. As such, we need populate all the fields
// for successful installation.
if (isMultiPackage() || !isStaged() || !isCommitted()) {
return;
}
final PackageInstallerSession root = hasParentSessionId()
? allSessions.get(getParentSessionId())
: this;
if (root != null && root.isStagedSessionReady()) {
if (root != null) {
if (isApexSession()) {
validateApexInstallLocked();
} else {