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

Commit e901d69e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 5f205b17 45b9e40a
Loading
Loading
Loading
Loading
+0 −2
Original line number 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 int getIntentVerificationStatusAsUser(java.lang.String, int);
    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 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;
@@ -1039,7 +1038,6 @@ package android.content.pm {
    method public abstract boolean setDefaultBrowserPackageNameAsUser(java.lang.String, int);
    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 void setSuspendedPackageAppExtras(java.lang.String, android.os.PersistableBundle);
    method public abstract void setUpdateAvailable(java.lang.String, boolean);
    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);
+4 −16
Original line number Diff line number Diff line
@@ -2165,29 +2165,17 @@ public class ApplicationPackageManager extends PackageManager {
    }

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

    @Override
    public Bundle getSuspendedPackageAppExtras() {
        final PersistableBundle extras = getSuspendedPackageAppExtras(mContext.getOpPackageName());
        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
    public boolean isPackageSuspendedForUser(String packageName, int userId) {
        try {
+0 −3
Original line number Diff line number Diff line
@@ -280,9 +280,6 @@ interface IPackageManager {

    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.
     */
+0 −40
Original line number Diff line number Diff line
@@ -5615,46 +5615,6 @@ public abstract class PackageManager {
        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
     * app was suspended.
+27 −40
Original line number Diff line number Diff line
@@ -14021,7 +14021,7 @@ public class PackageManagerService extends IPackageManager.Stub
                "setPackagesSuspended for user " + userId);
        if (callingUid != Process.ROOT_UID &&
                !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));
        }
@@ -14045,12 +14045,11 @@ public class PackageManagerService extends IPackageManager.Stub
                    final PackageSetting pkgSetting = mSettings.mPackages.get(packageName);
                    if (pkgSetting == null
                            || filterAppAccessLPr(pkgSetting, callingUid, userId)) {
                        Slog.w(TAG, "Could not find package setting for package \"" + packageName
                                + "\". Skipping suspending/un-suspending.");
                        Slog.w(TAG, "Could not find package setting for package: " + packageName
                                + ". Skipping suspending/un-suspending.");
                        unactionedPackages.add(packageName);
                        continue;
                    }
                    if (pkgSetting.getSuspended(userId) != suspended) {
                    if (!canSuspendPackageForUserLocked(packageName, userId)) {
                        unactionedPackages.add(packageName);
                        continue;
@@ -14060,7 +14059,6 @@ public class PackageManagerService extends IPackageManager.Stub
                    changedPackagesList.add(packageName);
                }
            }
            }
        } finally {
            Binder.restoreCallingIdentity(callingId);
        }
@@ -14073,7 +14071,6 @@ public class PackageManagerService extends IPackageManager.Stub
                scheduleWritePackageRestrictionsLocked(userId);
            }
        }
        return unactionedPackages.toArray(new String[unactionedPackages.size()]);
    }
@@ -14081,7 +14078,8 @@ public class PackageManagerService extends IPackageManager.Stub
    public PersistableBundle getSuspendedPackageAppExtras(String packageName, int userId) {
        final int callingUid = Binder.getCallingUid();
        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) {
            final PackageSetting ps = mSettings.mPackages.get(packageName);
@@ -14096,25 +14094,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,
            PersistableBundle appExtras, int userId) {
        final String action;
@@ -14169,17 +14148,25 @@ public class PackageManagerService extends IPackageManager.Stub
        }
    }
    void onSuspendingPackageRemoved(String packageName, int userId) {
        final int[] userIds = (userId == UserHandle.USER_ALL) ? sUserManager.getUserIds()
                : new int[] {userId};
    void onSuspendingPackageRemoved(String packageName, int removedForUser) {
        final int[] userIds = (removedForUser == UserHandle.USER_ALL) ? sUserManager.getUserIds()
                : new int[] {removedForUser};
        for (int userId : userIds) {
            List<String> affectedPackages = new ArrayList<>();
            synchronized (mPackages) {
                for (PackageSetting ps : mSettings.mPackages.values()) {
                for (int user : userIds) {
                    final PackageUserState pus = ps.readUserState(user);
                    final PackageUserState pus = ps.readUserState(userId);
                    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