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

Unverified Commit 895ebc16 authored by Sam Mortimer's avatar Sam Mortimer Committed by Michael Bestas
Browse files

Apps on adopted storage should stay there during update

An update to an app on adopted storage via a PackageInstaller.Session
(eg gplay) will result in the app silently ending up back on internal
storage if the (new) manifest sets INSTALL_LOCATION_INTERNAL_ONLY.
However, the app data is not moved with it so the end result is that
data looks like it's been wiped.

Ideally, the app and data would be moved to internal.  Next best would
be that the user is informed that they need to uninstall and reinstall.

For now, persist the app in the adopted storage location so that
the user doesn't lose app data.

RM-290

Change-Id: I1f178ea361a875c6df6b3b20a2e44071124c39c4
parent 12c00e33
Loading
Loading
Loading
Loading
+9 −9
Original line number Original line Diff line number Diff line
@@ -378,15 +378,6 @@ public class PackageHelper {
            installLocation = PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY;
            installLocation = PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY;
        }
        }


        // If app expresses strong desire for internal space, honor it
        if (installLocation == PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) {
            if (fitsOnInternal) {
                return null;
            } else {
                throw new IOException("Requested internal only, but not enough space");
            }
        }

        // If app already exists somewhere, prefer to stay on that volume
        // If app already exists somewhere, prefer to stay on that volume
        if (existingInfo != null) {
        if (existingInfo != null) {
            if (existingInfo.volumeUuid == null && fitsOnInternal) {
            if (existingInfo.volumeUuid == null && fitsOnInternal) {
@@ -397,6 +388,15 @@ public class PackageHelper {
            }
            }
        }
        }


        // If app expresses strong desire for internal space, honor it
        if (installLocation == PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) {
            if (fitsOnInternal) {
                return null;
            } else {
                throw new IOException("Requested internal only, but not enough space");
            }
        }

        // We're left with either preferring external or auto, so just pick
        // We're left with either preferring external or auto, so just pick
        // volume with most space
        // volume with most space
        if (bestCandidate != null) {
        if (bestCandidate != null) {