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

Commit a28b78e8 authored by Adam Cohen's avatar Adam Cohen
Browse files

Fix issue where shortcuts were still being added even if corresponding app is uninstalled

issue 14410162

Change-Id: I7857aace069c4eb4c1ee504088f4526d61e1f30e
parent 7716b400
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.launcher3;

import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -29,6 +30,8 @@ import android.util.Base64;
import android.util.Log;
import android.widget.Toast;

import com.android.launcher3.compat.UserHandleCompat;

import org.json.JSONObject;
import org.json.JSONStringer;
import org.json.JSONTokener;
@@ -280,19 +283,27 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
                final boolean exists = LauncherModel.shortcutExists(context, name, intent);
                //final boolean allowDuplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);

                // TODO-XXX: Disable duplicates for now
                if (!exists /* && allowDuplicate */) {
                // If the intent specifies a package, make sure the package exists
                String packageName = intent.getPackage();
                if (packageName == null) {
                    packageName = intent.getComponent() == null ? null :
                        intent.getComponent().getPackageName();
                }
                if (packageName != null && !packageName.isEmpty()) {
                    UserHandleCompat myUserHandle = UserHandleCompat.myUserHandle();
                    if (!LauncherModel.isValidPackage(context, packageName, myUserHandle)) {
                        if (DBG) Log.d(TAG, "Ignoring shortcut for absent package:" + intent);
                        continue;
                    }
                }

                if (!exists) {
                    // Generate a shortcut info to add into the model
                    ShortcutInfo info = getShortcutInfo(context, pendingInfo.data,
                            pendingInfo.launchIntent);
                    addShortcuts.add(info);
                }
                /*
                else if (exists && !allowDuplicate) {
                    result = INSTALL_SHORTCUT_IS_DUPLICATE;
                    duplicateName = name;
                }
                */

            }

            // Notify the user once if we weren't able to place any duplicates
+9 −0
Original line number Diff line number Diff line
@@ -2934,6 +2934,15 @@ public class LauncherModel extends BroadcastReceiver
        return launcherApps.isActivityEnabledForProfile(cn, user);
    }

    public static boolean isValidPackage(Context context, String packageName,
            UserHandleCompat user) {
        if (packageName == null) {
            return false;
        }
        final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(context);
        return launcherApps.isPackageEnabledForProfile(packageName, user);
    }

    /**
     * Make an ShortcutInfo object for a restored application or shortcut item that points
     * to a package that is not yet installed on the system.