Merge "Fixing issue where shortcuts and widgets were not being removed when the package was uninstalled (Bug 2657997, Bug 6335843)" into jb-dev

This commit is contained in:
Winson Chung
2012-04-30 10:22:37 -07:00
committed by Android (Google) Code Review
7 changed files with 35 additions and 25 deletions
@@ -91,7 +91,17 @@ public class DeleteDropTarget extends ButtonDropTarget {
return (source instanceof AppsCustomizePagedView) && (info instanceof ApplicationInfo);
}
private boolean isAllAppsWidget(DragSource source, Object info) {
return (source instanceof AppsCustomizePagedView) && (info instanceof PendingAddWidgetInfo);
if (source instanceof AppsCustomizePagedView) {
if (info instanceof PendingAddItemInfo) {
PendingAddItemInfo addInfo = (PendingAddItemInfo) info;
switch (addInfo.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
return true;
}
}
}
return false;
}
private boolean isDragSourceWorkspaceOrFolder(DragObject d) {
return (d.dragSource instanceof Workspace) || (d.dragSource instanceof Folder);
@@ -380,10 +380,13 @@ public class DragController {
// Added null checks to prevent NPE we've seen in the wild
if (dragInfo != null &&
dragInfo.intent != null &&
info.intent != null &&
dragInfo.intent.getComponent().equals(info.intent.getComponent())) {
cancelDrag();
return;
info.intent != null) {
boolean isSamePackage = dragInfo.intent.getPackage().equals(
info.intent.getPackage());
if (isSamePackage) {
cancelDrag();
return;
}
}
}
}
@@ -16,6 +16,7 @@
package com.android.launcher2;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -62,8 +63,8 @@ public class InfoDropTarget extends ButtonDropTarget {
}
}
private boolean isAllAppsApplication(DragSource source, Object info) {
return (source instanceof AppsCustomizePagedView) && (info instanceof ApplicationInfo);
private boolean isFromAllApps(DragSource source) {
return (source instanceof AppsCustomizePagedView);
}
@Override
@@ -76,6 +77,8 @@ public class InfoDropTarget extends ButtonDropTarget {
componentName = ((ApplicationInfo) d.dragInfo).componentName;
} else if (d.dragInfo instanceof ShortcutInfo) {
componentName = ((ShortcutInfo) d.dragInfo).intent.getComponent();
} else if (d.dragInfo instanceof PendingAddItemInfo) {
componentName = ((PendingAddItemInfo) d.dragInfo).componentName;
}
if (componentName != null) {
mLauncher.startApplicationDetailsActivity(componentName);
@@ -90,8 +93,8 @@ public class InfoDropTarget extends ButtonDropTarget {
public void onDragStart(DragSource source, Object info, int dragAction) {
boolean isVisible = true;
// If we are dragging a widget or shortcut, hide the info target
if (!isAllAppsApplication(source, info)) {
// Hide this button unless we are dragging something from AllApps
if (!isFromAllApps(source)) {
isVisible = false;
}
+2 -1
View File
@@ -1079,7 +1079,8 @@ public final class Launcher extends Activity
}
// Build Launcher-specific widget info and save to database
LauncherAppWidgetInfo launcherInfo = new LauncherAppWidgetInfo(appWidgetId);
LauncherAppWidgetInfo launcherInfo = new LauncherAppWidgetInfo(appWidgetId,
appWidgetInfo.provider);
launcherInfo.spanX = spanXY[0];
launcherInfo.spanY = spanXY[1];
launcherInfo.minSpanX = mPendingAddInfo.minSpanX;
@@ -48,11 +48,9 @@ class LauncherAppWidgetInfo extends ItemInfo {
*/
AppWidgetHostView hostView = null;
/**
* Constructor for use with AppWidgets that haven't been instantiated yet.
*/
LauncherAppWidgetInfo(ComponentName providerName) {
LauncherAppWidgetInfo(int appWidgetId, ComponentName providerName) {
itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
this.appWidgetId = appWidgetId;
this.providerName = providerName;
// Since the widget isn't instantiated yet, we don't know these values. Set them to -1
@@ -61,11 +59,6 @@ class LauncherAppWidgetInfo extends ItemInfo {
spanY = -1;
}
LauncherAppWidgetInfo(int appWidgetId) {
itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
this.appWidgetId = appWidgetId;
}
@Override
void onAddToDatabase(ContentValues values) {
super.onAddToDatabase(values);
+2 -1
View File
@@ -1167,7 +1167,8 @@ public class LauncherModel extends BroadcastReceiver {
Launcher.sDumpLogs.add(log);
itemsToRemove.add(id);
} else {
appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId);
appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId,
provider.provider);
appWidgetInfo.id = id;
appWidgetInfo.screen = c.getInt(screenIndex);
appWidgetInfo.cellX = c.getInt(cellXIndex);
+4 -5
View File
@@ -3572,7 +3572,7 @@ public class Workspace extends SmoothPagedView
final Intent intent = info.intent;
final ComponentName name = intent.getComponent();
if (Intent.ACTION_MAIN.equals(intent.getAction()) && name != null) {
if (name != null) {
for (String packageName: packageNames) {
if (packageName.equals(name.getPackageName())) {
LauncherModel.deleteItemFromDatabase(mLauncher, info);
@@ -3592,7 +3592,7 @@ public class Workspace extends SmoothPagedView
final Intent intent = appInfo.intent;
final ComponentName name = intent.getComponent();
if (Intent.ACTION_MAIN.equals(intent.getAction()) && name != null) {
if (name != null) {
for (String packageName: packageNames) {
if (packageName.equals(name.getPackageName())) {
appsToRemoveFromFolder.add(appInfo);
@@ -3606,11 +3606,10 @@ public class Workspace extends SmoothPagedView
}
} else if (tag instanceof LauncherAppWidgetInfo) {
final LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) tag;
final AppWidgetProviderInfo provider =
widgets.getAppWidgetInfo(info.appWidgetId);
final ComponentName provider = info.providerName;
if (provider != null) {
for (String packageName: packageNames) {
if (packageName.equals(provider.provider.getPackageName())) {
if (packageName.equals(provider.getPackageName())) {
LauncherModel.deleteItemFromDatabase(mLauncher, info);
childrenToRemove.add(view);
}