diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index c98f761f29..01edb9eb67 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -253,7 +253,7 @@ public class DeleteDropTarget extends ButtonDropTarget { return AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d); } - private void completeDrop(final DragObject d) { + private void completeDrop(DragObject d) { ItemInfo item = (ItemInfo) d.dragInfo; boolean wasWaitingForUninstall = mWaitingForUninstall; mWaitingForUninstall = false; @@ -264,11 +264,32 @@ public class DeleteDropTarget extends ButtonDropTarget { } else if (AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d)) { ShortcutInfo shortcut = (ShortcutInfo) item; if (shortcut.intent != null && shortcut.intent.getComponent() != null) { - ComponentName componentName = shortcut.intent.getComponent(); + final ComponentName componentName = shortcut.intent.getComponent(); + final DragSource dragSource = d.dragSource; int flags = ApplicationInfo.initFlags( ShortcutInfo.getPackageInfo(getContext(), componentName.getPackageName())); mWaitingForUninstall = mLauncher.startApplicationUninstallActivity(componentName, flags); + if (mWaitingForUninstall) { + final Runnable checkIfUninstallWasSuccess = new Runnable() { + @Override + public void run() { + mWaitingForUninstall = false; + String packageName = componentName.getPackageName(); + List activities = + AllAppsList.findActivitiesForPackage(getContext(), packageName); + boolean uninstallSuccessful = activities.size() == 0; + if (dragSource instanceof Folder) { + ((Folder) dragSource). + onUninstallActivityReturned(uninstallSuccessful); + } else if (dragSource instanceof Workspace) { + ((Workspace) dragSource). + onUninstallActivityReturned(uninstallSuccessful); + } + } + }; + mLauncher.addOnResumeCallback(checkIfUninstallWasSuccess); + } } } else if (isWorkspaceOrFolderApplication(d)) { LauncherModel.deleteItemFromDatabase(mLauncher, item); @@ -301,30 +322,6 @@ public class DeleteDropTarget extends ButtonDropTarget { ((Workspace) d.dragSource).onUninstallActivityReturned(false); } } - if (mWaitingForUninstall) { - final Runnable checkIfUninstallWasSuccess = new Runnable() { - @Override - public void run() { - mWaitingForUninstall = false; - ShortcutInfo shortcut = (ShortcutInfo) d.dragInfo; - if (shortcut.intent != null && shortcut.intent.getComponent() != null) { - String packageName = shortcut.intent.getComponent().getPackageName(); - List activities = - AllAppsList.findActivitiesForPackage(getContext(), packageName); - boolean uninstallSuccessful = activities.size() == 0; - mLauncher.removeOnResumeCallback(this); - if (d.dragSource instanceof Folder) { - ((Folder) d.dragSource). - onUninstallActivityReturned(uninstallSuccessful); - } else if (d.dragSource instanceof Workspace) { - ((Workspace) d.dragSource). - onUninstallActivityReturned(uninstallSuccessful); - } - } - } - }; - mLauncher.addOnResumeCallback(checkIfUninstallWasSuccess); - } } public void onDrop(DragObject d) { diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index f23e1bb39c..d428abc2ce 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -725,6 +725,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void onDropCompleted(final View target, final DragObject d, final boolean isFlingToDelete, final boolean success) { if (mDeferDropAfterUninstall) { + Log.d(TAG, "Deferred handling drop because waiting for uninstall."); mDeferredAction = new Runnable() { public void run() { onDropCompleted(target, d, isFlingToDelete, success); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index a16a33e587..71054ffc58 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3457,10 +3457,6 @@ public class Launcher extends Activity mOnResumeCallbacks.add(run); } - public void removeOnResumeCallback(Runnable run) { - mOnResumeCallbacks.remove(run); - } - /** * If the activity is currently paused, signal that we need to re-run the loader * in onResume.