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

Commit 8392b394 authored by Nicolas Prévot's avatar Nicolas Prévot Committed by Android (Google) Code Review
Browse files

Merge "Add more methods that take a userId to PackageManager."

parents f7560a69 9a80e53b
Loading
Loading
Loading
Loading
+39 −13
Original line number Diff line number Diff line
@@ -126,8 +126,14 @@ public class ApplicationPackageManager extends PackageManager {
    @Override
    public PackageInfo getPackageInfo(String packageName, int flags)
            throws NameNotFoundException {
        return getPackageInfoAsUser(packageName, flags, mContext.getUserId());
    }

    @Override
    public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
            throws NameNotFoundException {
        try {
            PackageInfo pi = mPM.getPackageInfo(packageName, flags, mContext.getUserId());
            PackageInfo pi = mPM.getPackageInfo(packageName, flags, userId);
            if (pi != null) {
                return pi;
            }
@@ -1338,7 +1344,7 @@ public class ApplicationPackageManager extends PackageManager {
        final VerificationParams verificationParams = new VerificationParams(null, null,
                null, VerificationParams.NO_UID, null);
        installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags,
                installerPackageName, verificationParams, null);
                installerPackageName, verificationParams, null, UserHandle.myUserId());
    }

    @Override
@@ -1348,7 +1354,7 @@ public class ApplicationPackageManager extends PackageManager {
        final VerificationParams verificationParams = new VerificationParams(verificationURI, null,
                null, VerificationParams.NO_UID, manifestDigest);
        installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags,
                installerPackageName, verificationParams, encryptionParams);
                installerPackageName, verificationParams, encryptionParams, UserHandle.myUserId());
    }

    @Override
@@ -1356,15 +1362,23 @@ public class ApplicationPackageManager extends PackageManager {
            IPackageInstallObserver observer, int flags, String installerPackageName,
            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
        installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags,
                installerPackageName, verificationParams, encryptionParams);
                installerPackageName, verificationParams, encryptionParams, UserHandle.myUserId());
    }

    @Override
    public void installPackage(Uri packageURI, PackageInstallObserver observer,
            int flags, String installerPackageName) {
        installPackageAsUser(packageURI, observer, flags, installerPackageName,
                UserHandle.myUserId());
    }

    @Override
    public void installPackageAsUser(Uri packageURI, PackageInstallObserver observer, int flags,
               String installerPackageName, int userId) {
        final VerificationParams verificationParams = new VerificationParams(null, null,
                null, VerificationParams.NO_UID, null);
        installCommon(packageURI, observer, flags, installerPackageName, verificationParams, null);
        installCommon(packageURI, observer, flags, installerPackageName, verificationParams, null,
                userId);
    }

    @Override
@@ -1375,7 +1389,7 @@ public class ApplicationPackageManager extends PackageManager {
        final VerificationParams verificationParams = new VerificationParams(verificationURI, null,
                null, VerificationParams.NO_UID, manifestDigest);
        installCommon(packageURI, observer, flags, installerPackageName, verificationParams,
                encryptionParams);
                encryptionParams, UserHandle.myUserId());
    }

    @Override
