Removing UninstallShortcutReceiver

> Removing support due to its flacky design. Removing a shortcut
causes a full reload. Also we do not have any concept of owner, so
any app can remove any shortcut.

Bug: 11372484
Change-Id: I781c922fac7dc77ea82cd0a2af74a5fca22500de
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8c837cc..f43106f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,12 +29,6 @@
         android:label="@string/permlab_install_shortcut"
         android:description="@string/permdesc_install_shortcut" />
     <permission
-        android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
-        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
-        android:protectionLevel="dangerous"
-        android:label="@string/permlab_uninstall_shortcut"
-        android:description="@string/permdesc_uninstall_shortcut"/>
-    <permission
         android:name="com.android.launcher3.permission.READ_SETTINGS"
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="normal"
@@ -191,15 +185,6 @@
             </intent-filter>
         </receiver>
 
-        <!-- Intent received used to uninstall shortcuts from other applications -->
-        <receiver
-            android:name="com.android.launcher3.UninstallShortcutReceiver"
-            android:permission="com.android.launcher.permission.UNINSTALL_SHORTCUT">
-            <intent-filter>
-                <action android:name="com.android.launcher.action.UNINSTALL_SHORTCUT" />
-            </intent-filter>
-        </receiver>
-
         <!-- Intent received used to initialize a restored widget -->
         <receiver android:name="com.android.launcher3.AppWidgetsRestoredReceiver" >
             <intent-filter>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0b34d00..7f79b98 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -113,8 +113,6 @@
     <string name="invalid_hotseat_item">This widget is too large for the Favorites tray</string>
     <!-- Message displayed when a shortcut is created by an external application -->
     <string name="shortcut_installed">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" created.</string>
-    <!-- Message displayed when a shortcut is uninstalled by an external application -->
-    <string name="shortcut_uninstalled">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" was removed.</string>
     <!-- Message displayed when an external application attemps to create a shortcut that already exists -->
     <string name="shortcut_duplicate">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" already exists.</string>
 
diff --git a/src/com/android/launcher3/UninstallShortcutReceiver.java b/src/com/android/launcher3/UninstallShortcutReceiver.java
index c9d0bb5..59e4cb5 100644
--- a/src/com/android/launcher3/UninstallShortcutReceiver.java
+++ b/src/com/android/launcher3/UninstallShortcutReceiver.java
@@ -17,117 +17,11 @@
 package com.android.launcher3;
 
 import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.widget.Toast;
 
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Iterator;
-
+//TODO: Remove this
 public class UninstallShortcutReceiver extends BroadcastReceiver {
-    private static final String ACTION_UNINSTALL_SHORTCUT =
-            "com.android.launcher.action.UNINSTALL_SHORTCUT";
-
-    // The set of shortcuts that are pending uninstall
-    private static ArrayList<PendingUninstallShortcutInfo> mUninstallQueue =
-            new ArrayList<PendingUninstallShortcutInfo>();
-
-    // Determines whether to defer uninstalling shortcuts immediately until
-    // disableAndFlushUninstallQueue() is called.
-    private static boolean mUseUninstallQueue = false;
-
-    private static class PendingUninstallShortcutInfo {
-        Intent data;
-
-        public PendingUninstallShortcutInfo(Intent rawData) {
-            data = rawData;
-        }
-    }
-
-    public void onReceive(Context context, Intent data) {
-        if (!ACTION_UNINSTALL_SHORTCUT.equals(data.getAction())) {
-            return;
-        }
-
-        PendingUninstallShortcutInfo info = new PendingUninstallShortcutInfo(data);
-        if (mUseUninstallQueue) {
-            mUninstallQueue.add(info);
-        } else {
-            processUninstallShortcut(context, info);
-        }
-    }
-
-    static void enableUninstallQueue() {
-        mUseUninstallQueue = true;
-    }
-
-    static void disableAndFlushUninstallQueue(Context context) {
-        mUseUninstallQueue = false;
-        Iterator<PendingUninstallShortcutInfo> iter = mUninstallQueue.iterator();
-        while (iter.hasNext()) {
-            processUninstallShortcut(context, iter.next());
-            iter.remove();
-        }
-    }
-
-    private static void processUninstallShortcut(Context context,
-            PendingUninstallShortcutInfo pendingInfo) {
-        final Intent data = pendingInfo.data;
-
-        LauncherAppState.setApplicationContext(context.getApplicationContext());
-        LauncherAppState app = LauncherAppState.getInstance();
-        synchronized (app) { // TODO: make removeShortcut internally threadsafe
-            removeShortcut(context, data);
-        }
-    }
-
-    private static void removeShortcut(Context context, Intent data) {
-        Intent intent = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT);
-        String name = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
-        boolean duplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true);
-
-        if (intent != null && name != null) {
-            final ContentResolver cr = context.getContentResolver();
-            Cursor c = cr.query(LauncherSettings.Favorites.CONTENT_URI,
-                new String[] { LauncherSettings.Favorites._ID, LauncherSettings.Favorites.INTENT },
-                LauncherSettings.Favorites.TITLE + "=?", new String[] { name }, null);
-
-            final int intentIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.INTENT);
-            final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID);
-
-            boolean changed = false;
-
-            try {
-                while (c.moveToNext()) {
-                    try {
-                        String intentStr = c.getString(intentIndex);
-                        if (intentStr != null
-                                && intent.filterEquals(Intent.parseUri(intentStr, 0))) {
-                            final long id = c.getLong(idIndex);
-                            final Uri uri = LauncherSettings.Favorites.getContentUri(id, false);
-                            cr.delete(uri, null, null);
-                            changed = true;
-                            if (!duplicate) {
-                                break;
-                            }
-                        }
-                    } catch (URISyntaxException e) {
-                        // Ignore
-                    }
-                }
-            } finally {
-                c.close();
-            }
-
-            if (changed) {
-                cr.notifyChange(LauncherSettings.Favorites.CONTENT_URI, null);
-                Toast.makeText(context, context.getString(R.string.shortcut_uninstalled, name),
-                        Toast.LENGTH_SHORT).show();
-            }
-        }
-    }
+    @Override
+    public void onReceive(Context context, Intent data) { }
 }
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 92e0132..ad15a6c 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -402,7 +402,6 @@
         setChildrenBackgroundAlphaMultipliers(1f);
         // Prevent any Un/InstallShortcutReceivers from updating the db while we are dragging
         InstallShortcutReceiver.enableInstallQueue();
-        UninstallShortcutReceiver.enableUninstallQueue();
         post(new Runnable() {
             @Override
             public void run() {
@@ -430,7 +429,6 @@
 
         // Re-enable any Un/InstallShortcutReceiver and now process any queued items
         InstallShortcutReceiver.disableAndFlushInstallQueue(getContext());
-        UninstallShortcutReceiver.disableAndFlushUninstallQueue(getContext());
 
         mDragSourceInternal = null;
         mLauncher.onInteractionEnd();