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

Commit b9fb98d2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Toast app icons should show for secondary users"

parents 69a9d241 ec9a21c8
Loading
Loading
Loading
Loading
+15 −37
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.UserHandle;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -40,10 +41,6 @@ import android.widget.ImageView;
import android.widget.TextView;

import com.android.internal.R;
import com.android.launcher3.icons.BaseIconFactory.IconOptions;
import com.android.launcher3.icons.IconFactory;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.systemui.plugins.ToastPlugin;

/**
@@ -254,48 +251,29 @@ public class SystemUIToast implements ToastPlugin.Toast {
            return null;
        }

        final Context userContext;
        try {
            userContext = context.createPackageContextAsUser("android",
                0, new UserHandle(userId));
        } catch (NameNotFoundException e) {
            Log.e(TAG, "Could not create user package context");
            return null;
        }

        final ApplicationsState appState =
                ApplicationsState.getInstance((Application) context.getApplicationContext());
        if (!appState.isUserAdded(userId)) {
            Log.d(TAG, "user hasn't been fully initialized, not showing an app icon for "
                    + "packageName=" + packageName);
            final PackageManager packageManager = context.getPackageManager();
            final ApplicationInfo appInfo = packageManager.getApplicationInfoAsUser(
                    packageName,
                    PackageManager.ApplicationInfoFlags.of(PackageManager.GET_META_DATA),
                    userId);
            if (appInfo == null || !showApplicationIcon(appInfo, packageManager)) {
                return null;
            }

        final PackageManager packageManager = userContext.getPackageManager();
        final AppEntry appEntry = appState.getEntry(packageName, userId);
        if (appEntry == null || appEntry.info == null
                || !showApplicationIcon(appEntry.info, packageManager)) {
            IconDrawableFactory iconFactory = IconDrawableFactory.newInstance(context);
            return iconFactory.getBadgedIcon(appInfo, UserHandle.getUserId(appInfo.uid));
        } catch (NameNotFoundException e) {
            Log.e(TAG, "Couldn't find application info for packageName=" + packageName
                    + " userId=" + userId);
            return null;
        }

        final ApplicationInfo appInfo = appEntry.info;
        UserHandle user = UserHandle.getUserHandleForUid(appInfo.uid);
        IconFactory iconFactory = IconFactory.obtain(context);
        try {
            return iconFactory.createBadgedIconBitmap(
                        appInfo.loadUnbadgedIcon(packageManager),
                        new IconOptions().setUser(user))
                    .newIcon(context);
        } finally {
            iconFactory.recycle();
        }
    }

    private static boolean showApplicationIcon(ApplicationInfo appInfo,
            PackageManager packageManager) {
        if (hasFlag(appInfo.flags, FLAG_UPDATED_SYSTEM_APP)) {
            return packageManager.getLaunchIntentForPackage(appInfo.packageName)
                != null;
            return packageManager.getLaunchIntentForPackage(appInfo.packageName) != null;
        }
        return !hasFlag(appInfo.flags, FLAG_SYSTEM);
    }