Support uninstalling an app by dragging from all apps to trash can.

This commit is contained in:
Patrick Dubroy
2010-09-01 11:54:27 -07:00
parent c4fb9173e7
commit bc6840b316
3 changed files with 43 additions and 23 deletions

View File

@@ -16,6 +16,7 @@
package com.android.launcher2;
import android.content.ComponentName;
import android.content.Context;
import android.graphics.Paint;
import android.graphics.PorterDuff;
@@ -65,13 +66,13 @@ public class ApplicationInfoDropTarget extends ImageView implements DropTarget,
// in onDrop, because it allows us to reject the drop (by returning false)
// so that the object being dragged isn't removed from the home screen.
String packageName = null;
ComponentName componentName = null;
if (dragInfo instanceof ApplicationInfo) {
packageName = ((ApplicationInfo)dragInfo).componentName.getPackageName();
componentName = ((ApplicationInfo)dragInfo).componentName;
} else if (dragInfo instanceof ShortcutInfo) {
packageName = ((ShortcutInfo)dragInfo).intent.getComponent().getPackageName();
componentName = ((ShortcutInfo)dragInfo).intent.getComponent();
}
mLauncher.startApplicationDetailsActivity(packageName);
mLauncher.startApplicationDetailsActivity(componentName);
return false;
}

View File

@@ -16,24 +16,25 @@
package com.android.launcher2;
import android.widget.ImageView;
import com.android.launcher.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.graphics.RectF;
import android.graphics.drawable.TransitionDrawable;
import com.android.launcher.R;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class DeleteZone extends ImageView implements DropTarget, DragController.DragListener {
private static final int ORIENTATION_HORIZONTAL = 1;
@@ -93,21 +94,26 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
DragView dragView, Object dragInfo) {
final ItemInfo item = (ItemInfo) dragInfo;
// On x-large screens, you can uninstall an app by dragging from all apps
if (item instanceof ApplicationInfo && LauncherApplication.isScreenXLarge()) {
ApplicationInfo appInfo = (ApplicationInfo)item;
mLauncher.startApplicationUninstallActivity(appInfo.componentName);
}
if (item.container == -1) return;
if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) {
if (item instanceof LauncherAppWidgetInfo) {
mLauncher.removeAppWidget((LauncherAppWidgetInfo) item);
}
} else {
if (source instanceof UserFolder) {
final UserFolder userFolder = (UserFolder) source;
final UserFolderInfo userFolderInfo = (UserFolderInfo) userFolder.getInfo();
// Item must be a ShortcutInfo otherwise it couldn't have been in the folder
// in the first place.
userFolderInfo.remove((ShortcutInfo)item);
}
} else if (source instanceof UserFolder) {
final UserFolder userFolder = (UserFolder) source;
final UserFolderInfo userFolderInfo = (UserFolderInfo) userFolder.getInfo();
// Item must be a ShortcutInfo otherwise it couldn't have been in the folder
// in the first place.
userFolderInfo.remove((ShortcutInfo)item);
}
if (item instanceof UserFolderInfo) {
final UserFolderInfo userFolderInfo = (UserFolderInfo)item;
LauncherModel.deleteUserFolderContentsFromDatabase(mLauncher, userFolderInfo);
@@ -119,6 +125,7 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
appWidgetHost.deleteAppWidgetId(launcherAppWidgetInfo.appWidgetId);
}
}
LauncherModel.deleteItemFromDatabase(mLauncher, item);
}

View File

@@ -1765,12 +1765,21 @@ public final class Launcher extends Activity
}
}
void startApplicationDetailsActivity(String packageName) {
void startApplicationDetailsActivity(ComponentName componentName) {
String packageName = componentName.getPackageName();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null));
startActivity(intent);
}
void startApplicationUninstallActivity(ComponentName componentName) {
String packageName = componentName.getPackageName();
String className = componentName.getClassName();
Intent intent = new Intent(
Intent.ACTION_DELETE, Uri.fromParts("package", packageName, className));
startActivity(intent);
}
void startActivitySafely(Intent intent, Object tag) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
@@ -2277,18 +2286,21 @@ public final class Launcher extends Activity
hideOrShowToolbarButton(true, allAppsButton, showSeq);
hideOrShowToolbarButton(true, configureButton, showSeq);
hideOrShowToolbarButton(false, marketButton, hideSeq);
mDeleteZone.setHandle(allAppsButton);
break;
case ALL_APPS:
hideOrShowToolbarButton(true, configureButton, showSeq);
hideOrShowToolbarButton(true, marketButton, showSeq);
hideOrShowToolbarButton(false, searchButton, hideSeq);
hideOrShowToolbarButton(false, allAppsButton, hideSeq);
mDeleteZone.setHandle(marketButton);
break;
case CUSTOMIZE:
hideOrShowToolbarButton(true, allAppsButton, showSeq);
hideOrShowToolbarButton(false, searchButton, hideSeq);
hideOrShowToolbarButton(false, marketButton, hideSeq);
hideOrShowToolbarButton(false, configureButton, hideSeq);
mDeleteZone.setHandle(allAppsButton);
break;
}
}