diff options
-rw-r--r-- | src/com/android/launcher3/AppsCustomizePagedView.java | 10 | ||||
-rw-r--r-- | src/com/android/launcher3/DeleteDropTarget.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/DragLayer.java | 36 | ||||
-rw-r--r-- | src/com/android/launcher3/DragSource.java | 11 | ||||
-rw-r--r-- | src/com/android/launcher3/Folder.java | 10 | ||||
-rw-r--r-- | src/com/android/launcher3/InfoDropTarget.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher3/ItemInfo.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 20 | ||||
-rw-r--r-- | src/com/android/launcher3/ShortcutInfo.java | 9 | ||||
-rw-r--r-- | src/com/android/launcher3/Utilities.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 10 |
11 files changed, 103 insertions, 24 deletions
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 688ff82aa..2865bc5d5 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -916,6 +916,16 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } @Override + public boolean supportsAppInfoDropTarget() { + return true; + } + + @Override + public boolean supportsDeleteDropTarget() { + return false; + } + + @Override public float getIntrinsicIconScaleFactor() { LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 4023dafb6..7e0e5ebd7 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -95,7 +95,7 @@ public class DeleteDropTarget extends ButtonDropTarget { } private boolean isAllAppsApplication(DragSource source, Object info) { - return (source instanceof AppsCustomizePagedView) && (info instanceof AppInfo); + return source.supportsAppInfoDropTarget() && (info instanceof AppInfo); } private boolean isAllAppsWidget(DragSource source, Object info) { if (source instanceof AppsCustomizePagedView) { @@ -175,6 +175,7 @@ public class DeleteDropTarget extends ButtonDropTarget { boolean isVisible = true; boolean useUninstallLabel = !AppsCustomizePagedView.DISABLE_ALL_APPS && isAllAppsApplication(source, info); + boolean useDeleteLabel = !useUninstallLabel && source.supportsDeleteDropTarget(); // If we are dragging an application from AppsCustomize, only show the control if we can // delete the app (it was downloaded), and rename the string to "uninstall" in such a case. @@ -185,15 +186,17 @@ public class DeleteDropTarget extends ButtonDropTarget { if (useUninstallLabel) { setCompoundDrawablesRelativeWithIntrinsicBounds(mUninstallDrawable, null, null, null); - } else { + } else if (useDeleteLabel) { setCompoundDrawablesRelativeWithIntrinsicBounds(mRemoveDrawable, null, null, null); + } else { + isVisible = false; } mCurrentDrawable = (TransitionDrawable) getCurrentDrawable(); mActive = isVisible; resetHoverColor(); ((ViewGroup) getParent()).setVisibility(isVisible ? View.VISIBLE : View.GONE); - if (getText().length() > 0) { + if (isVisible && getText().length() > 0) { setText(useUninstallLabel ? R.string.delete_target_uninstall_label : R.string.delete_target_label); } diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java index dc0ba903f..56886a19c 100644 --- a/src/com/android/launcher3/DragLayer.java +++ b/src/com/android/launcher3/DragLayer.java @@ -24,11 +24,13 @@ import android.animation.ValueAnimator.AnimatorUpdateListener; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; -import android.graphics.Matrix; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.view.*; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.animation.DecelerateInterpolator; @@ -106,21 +108,31 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang final int n = getChildCount(); for (int i = 0; i < n; i++) { final View child = getChildAt(i); - final FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) child.getLayoutParams(); - if (child instanceof Insettable) { - ((Insettable)child).setInsets(insets); - } else { - flp.topMargin += (insets.top - mInsets.top); - flp.leftMargin += (insets.left - mInsets.left); - flp.rightMargin += (insets.right - mInsets.right); - flp.bottomMargin += (insets.bottom - mInsets.bottom); - } - child.setLayoutParams(flp); + setInsets(child, insets, mInsets); } mInsets.set(insets); return true; // I'll take it from here } + @Override + public void addView(View child, int index, android.view.ViewGroup.LayoutParams params) { + super.addView(child, index, params); + setInsets(child, mInsets, new Rect()); + } + + private void setInsets(View child, Rect newInsets, Rect oldInsets) { + final FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) child.getLayoutParams(); + if (child instanceof Insettable) { + ((Insettable) child).setInsets(newInsets); + } else { + flp.topMargin += (newInsets.top - oldInsets.top); + flp.leftMargin += (newInsets.left - oldInsets.left); + flp.rightMargin += (newInsets.right - oldInsets.right); + flp.bottomMargin += (newInsets.bottom - oldInsets.bottom); + } + child.setLayoutParams(flp); + } + private boolean isEventOverFolderTextRegion(Folder folder, MotionEvent ev) { getDescendantRectRelativeToSelf(folder.getEditTextRegion(), mHitRect); if (mHitRect.contains((int) ev.getX(), (int) ev.getY())) { diff --git a/src/com/android/launcher3/DragSource.java b/src/com/android/launcher3/DragSource.java index cca9ab1a4..7369eeac2 100644 --- a/src/com/android/launcher3/DragSource.java +++ b/src/com/android/launcher3/DragSource.java @@ -30,6 +30,17 @@ public interface DragSource { */ boolean supportsFlingToDelete(); + /** + * @return whether items dragged from this source supports 'App Info' + */ + boolean supportsAppInfoDropTarget(); + + /** + * @return whether items dragged from this source supports 'Delete' drop target (e.g. to remove + * a shortcut. + */ + boolean supportsDeleteDropTarget(); + /* * @return the scale of the icons over the workspace icon size */ diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 1d234ff8a..50e200092 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -801,6 +801,16 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return true; } + @Override + public boolean supportsAppInfoDropTarget() { + return false; + } + + @Override + public boolean supportsDeleteDropTarget() { + return true; + } + public void onFlingToDelete(DragObject d, int x, int y, PointF vec) { // Do nothing } diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java index 2ad43b6ff..374238c49 100644 --- a/src/com/android/launcher3/InfoDropTarget.java +++ b/src/com/android/launcher3/InfoDropTarget.java @@ -62,10 +62,6 @@ public class InfoDropTarget extends ButtonDropTarget { } } - private boolean isFromAllApps(DragSource source) { - return (source instanceof AppsCustomizePagedView); - } - @Override public boolean acceptDrop(DragObject d) { // acceptDrop is called just before onDrop. We do the work here, rather than @@ -93,7 +89,7 @@ public class InfoDropTarget extends ButtonDropTarget { boolean isVisible = true; // Hide this button unless we are dragging something from AllApps - if (!isFromAllApps(source)) { + if (!source.supportsAppInfoDropTarget()) { isVisible = false; } diff --git a/src/com/android/launcher3/ItemInfo.java b/src/com/android/launcher3/ItemInfo.java index 8c4cefd5f..36ba6c14f 100644 --- a/src/com/android/launcher3/ItemInfo.java +++ b/src/com/android/launcher3/ItemInfo.java @@ -27,7 +27,7 @@ import java.io.IOException; /** * Represents an item in the launcher. */ -class ItemInfo { +public class ItemInfo { static final int NO_ID = -1; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0a630fe64..5d1954e45 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -45,6 +45,7 @@ import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; @@ -4502,6 +4503,25 @@ public class Launcher extends Activity DISMISS_CLING_DURATION, true); } + public ItemInfo createAppDragInfo(Intent appLaunchIntent) { + ResolveInfo ri = getPackageManager().resolveActivity(appLaunchIntent, 0); + if (ri == null) { + return null; + } + return new AppInfo(getPackageManager(), ri, mIconCache, null); + } + + public ItemInfo createShortcutDragInfo(Intent shortcutIntent, CharSequence caption, + Bitmap icon) { + return new ShortcutInfo(shortcutIntent, caption, icon); + } + + public void startDrag(View dragView, ItemInfo dragInfo, DragSource source) { + dragView.setTag(dragInfo); + mWorkspace.onDragStartedWithItem(dragView); + mWorkspace.beginDragShared(dragView, source); + } + /** * Prints out out state for debugging. */ diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index dafabb8d9..fc087a897 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -71,7 +71,14 @@ class ShortcutInfo extends ItemInfo { protected Intent getIntent() { return intent; } - + + ShortcutInfo(Intent intent, CharSequence title, Bitmap icon) { + this(); + this.intent = intent; + this.title = title; + mIcon = icon; + } + public ShortcutInfo(Context context, ShortcutInfo info) { super(info); title = info.title.toString(); diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 21c546d04..9ffd044b4 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -43,7 +43,7 @@ import java.util.ArrayList; /** * Various utilities shared amongst the Launcher's classes. */ -final class Utilities { +public final class Utilities { private static final String TAG = "Launcher.Utilities"; private static int sIconWidth = -1; @@ -111,7 +111,7 @@ final class Utilities { /** * Returns a bitmap suitable for the all apps view. */ - static Bitmap createIconBitmap(Drawable icon, Context context) { + public static Bitmap createIconBitmap(Drawable icon, Context context) { synchronized (sCanvas) { // we share the statics :-( if (sIconWidth == -1) { initStatics(context); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index b8af9ad5b..8f3d81495 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4221,6 +4221,16 @@ public class Workspace extends SmoothPagedView } @Override + public boolean supportsAppInfoDropTarget() { + return false; + } + + @Override + public boolean supportsDeleteDropTarget() { + return true; + } + + @Override public void onFlingToDelete(DragObject d, int x, int y, PointF vec) { // Do nothing } |