mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
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:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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) { }
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user