Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03a2c383 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Proper handling of unrecoverable status.

During installation, instead of uninstall, we need to abort.

Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I10301bfe085cd2c78e264571dc57ea35c3049f49
parent 0bdbccf3
Loading
Loading
Loading
Loading
+15 −3
Original line number Original line Diff line number Diff line
@@ -1488,6 +1488,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    }
    }


    private void onDataLoaderUnrecoverable() {
    private void onDataLoaderUnrecoverable() {
        if (TextUtils.isEmpty(mPackageName)) {
            // The package has not been installed.
            return;
        }
        final PackageManagerService packageManagerService = mPm;
        final PackageManagerService packageManagerService = mPm;
        final String packageName = mPackageName;
        final String packageName = mPackageName;
        mHandler.post(() -> {
        mHandler.post(() -> {
@@ -2610,12 +2614,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                    case IDataLoaderStatusListener.DATA_LOADER_STOPPED:
                    case IDataLoaderStatusListener.DATA_LOADER_STOPPED:
                    case IDataLoaderStatusListener.DATA_LOADER_DESTROYED:
                    case IDataLoaderStatusListener.DATA_LOADER_DESTROYED:
                        return;
                        return;
                }

                if (mDestroyed || mDataLoaderFinished) {
                    switch (status) {
                        case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
                        case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
                            onDataLoaderUnrecoverable();
                            onDataLoaderUnrecoverable();
                            return;
                            return;
                    }
                    }

                if (mDestroyed || mDataLoaderFinished) {
                    return;
                    return;
                }
                }


@@ -2678,6 +2684,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
                            }
                            }
                            break;
                            break;
                        }
                        }
                        case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
                            mDataLoaderFinished = true;
                            onSessionVerificationFailure(
                                    new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
                                            "DataLoader reported unrecoverable failure."));
                            return;
                    }
                    }
                } catch (RemoteException e) {
                } catch (RemoteException e) {
                    // In case of streaming failure we don't want to fail or commit the session.
                    // In case of streaming failure we don't want to fail or commit the session.