@@ -1383,12 +1397,13 @@ public class ApplicationPackageManager extends PackageManager {
            PackageInstallObserver observer, int flags, String installerPackageName,
            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
        installCommon(packageURI, observer, flags, installerPackageName, verificationParams,
                encryptionParams);
                encryptionParams, UserHandle.myUserId());
    }

    private void installCommon(Uri packageURI,
            PackageInstallObserver observer, int flags, String installerPackageName,
            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams,
            int userId) {
        if (!"file".equals(packageURI.getScheme())) {
            throw new UnsupportedOperationException("Only file:// URIs are supported");
        }
@@ -1398,17 +1413,22 @@ public class ApplicationPackageManager extends PackageManager {

        final String originPath = packageURI.getPath();
        try {
            mPM.installPackage(originPath, observer.getBinder(), flags, installerPackageName,
                    verificationParams, null);
            mPM.installPackageAsUser(originPath, observer.getBinder(), flags, installerPackageName,
                    verificationParams, null, userId);
        } catch (RemoteException ignored) {
        }
    }

    @Override
    public int installExistingPackage(String packageName)
    public int installExistingPackage(String packageName) throws NameNotFoundException {
        return installExistingPackageAsUser(packageName, UserHandle.myUserId());
    }

    @Override
    public int installExistingPackageAsUser(String packageName, int userId)
            throws NameNotFoundException {
        try {
            int res = mPM.installExistingPackageAsUser(packageName, UserHandle.myUserId());
            int res = mPM.installExistingPackageAsUser(packageName, userId);
            if (res == INSTALL_FAILED_INVALID_URI) {
                throw new NameNotFoundException("Package " + packageName + " doesn't exist");
            }
@@ -1706,8 +1726,14 @@ public class ApplicationPackageManager extends PackageManager {

    @Override
    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
        deletePackageAsUser(packageName, observer, flags, UserHandle.myUserId());
    }

    @Override
    public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags,
            int userId) {
        try {
            mPM.deletePackageAsUser(packageName, observer, UserHandle.myUserId(), flags);
            mPM.deletePackageAsUser(packageName, observer, userId, flags);
        } catch (RemoteException e) {
            // Should never happen!
        }
+99 −3
Original line number Diff line number Diff line
@@ -2010,7 +2010,7 @@ public abstract class PackageManager {
     *            {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
     *            {@link #GET_SIGNATURES}, {@link #GET_UNINSTALLED_PACKAGES} to
     *            modify the data returned.
     * @return Returns a PackageInfo object containing information about the
     * @return A PackageInfo object containing information about the
     *         package. If flag GET_UNINSTALLED_PACKAGES is set and if the
     *         package is not found in the list of installed applications, the
     *         package information is retrieved from the list of uninstalled
@@ -2031,6 +2031,46 @@ public abstract class PackageManager {
    public abstract PackageInfo getPackageInfo(String packageName, int flags)
            throws NameNotFoundException;

    /**
     * @hide
     * Retrieve overall information about an application package that is
     * installed on the system.
     * <p>
     * Throws {@link NameNotFoundException} if a package with the given name can
     * not be found on the system.
     *
     * @param packageName The full name (i.e. com.google.apps.contacts) of the
     *            desired package.
     * @param flags Additional option flags. Use any combination of
     *            {@link #GET_ACTIVITIES}, {@link #GET_GIDS},
     *            {@link #GET_CONFIGURATIONS}, {@link #GET_INSTRUMENTATION},
     *            {@link #GET_PERMISSIONS}, {@link #GET_PROVIDERS},
     *            {@link #GET_RECEIVERS}, {@link #GET_SERVICES},
     *            {@link #GET_SIGNATURES}, {@link #GET_UNINSTALLED_PACKAGES} to
     *            modify the data returned.
     * @param userId The user id.
     * @return A PackageInfo object containing information about the
     *         package. If flag GET_UNINSTALLED_PACKAGES is set and if the
     *         package is not found in the list of installed applications, the
     *         package information is retrieved from the list of uninstalled
     *         applications (which includes installed applications as well as
     *         applications with data directory i.e. applications which had been
     *         deleted with {@code DONT_DELETE_DATA} flag set).
     * @see #GET_ACTIVITIES
     * @see #GET_GIDS
     * @see #GET_CONFIGURATIONS
     * @see #GET_INSTRUMENTATION
     * @see #GET_PERMISSIONS
     * @see #GET_PROVIDERS
     * @see #GET_RECEIVERS
     * @see #GET_SERVICES
     * @see #GET_SIGNATURES
     * @see #GET_UNINSTALLED_PACKAGES
     */
    @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
    public abstract PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
            throws NameNotFoundException;

    /**
     * Map from the current package names in use on the device to whatever
     * the current canonical name of that package is.
@@ -3689,6 +3729,31 @@ public abstract class PackageManager {
            Uri packageURI, PackageInstallObserver observer,
            int flags, String installerPackageName);


    /**
     * @hide
     * Install a package. Since this may take a little while, the result will be
     * posted back to the given observer. An installation will fail if the package named
     * in the package file's manifest is already installed, or if there's no space
     * available on the device.
     * @param packageURI The location of the package file to install. This can be a 'file:' or a
     * 'content:' URI.
     * @param observer An observer callback to get notified when the package installation is
     * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be
     * called when that happens. This parameter must not be null.
     * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
     * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
     * @param installerPackageName Optional package name of the application that is performing the
     * installation. This identifies which market the package came from.
     * @param userId The user id.
     */
     @RequiresPermission(anyOf = {
            Manifest.permission.INSTALL_PACKAGES,
            Manifest.permission.INTERACT_ACROSS_USERS_FULL})
    public abstract void installPackageAsUser(
            Uri packageURI, PackageInstallObserver observer, int flags,
            String installerPackageName, int userId);

    /**
     * Similar to
     * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
@@ -3752,7 +3817,17 @@ public abstract class PackageManager {
     * @hide
     */
    // @SystemApi
    public abstract int installExistingPackage(String packageName)
    public abstract int installExistingPackage(String packageName) throws NameNotFoundException;

    /**
     * If there is already an application with the given package name installed
     * on the system for other users, also install it for the specified user.
     * @hide
     */
     @RequiresPermission(anyOf = {
            Manifest.permission.INSTALL_PACKAGES,
            Manifest.permission.INTERACT_ACROSS_USERS_FULL})
    public abstract int installExistingPackageAsUser(String packageName, int userId)
            throws NameNotFoundException;

    /**
@@ -3958,7 +4033,7 @@ public abstract class PackageManager {
     * @param observer An observer callback to get notified when the package deletion is
     * complete. {@link android.content.pm.IPackageDeleteObserver#packageDeleted(boolean)} will be
     * called when that happens.  observer may be null to indicate that no callback is desired.
     * @param flags - possible values: {@link #DELETE_KEEP_DATA},
     * @param flags Possible values: {@link #DELETE_KEEP_DATA},
     * {@link #DELETE_ALL_USERS}.
     *
     * @hide
@@ -3967,6 +4042,27 @@ public abstract class PackageManager {
    public abstract void deletePackage(
            String packageName, IPackageDeleteObserver observer, int flags);

    /**
     * Attempts to delete a package.  Since this may take a little while, the result will
     * be posted back to the given observer. A deletion will fail if the named package cannot be
     * found, or if the named package is a "system package".
     * (TODO: include pointer to documentation on "system packages")
     *
     * @param packageName The name of the package to delete
     * @param observer An observer callback to get notified when the package deletion is
     * complete. {@link android.content.pm.IPackageDeleteObserver#packageDeleted(boolean)} will be
     * called when that happens.  observer may be null to indicate that no callback is desired.
     * @param flags Possible values: {@link #DELETE_KEEP_DATA}, {@link #DELETE_ALL_USERS}.
     * @param userId The user Id
     *
     * @hide
     */
     @RequiresPermission(anyOf = {
            Manifest.permission.DELETE_PACKAGES,
            Manifest.permission.INTERACT_ACROSS_USERS_FULL})
    public abstract void deletePackageAsUser(
            String packageName, IPackageDeleteObserver observer, int flags, int userId);

    /**
     * Retrieve the package name of the application that installed a package. This identifies
     * which market the package came from.
+34 −3
Original line number Diff line number Diff line
@@ -63,7 +63,13 @@ import java.util.List;
public class MockPackageManager extends PackageManager {

    @Override
    public PackageInfo getPackageInfo(String packageName, int flags)
    public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException {
        throw new UnsupportedOperationException();
    }

    /** @hide */
    @Override
    public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
            throws NameNotFoundException {
        throw new UnsupportedOperationException();
    }
@@ -524,6 +530,14 @@ public class MockPackageManager extends PackageManager {
        throw new UnsupportedOperationException();
    }

    /** @hide */
    @Override
    public void installPackageAsUser(Uri packageURI, PackageInstallObserver observer,
            int flags, String installerPackageName, int userId) {
        throw new UnsupportedOperationException();
    }


    @Override
    public void setInstallerPackageName(String targetPackage,
            String installerPackageName) {
@@ -629,6 +643,15 @@ public class MockPackageManager extends PackageManager {
        throw new UnsupportedOperationException();
    }

    /**
     * @hide - to match hiding in superclass
     */
    @Override
    public void deletePackageAsUser(
            String packageName, IPackageDeleteObserver observer, int flags, int userId) {
        throw new UnsupportedOperationException();
    }

    @Override
    public void addPackageToPreferred(String packageName) {
        throw new UnsupportedOperationException();
@@ -792,7 +815,15 @@ public class MockPackageManager extends PackageManager {
     * @hide
     */
    @Override
    public int installExistingPackage(String packageName)
    public int installExistingPackage(String packageName) throws NameNotFoundException {
        throw new UnsupportedOperationException();
    }

    /**
     * @hide
     */
    @Override
    public int installExistingPackageAsUser(String packageName, int userId)
            throws NameNotFoundException {
        throw new UnsupportedOperationException();
    }
+22 −0
Original line number Diff line number Diff line
@@ -64,6 +64,12 @@ public class BridgePackageManager extends PackageManager {
        return null;
    }

    @Override
    public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
            throws NameNotFoundException {
        return null;
    }

    @Override
    public String[] currentToCanonicalPackageNames(String[] names) {
        return new String[0];
@@ -498,6 +504,11 @@ public class BridgePackageManager extends PackageManager {
            String installerPackageName) {
    }

    @Override
    public void installPackageAsUser(Uri packageURI, PackageInstallObserver observer,int flags,
            String installerPackageName, int userId) {
    }

    @Override
    public void installPackageWithVerification(Uri packageURI, PackageInstallObserver observer,
            int flags, String installerPackageName, Uri verificationURI,
@@ -515,6 +526,12 @@ public class BridgePackageManager extends PackageManager {
        return 0;
    }

    @Override
    public int installExistingPackageAsUser(String packageName, int userId)
            throws NameNotFoundException {
        return 0;
    }

    @Override
    public void verifyPendingInstall(int id, int verificationCode) {
    }
@@ -567,6 +584,11 @@ public class BridgePackageManager extends PackageManager {
    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
    }

    @Override
    public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags,
            int userId) {
    }

    @Override
    public String getInstallerPackageName(String packageName) {
        return null;