diff options
Diffstat (limited to 'src/com/android/launcher2/UninstallShortcutReceiver.java')
-rw-r--r-- | src/com/android/launcher2/UninstallShortcutReceiver.java | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/src/com/android/launcher2/UninstallShortcutReceiver.java b/src/com/android/launcher2/UninstallShortcutReceiver.java index 3f6de7c5a..84b1ad50e 100644 --- a/src/com/android/launcher2/UninstallShortcutReceiver.java +++ b/src/com/android/launcher2/UninstallShortcutReceiver.java @@ -17,38 +17,83 @@ package com.android.launcher2; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.ContentResolver; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.widget.Toast; +import com.android.launcher.R; + import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; -import com.android.launcher.R; - 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) { String spKey = LauncherApplication.getSharedPreferencesKey(); SharedPreferences sharedPrefs = context.getSharedPreferences(spKey, Context.MODE_PRIVATE); + final Intent data = pendingInfo.data; + LauncherApplication app = (LauncherApplication) context.getApplicationContext(); synchronized (app) { removeShortcut(context, data, sharedPrefs); } } - private void removeShortcut(Context context, Intent data, final SharedPreferences sharedPrefs) { + private static void removeShortcut(Context context, Intent data, + final SharedPreferences sharedPrefs) { 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); |