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

Commit 1ca3f550 authored by Kholoud Mohamed's avatar Kholoud Mohamed
Browse files

Clear persistentPreferredActivity for an intentFilter

Bug: 258442623
Bug: 232918480
Test: atest om.android.cts.devicepolicy.MixedProfileOwnerTest#testPersistentIntentResolving
Change-Id: Iab83f560c03ad54a78591d34c1339c1530c205d8
parent e5a44570
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -276,6 +276,8 @@ interface IPackageManager {

    void clearPackagePersistentPreferredActivities(String packageName, int userId);

    void clearPersistentPreferredActivity(in IntentFilter filter, int userId);

    void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
            int sourceUserId, int targetUserId, int flags);

+6 −0
Original line number Diff line number Diff line
@@ -253,6 +253,12 @@ public abstract class IPackageManagerBase extends IPackageManager.Stub {
        mPreferredActivityHelper.clearPackagePersistentPreferredActivities(packageName, userId);
    }

    @Override
    @Deprecated
    public final void clearPersistentPreferredActivity(IntentFilter filter, int userId) {
        mPreferredActivityHelper.clearPersistentPreferredActivity(filter, userId);
    }

    @Override
    @Deprecated
    public final void clearPackagePreferredActivities(String packageName) {
+17 −0
Original line number Diff line number Diff line
@@ -431,6 +431,23 @@ final class PreferredActivityHelper {
        }
    }

    public void clearPersistentPreferredActivity(IntentFilter filter, int userId) {
        int callingUid = Binder.getCallingUid();
        if (callingUid != Process.SYSTEM_UID) {
            throw new SecurityException(
                    "clearPersistentPreferredActivity can only be run by the system");
        }
        boolean changed = false;
        synchronized (mPm.mLock) {
            changed = mPm.mSettings.clearPersistentPreferredActivity(filter, userId);
        }
        if (changed) {
            updateDefaultHomeNotLocked(mPm.snapshotComputer(), userId);
            mPm.postPreferredActivityChangedBroadcast(userId);
            mPm.scheduleWritePackageRestrictions(userId);
        }
    }

    private boolean isHomeFilter(@NonNull WatchedIntentFilter filter) {
        return filter.hasAction(Intent.ACTION_MAIN) && filter.hasCategory(Intent.CATEGORY_HOME)
                && filter.hasCategory(CATEGORY_DEFAULT);
+19 −0
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
import com.android.permission.persistence.RuntimePermissionsPersistence;
import com.android.permission.persistence.RuntimePermissionsState;
import com.android.server.IntentResolver;
import com.android.server.LocalServices;
import com.android.server.backup.PreferredActivityBackupHelper;
import com.android.server.pm.Installer.InstallerException;
@@ -6278,6 +6279,24 @@ public final class Settings implements Watchable, Snappable {
        return changed;
    }

    boolean clearPersistentPreferredActivity(IntentFilter filter, int userId) {
        PersistentPreferredIntentResolver ppir = mPersistentPreferredActivities.get(userId);
        Iterator<PersistentPreferredActivity> it = ppir.filterIterator();
        boolean changed = false;
        while (it.hasNext()) {
            PersistentPreferredActivity ppa = it.next();
            if (IntentResolver.filterEquals(ppa.getIntentFilter(), filter)) {
                ppir.removeFilter(ppa);
                changed = true;
                break;
            }
        }
        if (changed) {
            onChanged();
        }
        return changed;
    }

    ArrayList<Integer> systemReady(ComponentResolver resolver) {
        // Verify that all of the preferred activity components actually
        // exist.  It is possible for applications to be updated and at