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

Commit c0ef5542 authored by Mike Digman's avatar Mike Digman
Browse files

Fix sharesheet permissioned icon loading bug

In some cases, returned ResolveInfo may not have a set icon but
it will always have an associated ActivityInfo. Fall back to
that ActivityInfo when no icon is set. Permissioned apps now
properly have their icon fetched.

Fixes: 129460747
Fixes: 125908050
Test: manual
Change-Id: I624b1d455106c987b1e3f6623ef9e69d22882e59
parent ea94b786
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -509,10 +509,11 @@ public class ResolverActivity extends Activity {
        @Nullable abstract String getAppSubLabelInternal();

        private Context mCtx;
        protected PackageManager mPm;
        private final ApplicationInfo mAi;
        private final int mIconDpi;
        private final boolean mHasSubstitutePermission;
        private final ApplicationInfo mAi;

        protected PackageManager mPm;

        TargetPresentationGetter(Context ctx, int iconDpi, ApplicationInfo ai) {
            mCtx = ctx;
@@ -590,10 +591,10 @@ public class ResolverActivity extends Activity {
     * Loads the icon and label for the provided ResolveInfo.
     */
    @VisibleForTesting
    public static class ResolveInfoPresentationGetter extends TargetPresentationGetter {
    public static class ResolveInfoPresentationGetter extends ActivityInfoPresentationGetter {
        private final ResolveInfo mRi;
        public ResolveInfoPresentationGetter(Context ctx, int iconDpi, ResolveInfo ri) {
            super(ctx, iconDpi, ri.activityInfo.applicationInfo);
            super(ctx, iconDpi, ri.activityInfo);
            mRi = ri;
        }

@@ -611,6 +612,9 @@ public class ResolverActivity extends Activity {
                        + "couldn't find resources for package", e);
            }

            // Fall back to ActivityInfo if no icon is found via ResolveInfo
            if (dr == null) dr = super.getIconSubstituteInternal();

            return dr;
        }