diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 8e7eaf6e29fa9..330f4b3334df0 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1488,6 +1488,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void onDataLoaderUnrecoverable() { + if (TextUtils.isEmpty(mPackageName)) { + // The package has not been installed. + return; + } final PackageManagerService packageManagerService = mPm; final String packageName = mPackageName; mHandler.post(() -> { @@ -2610,12 +2614,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { case IDataLoaderStatusListener.DATA_LOADER_STOPPED: case IDataLoaderStatusListener.DATA_LOADER_DESTROYED: return; - case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: - onDataLoaderUnrecoverable(); - return; } if (mDestroyed || mDataLoaderFinished) { + switch (status) { + case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: + onDataLoaderUnrecoverable(); + return; + } return; } @@ -2678,6 +2684,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } break; } + case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: + mDataLoaderFinished = true; + onSessionVerificationFailure( + new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE, + "DataLoader reported unrecoverable failure.")); + return; } } catch (RemoteException e) { // In case of streaming failure we don't want to fail or commit the session.