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

Commit 69131f89 authored by Songchun Fan's avatar Songchun Fan Committed by Android (Google) Code Review
Browse files

Merge "[resolver] only keep one preferred activity if selected with always=true"

parents 8d97ceaa 201c064d
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -2687,7 +2687,7 @@ public class ApplicationPackageManager extends PackageManager {
    public void addPreferredActivity(IntentFilter filter,
                                     int match, ComponentName[] set, ComponentName activity) {
        try {
            mPM.addPreferredActivity(filter, match, set, activity, getUserId());
            mPM.addPreferredActivity(filter, match, set, activity, getUserId(), false);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -2697,7 +2697,7 @@ public class ApplicationPackageManager extends PackageManager {
    public void addPreferredActivityAsUser(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity, int userId) {
        try {
            mPM.addPreferredActivity(filter, match, set, activity, userId);
            mPM.addPreferredActivity(filter, match, set, activity, userId, false);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -2733,6 +2733,16 @@ public class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match,
            @Nullable ComponentName[] set, @NonNull ComponentName activity) {
        try {
            mPM.addPreferredActivity(filter, match, set, activity, getUserId(), true);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @Override
    public int getPreferredActivities(List<IntentFilter> outFilters,
                                      List<ComponentName> outActivities, String packageName) {
+1 −1
Original line number Diff line number Diff line
@@ -261,7 +261,7 @@ interface IPackageManager {
            in IntentFilter filter, int match, in ComponentName activity);

    void addPreferredActivity(in IntentFilter filter, int match,
            in ComponentName[] set, in ComponentName activity, int userId);
            in ComponentName[] set, in ComponentName activity, int userId, boolean removeExisting);

    @UnsupportedAppUsage
    void replacePreferredActivity(in IntentFilter filter, int match,
+11 −0
Original line number Diff line number Diff line
@@ -6762,6 +6762,17 @@ public abstract class PackageManager {
    @Deprecated
    public abstract void clearPackagePreferredActivities(@NonNull String packageName);

    /**
     * Same as {@link #addPreferredActivity(IntentFilter, int, ComponentName[], ComponentName)},
     * but removes all existing entries that match this filter.
     * @hide
     */
    public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match,
            @Nullable ComponentName[] set, @NonNull ComponentName activity) {
        throw new UnsupportedOperationException(
                "addUniquePreferredActivity not implemented in subclass");
    }

    /**
     * Retrieve all preferred activities, previously added with
     * {@link #addPreferredActivity}, that are
+1 −1
Original line number Diff line number Diff line
@@ -1202,7 +1202,7 @@ public class ResolverActivity extends Activity implements
                    final PackageManager pm = getPackageManager();

                    // Set the preferred Activity
                    pm.addPreferredActivity(filter, bestMatch, set, intent.getComponent());
                    pm.addUniquePreferredActivity(filter, bestMatch, set, intent.getComponent());

                    if (ri.handleAllWebDataURI) {
                        // Set default Browser if needed
+26 −18
Original line number Diff line number Diff line
@@ -6490,7 +6490,7 @@ public class PackageManagerService extends IPackageManager.Stub
                intent, resolvedType, flags, query, 0, false, true, false, userId);
        // Add the new activity as the last chosen for this filter
        addPreferredActivityInternal(filter, match, null, activity, false, userId,
                "Setting last chosen");
                "Setting last chosen", false);
    }
    @Override
@@ -19610,14 +19610,14 @@ public class PackageManagerService extends IPackageManager.Stub
    @Override
    public void addPreferredActivity(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity, int userId) {
            ComponentName[] set, ComponentName activity, int userId, boolean removeExisting) {
        addPreferredActivityInternal(filter, match, set, activity, true, userId,
                "Adding preferred");
                "Adding preferred", removeExisting);
    }
    private void addPreferredActivityInternal(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity, boolean always, int userId,
            String opname) {
            String opname, boolean removeExisting) {
        // writer
        int callingUid = Binder.getCallingUid();
        mPermissionManager.enforceCrossUserPermission(callingUid, userId,
@@ -19645,6 +19645,10 @@ public class PackageManagerService extends IPackageManager.Stub
        }
        synchronized (mLock) {
            final PreferredIntentResolver pir = mSettings.editPreferredActivitiesLPw(userId);
            final ArrayList<PreferredActivity> existing = pir.findFilters(filter);
            if (removeExisting && existing != null) {
                removeFiltersLocked(pir, filter, existing);
            }
            pir.addFilter(new PreferredActivity(filter, match, set, activity, always));
            scheduleWritePackageRestrictionsLocked(userId);
        }
@@ -19744,25 +19748,29 @@ public class PackageManagerService extends IPackageManager.Stub
                    }
                }
                if (existing != null) {
                    removeFiltersLocked(pir, filter, existing);
                }
            }
        }
        addPreferredActivityInternal(filter, match, set, activity, true, userId,
                "Replacing preferred", false);
    }
    private void removeFiltersLocked(@NonNull PreferredIntentResolver pir,
            @NonNull IntentFilter filter, @NonNull List<PreferredActivity> existing) {
        if (DEBUG_PREFERRED) {
                        Slog.i(TAG, existing.size() + " existing preferred matches for:");
            Slog.i(TAG, existing.size() + " preferred matches for:");
            filter.dump(new LogPrinter(Log.INFO, TAG), "  ");
        }
        for (int i = existing.size() - 1; i >= 0; --i) {
            final PreferredActivity pa = existing.get(i);
            if (DEBUG_PREFERRED) {
                            Slog.i(TAG, "Removing existing preferred activity "
                                    + pa.mPref.mComponent + ":");
                Slog.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":");
                pa.dump(new LogPrinter(Log.INFO, TAG), "  ");
            }
            pir.removeFilter(pa);
        }
    }
            }
        }
        addPreferredActivityInternal(filter, match, set, activity, true, userId,
                "Replacing preferred");
    }
    @Override
    public void clearPackagePreferredActivities(String packageName) {