summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick Dubroy <dubroy@google.com>2010-09-22 15:04:29 -0700
committerPatrick Dubroy <dubroy@google.com>2010-09-22 16:23:09 -0700
commitdea9e93e4a7b78ae48f27ac0d5d117f6b393bba0 (patch)
treea73ca564f85b0b8eff3fd542659c55c0d1965297 /src
parent097b49c86eb0952f3febe28cc59743915a09a5e2 (diff)
downloadandroid_packages_apps_Trebuchet-dea9e93e4a7b78ae48f27ac0d5d117f6b393bba0.tar.gz
android_packages_apps_Trebuchet-dea9e93e4a7b78ae48f27ac0d5d117f6b393bba0.tar.bz2
android_packages_apps_Trebuchet-dea9e93e4a7b78ae48f27ac0d5d117f6b393bba0.zip
Fix misaligned drop targets in the all apps CAB
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/AllAppsPagedView.java49
-rw-r--r--src/com/android/launcher2/ApplicationInfoDropTarget.java45
-rw-r--r--src/com/android/launcher2/DeleteZone.java40
3 files changed, 97 insertions, 37 deletions
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index a9e4dfe85..a2a3793dd 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -21,14 +21,13 @@ import com.android.launcher.R;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.TypedArray;
-import android.graphics.Rect;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.Checkable;
import android.widget.TextView;
@@ -72,6 +71,12 @@ public class AllAppsPagedView extends PagedView
private final LayoutInflater mInflater;
+ private ViewGroup mOrigInfoButtonParent;
+ private LayoutParams mOrigInfoButtonLayoutParams;
+
+ private ViewGroup mOrigDeleteZoneParent;
+ private LayoutParams mOrigDeleteZoneLayoutParams;
+
public AllAppsPagedView(Context context) {
this(context, null);
}
@@ -400,10 +405,28 @@ public class AllAppsPagedView extends PagedView
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
mode.setTitle(R.string.cab_selection_text);
- menu.add(0, MENU_APP_INFO, 0, R.string.cab_menu_app_info)
- .setIcon(R.drawable.info_button);
- menu.add(0, MENU_DELETE_APP, 0, R.string.cab_menu_delete_app)
- .setIcon(R.drawable.delete_zone_selector);
+ // Until the workspace has a selection mode and the CAB supports drag-and-drop, we
+ // take a hybrid approach: grab the views from the workspace and stuff them into the CAB.
+ // When the action mode is done, restore the views to their original place in the toolbar.
+
+ ApplicationInfoDropTarget infoButton =
+ (ApplicationInfoDropTarget) mLauncher.findViewById(R.id.info_button);
+ mOrigInfoButtonParent = (ViewGroup) infoButton.getParent();
+ mOrigInfoButtonLayoutParams = infoButton.getLayoutParams();
+ mOrigInfoButtonParent.removeView(infoButton);
+ infoButton.setManageVisibility(false);
+ infoButton.setVisibility(View.VISIBLE);
+
+ DeleteZone deleteZone = (DeleteZone) mLauncher.findViewById(R.id.delete_zone);
+ mOrigDeleteZoneParent = (ViewGroup) deleteZone.getParent();
+ mOrigDeleteZoneLayoutParams = deleteZone.getLayoutParams();
+ mOrigDeleteZoneParent.removeView(deleteZone);
+ deleteZone.setManageVisibility(false);
+ deleteZone.setVisibility(View.VISIBLE);
+
+ menu.add(0, MENU_APP_INFO, 0, R.string.cab_menu_app_info).setActionView(infoButton);
+ menu.add(0, MENU_DELETE_APP, 0, R.string.cab_menu_delete_app).setActionView(deleteZone);
+
return true;
}
@@ -415,6 +438,20 @@ public class AllAppsPagedView extends PagedView
@Override
public void onDestroyActionMode(ActionMode mode) {
+ // Re-parent the drop targets into the toolbar, and restore their layout params
+ ApplicationInfoDropTarget infoButton =
+ (ApplicationInfoDropTarget) mLauncher.findViewById(R.id.info_button);
+ ((ViewGroup) infoButton.getParent()).removeView(infoButton);
+ mOrigInfoButtonParent.addView(infoButton, mOrigInfoButtonLayoutParams);
+ infoButton.setVisibility(View.GONE);
+ infoButton.setManageVisibility(true);
+
+ DeleteZone deleteZone = (DeleteZone) mLauncher.findViewById(R.id.delete_zone);
+ ((ViewGroup) deleteZone.getParent()).removeView(deleteZone);
+ mOrigDeleteZoneParent.addView(deleteZone, mOrigDeleteZoneLayoutParams);
+ deleteZone.setVisibility(View.GONE);
+ deleteZone.setManageVisibility(true);
+
mDragController.removeDropTarget(this);
endChoiceMode();
}
diff --git a/src/com/android/launcher2/ApplicationInfoDropTarget.java b/src/com/android/launcher2/ApplicationInfoDropTarget.java
index 99a52582e..0e342a7b4 100644
--- a/src/com/android/launcher2/ApplicationInfoDropTarget.java
+++ b/src/com/android/launcher2/ApplicationInfoDropTarget.java
@@ -21,7 +21,6 @@ import android.content.Context;
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.widget.ImageView;
@@ -32,10 +31,17 @@ import android.widget.ImageView;
*/
public class ApplicationInfoDropTarget extends ImageView implements DropTarget, DragController.DragListener {
private Launcher mLauncher;
- private DragController mDragController;
private boolean mActive = false;
- private View mHandle;
+ /**
+ * If true, this View responsible for managing its own visibility, and that of its handle.
+ * This is generally the case, but it will be set to false when this is part of the
+ * Contextual Action Bar.
+ */
+ private boolean mManageVisibility = true;
+
+ /** The view that this view should appear in the place of. */
+ private View mHandle = null;
private final Paint mPaint = new Paint();
@@ -47,11 +53,6 @@ public class ApplicationInfoDropTarget extends ImageView implements DropTarget,
super(context, attrs, defStyle);
}
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- }
-
/**
* Set the color that will be used as a filter over objects dragged over this object.
*/
@@ -92,7 +93,6 @@ public class ApplicationInfoDropTarget extends ImageView implements DropTarget,
public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset,
DragView dragView, Object dragInfo) {
- // TODO: Animate out
dragView.setPaint(null);
}
@@ -100,22 +100,23 @@ public class ApplicationInfoDropTarget extends ImageView implements DropTarget,
if (info != null) {
mActive = true;
- // TODO: Animate these in and out
-
- // Only show the info icon when an application is selected
- if (((ItemInfo)info).itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
- setVisibility(VISIBLE);
+ if (mManageVisibility) {
+ // Only show the info icon when an application is selected
+ if (((ItemInfo)info).itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+ setVisibility(VISIBLE);
+ }
+ mHandle.setVisibility(INVISIBLE);
}
- mHandle.setVisibility(INVISIBLE);
}
}
public void onDragEnd() {
if (mActive) {
mActive = false;
- // TODO: Animate these in and out
- setVisibility(GONE);
- mHandle.setVisibility(VISIBLE);
+ if (mManageVisibility) {
+ setVisibility(GONE);
+ mHandle.setVisibility(VISIBLE);
+ }
}
}
@@ -123,14 +124,14 @@ public class ApplicationInfoDropTarget extends ImageView implements DropTarget,
mLauncher = launcher;
}
- void setDragController(DragController dragController) {
- mDragController = dragController;
- }
-
void setHandle(View view) {
mHandle = view;
}
+ void setManageVisibility(boolean value) {
+ mManageVisibility = value;
+ }
+
@Override
public DropTarget getDropTargetDelegate(DragSource source, int x, int y, int xOffset, int yOffset,
DragView dragView, Object dragInfo) {
diff --git a/src/com/android/launcher2/DeleteZone.java b/src/com/android/launcher2/DeleteZone.java
index 01a20f76b..aeaf5a37e 100644
--- a/src/com/android/launcher2/DeleteZone.java
+++ b/src/com/android/launcher2/DeleteZone.java
@@ -23,7 +23,6 @@ import android.content.res.TypedArray;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
-import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.TransitionDrawable;
import android.util.AttributeSet;
@@ -45,6 +44,13 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
private Launcher mLauncher;
private boolean mTrashMode;
+ /**
+ * If true, this View responsible for managing its own visibility, and that of its handle.
+ * This is generally the case, but it will be set to false when this is part of the
+ * Contextual Action Bar.
+ */
+ private boolean mManageVisibility = true;
+
private AnimationSet mInAnimation;
private AnimationSet mOutAnimation;
private Animation mHandleInAnimation;
@@ -55,9 +61,11 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
private final RectF mRegion = new RectF();
private TransitionDrawable mTransition;
- private View mHandle;
private final Paint mTrashPaint = new Paint();
+ /** The View that this view will replace. */
+ private View mHandle = null;
+
public DeleteZone(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
@@ -71,6 +79,7 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DeleteZone, defStyle, 0);
mOrientation = a.getInt(R.styleable.DeleteZone_direction, ORIENTATION_HORIZONTAL);
a.recycle();
+
}
@Override
@@ -149,16 +158,21 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
final ItemInfo item = (ItemInfo) info;
if (item != null) {
mTrashMode = true;
- createAnimations();
final int[] location = mLocation;
getLocationOnScreen(location);
mRegion.set(location[0], location[1], location[0] + mRight - mLeft,
location[1] + mBottom - mTop);
mDragController.setDeleteRegion(mRegion);
+
+ // Make sure the icon is set to the default drawable, not the hover drawable
mTransition.resetTransition();
- startAnimation(mInAnimation);
- mHandle.startAnimation(mHandleOutAnimation);
- setVisibility(VISIBLE);
+
+ if (mManageVisibility) {
+ createAnimations();
+ startAnimation(mInAnimation);
+ mHandle.startAnimation(mHandleOutAnimation);
+ setVisibility(VISIBLE);
+ }
}
}
@@ -166,9 +180,13 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
if (mTrashMode) {
mTrashMode = false;
mDragController.setDeleteRegion(null);
- startAnimation(mOutAnimation);
- mHandle.startAnimation(mHandleInAnimation);
- setVisibility(GONE);
+
+ if (mOutAnimation != null) startAnimation(mOutAnimation);
+ if (mHandleInAnimation != null) mHandle.startAnimation(mHandleInAnimation);
+
+ if (mManageVisibility) {
+ setVisibility(GONE);
+ }
}
}
@@ -228,6 +246,10 @@ public class DeleteZone extends ImageView implements DropTarget, DragController.
mHandle = view;
}
+ void setManageVisibility(boolean value) {
+ mManageVisibility = value;
+ }
+
private static class FastTranslateAnimation extends TranslateAnimation {
public FastTranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
int fromYType, float fromYValue, int toYType, float toYValue) {