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

Commit 1d622062 authored by Hai Zhang's avatar Hai Zhang
Browse files

Fix PreferredActivity.configure().

Make it actually use the <intent-filter>s defined in XML. Previously
it was using the <intent-filter> inside <required-activity> only.

Bug: 110557011
Test: manual
Change-Id: I046da1a44a3cee2a9a2b8f2561eb174ffd0e1899
parent 499a31f1
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -69,21 +69,27 @@ public class PreferredActivity {
     */
    public void configure(@NonNull String packageName, @NonNull Context context) {
        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(
                packageName, context);
        // TODO: STOPSHIP: Race condition, what if packageActivity became null? Just don't crash?
        if (packageActivity == null) {
            return;
        }
        packageManager.replacePreferredActivity(intentFilter, match, activities, packageActivity);

        int intentFilterDatasSize = mIntentFilterDatas.size();
        for (int i = 0; i < intentFilterDatasSize; i++) {
            IntentFilterData intentFilterData = mIntentFilterDatas.get(i);

            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);
            packageManager.replacePreferredActivity(intentFilter, match, activities,
                    packageActivity);
        }
    }

    @Override