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

Commit 89db9b4e authored by Hai Zhang's avatar Hai Zhang
Browse files

Pass the correct match parameter for replacePreferredActivity().

PackageManager.replacePreferredActivity() only accepts intent filter
with an optional scheme, so the match parameter should be either
MATCH_CATEGORY_SCHEME or MATCH_CATEGORY_EMPTY based on whether there
is a data scheme.

Bug: 110557011
Test: manual
Change-Id: Ied939113eb7d15d47efb524ffb85a4818e2aa8e0
parent 6fce37d8
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -68,7 +68,13 @@ public class PreferredActivity {
     * @param context the {@code Context} to retrieve system services
     */
    public void configure(@NonNull String packageName, @NonNull Context context) {
        IntentFilter intentFilter = mActivity.getIntentFilterData().createIntentFilter();
        PackageManager packageManager = context.getPackageManager();
        IntentFilterData intentFilterData = mActivity.getIntentFilterData();
        IntentFilter intentFilter = intentFilterData.createIntentFilter();
        // PackageManager.replacePreferredActivity() expects filter to have no data authorities,
        // paths, or types; and at most one scheme.
        int match = intentFilterData.getDataScheme() != null ? IntentFilter.MATCH_CATEGORY_SCHEME
                : IntentFilter.MATCH_CATEGORY_EMPTY;
        List<ComponentName> activities = mActivity.getQualifyingComponentsAsUser(
                Process.myUserHandle(), context);
        ComponentName packageActivity = mActivity.getQualifyingComponentForPackage(
@@ -77,10 +83,7 @@ public class PreferredActivity {
        if (packageActivity == null) {
            return;
        }
        PackageManager packageManager = context.getPackageManager();
        // TODO: STOPSHIP: MATCH_CATEGORY_SCHEME ?
        packageManager.replacePreferredActivity(intentFilter, IntentFilter.MATCH_CATEGORY_SCHEME
                | IntentFilter.MATCH_ADJUSTMENT_NORMAL, activities, packageActivity);
        packageManager.replacePreferredActivity(intentFilter, match, activities, packageActivity);
    }

    @Override
+6 −0
Original line number Diff line number Diff line
@@ -781,6 +781,12 @@ public class Roles {
                    }
                    checkDuplicateElement(intentFilterData, intentFilterDatas,
                            "intent filter");
                    if (DEBUG) {
                        if (intentFilterData.getDataType() != null) {
                            throwOrLogMessage("mimeType in <data> is not supported when setting a"
                                    + " preferred activity");
                        }
                    }
                    intentFilterDatas.add(intentFilterData);
                    break;
                default: