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

Commit 040bf344 authored by Suprabh Shukla's avatar Suprabh Shukla Committed by android-build-merger
Browse files

Merge "setPackagesSuspended now overwrites all the state" into pi-dev am: e901d69e

am: f283b41a

Change-Id: I39ec00edf07095ae63d28dfd2fb69cd6a11f89c9
parents a247a40b f283b41a
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -1027,7 +1027,6 @@ package android.content.pm {
    method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
    method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int);
    method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int);
    method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle);
    method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.os.PersistableBundle getSuspendedPackageAppExtras(java.lang.String);
    method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
    method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
    method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
    method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
@@ -1039,7 +1038,6 @@ package android.content.pm {
    method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence);
    method public void setHarmfulAppWarning(java.lang.String, java.lang.CharSequence);
    method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String);
    method public java.lang.String[] setPackagesSuspended(java.lang.String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, java.lang.String);
    method public void setSuspendedPackageAppExtras(java.lang.String, android.os.PersistableBundle);
    method public abstract void setUpdateAvailable(java.lang.String, boolean);
    method public abstract void setUpdateAvailable(java.lang.String, boolean);
    method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int);
    method public abstract boolean updateIntentVerificationStatusAsUser(java.lang.String, int, int);
    method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
    method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
+4 −16
Original line number Original line Diff line number Diff line
@@ -2165,29 +2165,17 @@ public class ApplicationPackageManager extends PackageManager {
    }
    }


    @Override
    @Override
    public PersistableBundle getSuspendedPackageAppExtras(String packageName) {
    public Bundle getSuspendedPackageAppExtras() {
        final PersistableBundle extras;
        try {
        try {
            return mPM.getSuspendedPackageAppExtras(packageName, mContext.getUserId());
            extras = mPM.getSuspendedPackageAppExtras(mContext.getOpPackageName(),
                    mContext.getUserId());
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
    }

    @Override
    public Bundle getSuspendedPackageAppExtras() {
        final PersistableBundle extras = getSuspendedPackageAppExtras(mContext.getOpPackageName());
        return extras != null ? new Bundle(extras.deepCopy()) : null;
        return extras != null ? new Bundle(extras.deepCopy()) : null;
    }
    }


    @Override
    public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras) {
        try {
            mPM.setSuspendedPackageAppExtras(packageName, appExtras, mContext.getUserId());
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    @Override
    @Override
    public boolean isPackageSuspendedForUser(String packageName, int userId) {
    public boolean isPackageSuspendedForUser(String packageName, int userId) {
        try {
        try {
+0 −3
Original line number Original line Diff line number Diff line
@@ -280,9 +280,6 @@ interface IPackageManager {


    PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId);
    PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId);


    void setSuspendedPackageAppExtras(String packageName, in PersistableBundle appExtras,
            int userId);

    /**
    /**
     * Backup/restore support - only the system uid may use these.
     * Backup/restore support - only the system uid may use these.
     */
     */
+0 −40
Original line number Original line Diff line number Diff line
@@ -5621,46 +5621,6 @@ public abstract class PackageManager {
        throw new UnsupportedOperationException("isPackageSuspended not implemented");
        throw new UnsupportedOperationException("isPackageSuspended not implemented");
    }
    }


    /**
     * Retrieve the {@link PersistableBundle} that was passed as {@code appExtras} when the given
     * package was suspended.
     *
     * <p> The caller must hold permission {@link Manifest.permission#SUSPEND_APPS} to use this
     * api.</p>
     *
     * @param packageName The package to retrieve extras for.
     * @return The {@code appExtras} for the suspended package.
     *
     * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String)
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.SUSPEND_APPS)
    public @Nullable PersistableBundle getSuspendedPackageAppExtras(String packageName) {
        throw new UnsupportedOperationException("getSuspendedPackageAppExtras not implemented");
    }

    /**
     * Set the app extras for a suspended package. This method can be used to update the appExtras
     * for a package that was earlier suspended using
     * {@link #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle,
     * String)}
     * Does nothing if the given package is not already in a suspended state.
     *
     * @param packageName The package for which the appExtras need to be updated
     * @param appExtras The new appExtras for the given package
     *
     * @see #setPackagesSuspended(String[], boolean, PersistableBundle, PersistableBundle, String)
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.SUSPEND_APPS)
    public void setSuspendedPackageAppExtras(String packageName,
            @Nullable PersistableBundle appExtras) {
        throw new UnsupportedOperationException("setSuspendedPackageAppExtras not implemented");
    }

    /**
    /**
     * Returns any extra information supplied as {@code appExtras} to the system when the calling
     * Returns any extra information supplied as {@code appExtras} to the system when the calling
     * app was suspended.
     * app was suspended.
+27 −40
Original line number Original line Diff line number Diff line
@@ -14036,7 +14036,7 @@ public class PackageManagerService extends IPackageManager.Stub
                "setPackagesSuspended for user " + userId);
                "setPackagesSuspended for user " + userId);
        if (callingUid != Process.ROOT_UID &&
        if (callingUid != Process.ROOT_UID &&
                !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) {
                !UserHandle.isSameApp(getPackageUid(callingPackage, 0, userId), callingUid)) {
            throw new IllegalArgumentException("callingPackage " + callingPackage + " does not"
            throw new IllegalArgumentException("CallingPackage " + callingPackage + " does not"
                    + " belong to calling app id " + UserHandle.getAppId(callingUid));
                    + " belong to calling app id " + UserHandle.getAppId(callingUid));
        }
        }
@@ -14060,12 +14060,11 @@ public class PackageManagerService extends IPackageManager.Stub
                    final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                    final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                    if (pkgSetting == null
                    if (pkgSetting == null
                            || filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                            || filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                        Slog.w(TAG, "Could not find package setting for package \"" + packageName
                        Slog.w(TAG, "Could not find package setting for package: " + packageName
                                + "\". Skipping suspending/un-suspending.");
                                + ". Skipping suspending/un-suspending.");
                        unactionedPackages.add(packageName);
                        unactionedPackages.add(packageName);
                        continue;
                        continue;
                    }
                    }
                    if (pkgSetting.getSuspended(userId) != suspended) {
                    if (!canSuspendPackageForUserLocked(packageName, userId)) {
                    if (!canSuspendPackageForUserLocked(packageName, userId)) {
                        unactionedPackages.add(packageName);
                        unactionedPackages.add(packageName);
                        continue;
                        continue;
@@ -14075,7 +14074,6 @@ public class PackageManagerService extends IPackageManager.Stub
                    changedPackagesList.add(packageName);
                    changedPackagesList.add(packageName);
                }
                }
            }
            }
            }
        } finally {
        } finally {
            Binder.restoreCallingIdentity(callingId);
            Binder.restoreCallingIdentity(callingId);
        }
        }
@@ -14088,7 +14086,6 @@ public class PackageManagerService extends IPackageManager.Stub
                scheduleWritePackageRestrictionsLocked(userId);
                scheduleWritePackageRestrictionsLocked(userId);
            }
            }
        }
        }
        return unactionedPackages.toArray(new String[unactionedPackages.size()]);
        return unactionedPackages.toArray(new String[unactionedPackages.size()]);
    }
    }
@@ -14096,7 +14093,8 @@ public class PackageManagerService extends IPackageManager.Stub
    public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) {
    public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) {
        final int callingUid = Binder.getCallingUid();
        final int callingUid = Binder.getCallingUid();
        if (getPackageUid(packageName, 0, userId) != callingUid) {
        if (getPackageUid(packageName, 0, userId) != callingUid) {
            mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null);
            throw new SecurityException("Calling package " + packageName
                    + " does not belong to calling uid " + callingUid);
        }
        }
        synchronized (mPackages) {
        synchronized (mPackages) {
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            final PackageSetting ps = mSettings.mPackages.get(packageName);
@@ -14111,25 +14109,6 @@ public class PackageManagerService extends IPackageManager.Stub
        }
        }
    }
    }
    @Override
    public void setSuspendedPackageAppExtras(String packageName, PersistableBundle appExtras,
            int userId) {
        final int callingUid = Binder.getCallingUid();
        mContext.enforceCallingOrSelfPermission(Manifest.permission.SUSPEND_APPS, null);
        synchronized (mPackages) {
            final PackageSetting ps = mSettings.mPackages.get(packageName);
            if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) {
                throw new IllegalArgumentException("Unknown target package: " + packageName);
            }
            final PackageUserState packageUserState = ps.readUserState(userId);
            if (packageUserState.suspended) {
                packageUserState.suspendedAppExtras = appExtras;
                sendMyPackageSuspendedOrUnsuspended(new String[] {packageName}, true, appExtras,
                        userId);
            }
        }
    }
    private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended,
    private void sendMyPackageSuspendedOrUnsuspended(String[] affectedPackages, boolean suspended,
            PersistableBundle appExtras, int userId) {
            PersistableBundle appExtras, int userId) {
        final String action;
        final String action;
@@ -14184,17 +14163,25 @@ public class PackageManagerService extends IPackageManager.Stub
        }
        }
    }
    }
    void onSuspendingPackageRemoved(String packageName, int userId) {
    void onSuspendingPackageRemoved(String packageName, int removedForUser) {
        final int[] userIds = (userId == UserHandle.USER_ALL) ? sUserManager.getUserIds()
        final int[] userIds = (removedForUser == UserHandle.USER_ALL) ? sUserManager.getUserIds()
                : new int[] {userId};
                : new int[] {removedForUser};
        for (int userId : userIds) {
            List<String> affectedPackages = new ArrayList<>();
            synchronized (mPackages) {
            synchronized (mPackages) {
                for (PackageSetting ps : mSettings.mPackages.values()) {
                for (PackageSetting ps : mSettings.mPackages.values()) {
                for (int user : userIds) {
                    final PackageUserState pus = ps.readUserState(userId);
                    final PackageUserState pus = ps.readUserState(user);
                    if (pus.suspended && packageName.equals(pus.suspendingPackage)) {
                    if (pus.suspended && packageName.equals(pus.suspendingPackage)) {
                        ps.setSuspended(false, null, null, null, null, user);
                        ps.setSuspended(false, null, null, null, null, userId);
                        affectedPackages.add(ps.name);
                    }
                }
                }
            }
            }
            if (!affectedPackages.isEmpty()) {
                final String[] packageArray = affectedPackages.toArray(
                        new String[affectedPackages.size()]);
                sendMyPackageSuspendedOrUnsuspended(packageArray, false, null, userId);
                sendPackagesSuspendedForUser(packageArray, userId, false, null);
            }
            }
        }
        }
    }
    }
Loading