From d6a33c6f348d1316e0fdc519eda43468fcdcbfe7 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Wed, 6 Feb 2013 15:40:46 -0800 Subject: [PATCH] Fix Launcher drop targets for App remove / uninstall / info - make the code aware of the layout direction - use start drawables - fix animation drop rect Change-Id: I35f01b9079aef418c0a22b39e32344c7bf5a0660 --- res/layout/drop_target_bar.xml | 4 +- .../android/launcher2/ButtonDropTarget.java | 37 ++++++++++++++----- .../android/launcher2/DeleteDropTarget.java | 4 +- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/res/layout/drop_target_bar.xml b/res/layout/drop_target_bar.xml index 5fcddc9a01..ca3f554047 100644 --- a/res/layout/drop_target_bar.xml +++ b/res/layout/drop_target_bar.xml @@ -23,7 +23,7 @@ style="@style/DropTargetButton" android:id="@+id/delete_target_text" android:text="@string/delete_zone_label_workspace" - android:drawableLeft="@drawable/remove_target_selector" /> + android:drawableStart="@drawable/remove_target_selector" /> + android:drawableStart="@drawable/info_target_selector" /> \ No newline at end of file diff --git a/src/com/android/launcher2/ButtonDropTarget.java b/src/com/android/launcher2/ButtonDropTarget.java index 1c9fa5f957..ff0813add0 100644 --- a/src/com/android/launcher2/ButtonDropTarget.java +++ b/src/com/android/launcher2/ButtonDropTarget.java @@ -22,6 +22,7 @@ import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import android.view.View; import android.widget.TextView; import com.android.launcher.R; @@ -70,7 +71,7 @@ public class ButtonDropTarget extends TextView implements DropTarget, DragContro } protected Drawable getCurrentDrawable() { - Drawable[] drawables = getCompoundDrawables(); + Drawable[] drawables = getCompoundDrawablesRelative(); for (int i = 0; i < drawables.length; ++i) { if (drawables[i] != null) { return drawables[i]; @@ -116,21 +117,39 @@ public class ButtonDropTarget extends TextView implements DropTarget, DragContro outRect.bottom += mBottomDragPadding; } - Rect getIconRect(int itemWidth, int itemHeight, int drawableWidth, int drawableHeight) { + private boolean isRtl() { + return (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL); + } + + Rect getIconRect(int viewWidth, int viewHeight, int drawableWidth, int drawableHeight) { DragLayer dragLayer = mLauncher.getDragLayer(); // Find the rect to animate to (the view is center aligned) Rect to = new Rect(); dragLayer.getViewRectRelativeToSelf(this, to); - int width = drawableWidth; - int height = drawableHeight; - int left = to.left + getPaddingLeft(); - int top = to.top + (getMeasuredHeight() - height) / 2; - to.set(left, top, left + width, top + height); + + final int width = drawableWidth; + final int height = drawableHeight; + + final int left; + final int right; + + if (isRtl()) { + right = to.right - getPaddingRight(); + left = right - width; + } else { + left = to.left + getPaddingLeft(); + right = left + width; + } + + final int top = to.top + (getMeasuredHeight() - height) / 2; + final int bottom = top + height; + + to.set(left, top, right, bottom); // Center the destination rect about the trash icon - int xOffset = (int) -(itemWidth - width) / 2; - int yOffset = (int) -(itemHeight - height) / 2; + final int xOffset = (int) -(viewWidth - width) / 2; + final int yOffset = (int) -(viewHeight - height) / 2; to.offset(xOffset, yOffset); return to; diff --git a/src/com/android/launcher2/DeleteDropTarget.java b/src/com/android/launcher2/DeleteDropTarget.java index 39a0b09c79..d575b8f58f 100644 --- a/src/com/android/launcher2/DeleteDropTarget.java +++ b/src/com/android/launcher2/DeleteDropTarget.java @@ -154,9 +154,9 @@ public class DeleteDropTarget extends ButtonDropTarget { } if (isUninstall) { - setCompoundDrawablesWithIntrinsicBounds(mUninstallDrawable, null, null, null); + setCompoundDrawablesRelativeWithIntrinsicBounds(mUninstallDrawable, null, null, null); } else { - setCompoundDrawablesWithIntrinsicBounds(mRemoveDrawable, null, null, null); + setCompoundDrawablesRelativeWithIntrinsicBounds(mRemoveDrawable, null, null, null); } mCurrentDrawable = (TransitionDrawable) getCurrentDrawable();