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
This commit is contained in:
Sunny Goyal
2015-03-26 15:22:29 -07:00
parent 7db312f37b
commit e9909f58c2
4 changed files with 3 additions and 128 deletions

View File

@@ -28,12 +28,6 @@
android:protectionLevel="dangerous"
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"
@@ -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>

View File

@@ -113,8 +113,6 @@ s -->
<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>

View File

@@ -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) { }
}

View File

@@ -402,7 +402,6 @@ public class Workspace extends SmoothPagedView
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 @@ public class Workspace extends SmoothPagedView
// Re-enable any Un/InstallShortcutReceiver and now process any queued items
InstallShortcutReceiver.disableAndFlushInstallQueue(getContext());
UninstallShortcutReceiver.disableAndFlushUninstallQueue(getContext());
mDragSourceInternal = null;
mLauncher.onInteractionEnd();