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

Commit 10aa1716 authored by Kelvin Kwan's avatar Kelvin Kwan Committed by Android (Google) Code Review
Browse files

Merge "Load App icons from correct user and badge when cross profile is supported."

parents 72ddaf0d 6fa7f04b
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -22,21 +22,29 @@ import android.content.pm.ProviderInfo;
import android.graphics.drawable.Drawable;
import android.util.TypedValue;

import com.android.documentsui.base.MimeTypes;
import com.android.documentsui.base.UserId;

public class IconUtils {
    public static Drawable loadPackageIcon(Context context, String authority, int icon) {
    public static Drawable loadPackageIcon(Context context, UserId userId, String authority,
            int icon, boolean maybeShowBadge) {
        if (icon != 0) {
            final PackageManager pm = userId.getPackageManager(context);
            Drawable packageIcon = null;
            if (authority != null) {
                final PackageManager pm = context.getPackageManager();
                final ProviderInfo info = pm.resolveContentProvider(authority, 0);
                if (info != null) {
                    return pm.getDrawable(info.packageName, icon, info.applicationInfo);
                    packageIcon = pm.getDrawable(info.packageName, icon, info.applicationInfo);
                }
            } else {
                return context.getDrawable(icon);
                packageIcon = userId.getDrawable(context, icon);
            }
            if (maybeShowBadge) {
                return userId.getUserBadgedIcon(context, packageIcon);
            } else {
                return packageIcon;
            }
        }

        return null;
    }

+5 −4
Original line number Diff line number Diff line
@@ -423,24 +423,25 @@ public class RootInfo implements Durable, Parcelable, Comparable<RootInfo> {
        }
    }

    public Drawable loadIcon(Context context) {
    public Drawable loadIcon(Context context, boolean maybeShowBadge) {
        if (derivedIcon == LOAD_FROM_CONTENT_RESOLVER) {
            return loadMimeTypeIcon(context);
        } else if (derivedIcon != 0) {
            // derivedIcon is set with the resources of the current user.
            return context.getDrawable(derivedIcon);
        } else {
            return IconUtils.loadPackageIcon(context, authority, icon);
            return IconUtils.loadPackageIcon(context, userId, authority, icon, maybeShowBadge);
        }
    }

    public Drawable loadDrawerIcon(Context context) {
    public Drawable loadDrawerIcon(Context context, boolean maybeShowBadge) {
        if (derivedIcon == LOAD_FROM_CONTENT_RESOLVER) {
            return IconUtils.applyTintColor(context, loadMimeTypeIcon(context),
                    R.color.item_root_icon);
        } else if (derivedIcon != 0) {
            return IconUtils.applyTintColor(context, derivedIcon, R.color.item_root_icon);
        } else {
            return IconUtils.loadPackageIcon(context, authority, icon);
            return IconUtils.loadPackageIcon(context, userId, authority, icon, maybeShowBadge);
        }
    }

+17 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Process;
import android.os.UserHandle;
@@ -90,6 +91,7 @@ public final class UserId {
        } catch (PackageManager.NameNotFoundException e) {
            throw new IllegalStateException("android package not found.");
        }

    }

    /**
@@ -106,6 +108,21 @@ public final class UserId {
        return asContext(context).getContentResolver();
    }

    /**
     * Returns a drawable object associated with a particular resource ID in this user.
     */
    public Drawable getDrawable(Context context, int resId) {
        return asContext(context).getDrawable(resId);
    }

    /**
     * If this target user is a managed profile, then this returns a badged copy of the given icon
     * to be able to distinguish it from the original icon.
     */
    public Drawable getUserBadgedIcon(Context context, Drawable drawable) {
        return getPackageManager(context).getUserBadgedIcon(drawable, mUserHandle);
    }

    /**
     * Returns true if this user refers to the system user; false otherwise.
     */
+13 −8
Original line number Diff line number Diff line
@@ -36,16 +36,19 @@ import com.android.documentsui.sidebar.RootItem;
 */
public abstract class AppsRowItemData {

    private final UserId mUserId;
    protected final UserId mUserId;
    private final String mTitle;
    private final @Nullable String mSummary;
    protected final ActionHandler mActionHandler;
    protected final boolean mMaybeShowBadge;

    public AppsRowItemData(Item item, ActionHandler actionHandler, boolean shouldShowSummary) {
    public AppsRowItemData(Item item, ActionHandler actionHandler, boolean shouldShowSummary,
            boolean maybeShowBadge) {
        mUserId = item.userId;
        mTitle = item.title;
        mSummary = shouldShowSummary ? item.getSummary() : null;
        mActionHandler = actionHandler;
        mMaybeShowBadge = maybeShowBadge;
    }

    public final String getTitle() {
@@ -70,14 +73,15 @@ public abstract class AppsRowItemData {

        private final ResolveInfo mResolveInfo;

        public AppData(AppItem item, ActionHandler actionHandler, boolean shouldShowSummary) {
            super(item, actionHandler, shouldShowSummary);
        public AppData(AppItem item, ActionHandler actionHandler, boolean shouldShowSummary,
                boolean maybeShowBadge) {
            super(item, actionHandler, shouldShowSummary, maybeShowBadge);
            mResolveInfo = item.info;
        }

        @Override
        protected Drawable getIconDrawable(Context context) {
            return mResolveInfo.loadIcon(context.getPackageManager());
            return mResolveInfo.loadIcon(mUserId.getPackageManager(context));
        }

        @Override
@@ -90,14 +94,15 @@ public abstract class AppsRowItemData {

        private final RootInfo mRootInfo;

        public RootData(RootItem item, ActionHandler actionHandler, boolean shouldShowSummary) {
            super(item, actionHandler, shouldShowSummary);
        public RootData(RootItem item, ActionHandler actionHandler, boolean shouldShowSummary,
                boolean maybeShowBadge) {
            super(item, actionHandler, shouldShowSummary, maybeShowBadge);
            mRootInfo = item.root;
        }

        @Override
        protected Drawable getIconDrawable(Context context) {
            return mRootInfo.loadIcon(context);
            return mRootInfo.loadIcon(context, mMaybeShowBadge);
        }

        @Override
+7 −3
Original line number Diff line number Diff line
@@ -46,10 +46,12 @@ public class AppsRowManager {

    private final ActionHandler mActionHandler;
    private final List<AppsRowItemData> mDataList;
    private final boolean mMaybeShowBadge;

    public AppsRowManager(ActionHandler handler) {
    public AppsRowManager(ActionHandler handler, boolean maybeShowBadge) {
        mDataList = new ArrayList<>();
        mActionHandler = handler;
        mMaybeShowBadge = maybeShowBadge;
    }

    public List<AppsRowItemData> updateList(List<Item> itemList) {
@@ -68,9 +70,11 @@ public class AppsRowManager {
        for (Item item : itemList) {
            boolean shouldShowSummary = packageNameCount.get(item.getPackageName()) > 1;
            if (item instanceof RootItem) {
                mDataList.add(new RootData((RootItem) item, mActionHandler, shouldShowSummary));
                mDataList.add(new RootData((RootItem) item, mActionHandler, shouldShowSummary,
                        mMaybeShowBadge));
            } else {
                mDataList.add(new AppData((AppItem) item, mActionHandler, shouldShowSummary));
                mDataList.add(new AppData((AppItem) item, mActionHandler, shouldShowSummary,
                        mMaybeShowBadge));
            }
        }
        return mDataList;
Loading