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

Commit f56bd0e1 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Installing packages to expanded storage."

parents 94efe917 b2b9ab83
Loading
Loading
Loading
Loading
+53 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
@@ -55,12 +56,12 @@ import android.os.UserManager;
import android.text.TextUtils;
import android.util.Log;

import libcore.io.IoUtils;

import com.android.internal.content.PackageHelper;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.SizedInputStream;

import libcore.io.IoUtils;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
@@ -234,6 +235,10 @@ public final class Pm {
            return runForceDexOpt();
        }

        if ("move".equals(op)) {
            return runMove();
        }

        try {
            if (args.length == 1) {
                if (args[0].equalsIgnoreCase("-l")) {
@@ -1278,6 +1283,51 @@ public final class Pm {
        }
    }

    class LocalPackageMoveObserver extends IPackageMoveObserver.Stub {
        boolean finished;
        int returnCode;

        @Override
        public void packageMoved(String packageName, int returnCode) throws RemoteException {
            synchronized (this) {
                this.finished = true;
                this.returnCode = returnCode;
                notifyAll();
            }
        }
    }

    public int runMove() {
        final String packageName = nextArg();
        String volumeUuid = nextArg();
        if ("internal".equals(volumeUuid)) {
            volumeUuid = null;
        }

        final LocalPackageMoveObserver obs = new LocalPackageMoveObserver();
        try {
            mPm.movePackageAndData(packageName, volumeUuid, obs);

            synchronized (obs) {
                while (!obs.finished) {
                    try {
                        obs.wait();
                    } catch (InterruptedException e) {
                    }
                }
                if (obs.returnCode == PackageManager.MOVE_SUCCEEDED) {
                    System.out.println("Success");
                    return 0;
                } else {
                    System.err.println("Failure [" + obs.returnCode + "]");
                    return 1;
                }
            }
        } catch (RemoteException e) {
            throw e.rethrowAsRuntimeException();
        }
    }

    private int runUninstall() throws RemoteException {
        int flags = 0;
        int userId = UserHandle.USER_ALL;
@@ -1820,6 +1870,7 @@ public final class Pm {
        System.err.println("       pm install-abandon SESSION_ID");
        System.err.println("       pm uninstall [-k] [--user USER_ID] PACKAGE");
        System.err.println("       pm set-installer PACKAGE INSTALLER");
        System.err.println("       pm move PACKAGE [internal|UUID]");
        System.err.println("       pm clear [--user USER_ID] PACKAGE");
        System.err.println("       pm enable [--user USER_ID] PACKAGE_OR_COMPONENT");
        System.err.println("       pm disable [--user USER_ID] PACKAGE_OR_COMPONENT");
+14 −4
Original line number Diff line number Diff line
@@ -62,19 +62,19 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
import android.util.Log;
import android.view.Display;
import android.os.SystemProperties;

import dalvik.system.VMRuntime;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
import com.android.internal.util.UserIcons;

import dalvik.system.VMRuntime;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -1363,7 +1363,17 @@ final class ApplicationPackageManager extends PackageManager {
        try {
            mPM.movePackage(packageName, observer, flags);
        } catch (RemoteException e) {
            // Should never happen!
            throw e.rethrowAsRuntimeException();
        }
    }

    @Override
    public void movePackageAndData(String packageName, String volumeUuid,
            IPackageMoveObserver observer) {
        try {
            mPM.movePackageAndData(packageName, volumeUuid, observer);
        } catch (RemoteException e) {
            throw e.rethrowAsRuntimeException();
        }
    }

+5 −0
Original line number Diff line number Diff line
@@ -458,6 +458,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     */
    public int largestWidthLimitDp = 0;

    /** {@hide} */
    public String volumeUuid;
    /** {@hide} */
    public String scanSourceDir;
    /** {@hide} */
@@ -726,6 +728,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        requiresSmallestWidthDp = orig.requiresSmallestWidthDp;
        compatibleWidthLimitDp = orig.compatibleWidthLimitDp;
        largestWidthLimitDp = orig.largestWidthLimitDp;
        volumeUuid = orig.volumeUuid;
        scanSourceDir = orig.scanSourceDir;
        scanPublicSourceDir = orig.scanPublicSourceDir;
        sourceDir = orig.sourceDir;
@@ -778,6 +781,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        dest.writeInt(requiresSmallestWidthDp);
        dest.writeInt(compatibleWidthLimitDp);
        dest.writeInt(largestWidthLimitDp);
        dest.writeString(volumeUuid);
        dest.writeString(scanSourceDir);
        dest.writeString(scanPublicSourceDir);
        dest.writeString(sourceDir);
@@ -829,6 +833,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        requiresSmallestWidthDp = source.readInt();
        compatibleWidthLimitDp = source.readInt();
        largestWidthLimitDp = source.readInt();
        volumeUuid = source.readString();
        scanSourceDir = source.readString();
        scanPublicSourceDir = source.readString();
        sourceDir = source.readString();
+2 −1
Original line number Diff line number Diff line
@@ -432,6 +432,7 @@ interface IPackageManager {
    PackageCleanItem nextPackageToClean(in PackageCleanItem lastPackage);

    void movePackage(String packageName, IPackageMoveObserver observer, int flags);
    void movePackageAndData(String packageName, String volumeUuid, IPackageMoveObserver observer);

    boolean addPermissionAsync(in PermissionInfo info);

+5 −0
Original line number Diff line number Diff line
@@ -887,6 +887,8 @@ public class PackageInstaller {
        public Uri referrerUri;
        /** {@hide} */
        public String abiOverride;
        /** {@hide} */
        public String volumeUuid;

        /**
         * Construct parameters for a new package install session.
@@ -911,6 +913,7 @@ public class PackageInstaller {
            originatingUri = source.readParcelable(null);
            referrerUri = source.readParcelable(null);
            abiOverride = source.readString();
            volumeUuid = source.readString();
        }

        /**
@@ -1008,6 +1011,7 @@ public class PackageInstaller {
            pw.printPair("originatingUri", originatingUri);
            pw.printPair("referrerUri", referrerUri);
            pw.printPair("abiOverride", abiOverride);
            pw.printPair("volumeUuid", volumeUuid);
            pw.println();
        }

@@ -1028,6 +1032,7 @@ public class PackageInstaller {
            dest.writeParcelable(originatingUri, flags);
            dest.writeParcelable(referrerUri, flags);
            dest.writeString(abiOverride);
            dest.writeString(volumeUuid);
        }

        public static final Parcelable.Creator<SessionParams>
Loading