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

Commit ad2e91a2 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing SDCard and package enabled state checks in PackageManagerHeler

Bug: 32365540
Change-Id: Iaac3e08ce55457ebbfb3633514ebc8ade6d200c5
parent cf18c3c2
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -981,7 +981,7 @@ public class LauncherModel extends BroadcastReceiver
                                            c.markDeleted("Unrestored app removed: " + targetPkg);
                                            continue;
                                        }
                                    } else if (pmHelper.isAppOnSdcard(targetPkg)) {
                                    } else if (pmHelper.isAppOnSdcard(targetPkg, c.user)) {
                                        // Package is present but not available.
                                        disabledState |= ShortcutInfo.FLAG_DISABLED_NOT_AVAILABLE;
                                        // Add the icon on the workspace anyway.
@@ -1032,8 +1032,7 @@ public class LauncherModel extends BroadcastReceiver
                                        info.iconBitmap = LauncherIcons
                                                .createShortcutIcon(pinnedShortcut, context);
                                        if (pmHelper.isAppSuspended(
                                                info.getTargetComponent().getPackageName(),
                                                info.user)) {
                                                pinnedShortcut.getPackage(), info.user)) {
                                            info.isDisabled |= ShortcutInfo.FLAG_DISABLED_SUSPENDED;
                                        }
                                        intent = info.intent;
@@ -1046,7 +1045,7 @@ public class LauncherModel extends BroadcastReceiver
                                    info = c.loadSimpleShortcut();

                                    // Shortcuts are only available on the primary profile
                                    if (pmHelper.isAppSuspended(targetPkg)) {
                                    if (pmHelper.isAppSuspended(targetPkg, c.user)) {
                                        disabledState |= ShortcutInfo.FLAG_DISABLED_SUSPENDED;
                                    }

+2 −1
Original line number Diff line number Diff line
@@ -73,7 +73,8 @@ public abstract class LauncherAppsCompat {
            UserHandle user);
    public abstract void startActivityForProfile(ComponentName component, UserHandle user,
            Rect sourceBounds, Bundle opts);
    public abstract ApplicationInfo getApplicationInfo(String packageName, UserHandle user);
    public abstract ApplicationInfo getApplicationInfo(
            String packageName, int flags, UserHandle user);
    public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user);
    public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
    public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener);
+23 −3
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ShortcutInfo;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;

import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVL;
@@ -66,10 +67,29 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat {
    }

    @Override
    public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) {
        List<LauncherActivityInfo> activityList = mLauncherApps.getActivityList(packageName, user);
    public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) {
        final boolean isPrimaryUser = Process.myUserHandle().equals(user);
        if (!isPrimaryUser && (flags == 0)) {
            // We are looking for an installed app on a secondary profile. Prior to O, the only
            // entry point for work profiles is through the LauncherActivity.
            List<LauncherActivityInfo> activityList =
                    mLauncherApps.getActivityList(packageName, user);
            return activityList.size() > 0 ? activityList.get(0).getApplicationInfo() : null;
        }
        try {
            ApplicationInfo info =
                    mContext.getPackageManager().getApplicationInfo(packageName, flags);
            // There is no way to check if the app is installed for managed profile. But for
            // primary profile, we can still have this check.
            if (isPrimaryUser && ((info.flags & ApplicationInfo.FLAG_INSTALLED) == 0)) {
                return null;
            }
            return info;
        } catch (PackageManager.NameNotFoundException e) {
            // Package not found
            return null;
        }
    }

    @Override
    public void showAppDetailsForProfile(ComponentName component, UserHandle user) {
+3 −2
Original line number Diff line number Diff line
@@ -35,8 +35,9 @@ public class LauncherAppsCompatVO extends LauncherAppsCompatVL {
    }

    @Override
    public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) {
        return mLauncherApps.getApplicationInfo(packageName, 0, user);
    public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) {
        ApplicationInfo info = mLauncherApps.getApplicationInfo(packageName, flags, user);
        return info == null || (info.flags & ApplicationInfo.FLAG_INSTALLED) == 0 ? null : info;
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class SdCardAvailableReceiver extends BroadcastReceiver {

            for (String pkg : new HashSet<>(entry.getValue())) {
                if (!launcherApps.isPackageEnabledForProfile(pkg, user)) {
                    if (pmHelper.isAppOnSdcard(pkg)) {
                    if (pmHelper.isAppOnSdcard(pkg, user)) {
                        packagesUnavailable.add(pkg);
                    } else {
                        packagesRemoved.add(pkg);
Loading