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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user