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

Commit ea5c0444 authored by Suchi Amalapurapu's avatar Suchi Amalapurapu
Browse files

When apps switch between system and data partition the code and

resource paths should also be updated based on which version
is being picked up. update the code and resource paths when a path change
is detected
parent c4ca4206
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.HandlerThread;
import android.os.Parcel;
import android.os.RemoteException;
@@ -2047,7 +2048,8 @@ class PackageManagerService extends IPackageManager.Stub {
                }
            }

            // Just create the setting, don't add it yet
            // Just create the setting, don't add it yet. For already existing packages
            // the PkgSetting exists already and doesn't have to be created.
            pkgSetting = mSettings.getPackageLP(pkg, suid, destCodeFile,
                            destResourceFile, pkg.applicationInfo.flags, true, false);
            if (pkgSetting == null) {
@@ -5422,10 +5424,10 @@ class PackageManagerService extends IPackageManager.Stub {
     */
    static class PackageSettingBase extends GrantedPermissions {
        final String name;
        final File codePath;
        final String codePathString;
        final File resourcePath;
        final String resourcePathString;
        File codePath;
        String codePathString;
        File resourcePath;
        String resourcePathString;
        private long timeStamp;
        private String timeStampString = "0";
        final int versionCode;
@@ -5823,11 +5825,16 @@ class PackageManagerService extends IPackageManager.Stub {
                        // and data partition. Just let the most recent version
                        // take precedence.
                        return p;
                    } else if ((p.pkg != null) && (p.pkg.applicationInfo != null)) {
                    } else {
                        // Let the app continue with previous uid if code path changes.
                        reportSettingsProblem(Log.WARN,
                                "Package " + name + " codePath changed from " + p.codePath
                                + " to " + codePath + "; Retaining data and using new code");
                                + " to " + codePath + "; Retaining data and using new code from " +
                                codePath);
                        p.codePath = codePath;
                        p.resourcePath = resourcePath;
                        p.codePathString = codePath.toString();
                        p.resourcePathString = resourcePath.toString();
                    }
                } else if (p.sharedUser != sharedUser) {
                    reportSettingsProblem(Log.WARN,
@@ -5851,6 +5858,7 @@ class PackageManagerService extends IPackageManager.Stub {
                if (sharedUser != null) {
                    p.userId = sharedUser.userId;
                } else if (MULTIPLE_APPLICATION_UIDS) {
                    // Assign new user id
                    p.userId = newUserIdLP(p);
                } else {
                    p.userId = FIRST_APPLICATION_UID;