summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/FolderIcon.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-05-31 14:30:45 -0700
committerAdam Cohen <adamcohen@google.com>2011-05-31 20:50:00 -0700
commit19072da7441e07d5e90026d9e9e1b38f11245e44 (patch)
tree4de0569f6b308532aee41ac90a31a13c102f7771 /src/com/android/launcher2/FolderIcon.java
parent41d5d6d0768b467f2c7c47ceb027495e4d3f5eff (diff)
downloadandroid_packages_apps_Trebuchet-19072da7441e07d5e90026d9e9e1b38f11245e44.tar.gz
android_packages_apps_Trebuchet-19072da7441e07d5e90026d9e9e1b38f11245e44.tar.bz2
android_packages_apps_Trebuchet-19072da7441e07d5e90026d9e9e1b38f11245e44.zip
Adding visual feedback for folder creation`
Change-Id: I47de931a07e3614e25f54d1ba5752a54993d6153
Diffstat (limited to 'src/com/android/launcher2/FolderIcon.java')
-rw-r--r--src/com/android/launcher2/FolderIcon.java184
1 files changed, 105 insertions, 79 deletions
diff --git a/src/com/android/launcher2/FolderIcon.java b/src/com/android/launcher2/FolderIcon.java
index e97676d48..952d704be 100644
--- a/src/com/android/launcher2/FolderIcon.java
+++ b/src/com/android/launcher2/FolderIcon.java
@@ -78,10 +78,7 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene
private int mOriginalWidth = -1;
private int mOriginalHeight = -1;
- private int mFolderLocX;
- private int mFolderLocY;
- private float mOuterRingScale;
- private float mInnerRingScale;
+ FolderRingAnimator mFolderRingAnimator = null;
public FolderIcon(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -117,18 +114,107 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene
folder.setFolderIcon(icon);
folder.bind(folderInfo);
icon.mFolder = folder;
-
+ icon.mFolderRingAnimator = new FolderRingAnimator(launcher, icon);
folderInfo.addListener(icon);
- if (sFolderOuterRingDrawable == null) {
- sFolderOuterRingDrawable =
- launcher.getResources().getDrawable(R.drawable.portal_ring_outer_holo);
+
+ return icon;
+ }
+
+ public static class FolderRingAnimator {
+ public int mFolderLocX;
+ public int mFolderLocY;
+ public float mOuterRingScale;
+ public float mInnerRingScale;
+ public FolderIcon mFolderIcon = null;
+ private Launcher mLauncher;
+
+ public FolderRingAnimator(Launcher launcher, FolderIcon folderIcon) {
+ mLauncher = launcher;
+ mFolderIcon = folderIcon;
+ if (sFolderOuterRingDrawable == null) {
+ sFolderOuterRingDrawable =
+ launcher.getResources().getDrawable(R.drawable.portal_ring_outer_holo);
+ }
+ if (sFolderInnerRingDrawable == null) {
+ sFolderInnerRingDrawable =
+ launcher.getResources().getDrawable(R.drawable.portal_ring_inner_holo);
+ }
}
- if (sFolderInnerRingDrawable == null) {
- sFolderInnerRingDrawable =
- launcher.getResources().getDrawable(R.drawable.portal_ring_inner_holo);
+ public void setLocation(int x, int y) {
+ mFolderLocX = x;
+ mFolderLocY = y;
+ }
+
+ public void animateToAcceptState() {
+ ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
+ va.setDuration(CONSUMPTION_ANIMATION_DURATION);
+ va.addUpdateListener(new AnimatorUpdateListener() {
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final float percent = (Float) animation.getAnimatedValue();
+ mOuterRingScale = OUTER_RING_BASELINE_SCALE + percent * OUTER_RING_GROWTH_FACTOR;
+ mInnerRingScale = INNER_RING_BASELINE_SCALE + percent * INNER_RING_GROWTH_FACTOR;
+ mLauncher.getWorkspace().invalidate();
+ if (mFolderIcon != null) {
+ mFolderIcon.invalidate();
+ }
+ }
+ });
+ va.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ // Instead of setting the background drawable to null, we set the color to
+ // transparent. Setting the background drawable to null results in onDraw
+ // not getting called.
+ if (mFolderIcon != null) {
+ mFolderIcon.setBackgroundColor(Color.TRANSPARENT);
+ mFolderIcon.requestLayout();
+ }
+ }
+ });
+ va.start();
+ }
+
+ public void animateToNaturalState() {
+ ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
+ va.setDuration(CONSUMPTION_ANIMATION_DURATION);
+ va.addUpdateListener(new AnimatorUpdateListener() {
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final float percent = (Float) animation.getAnimatedValue();
+ mOuterRingScale = OUTER_RING_BASELINE_SCALE + OUTER_RING_GROWTH_FACTOR
+ - percent * OUTER_RING_GROWTH_FACTOR;
+ mInnerRingScale = INNER_RING_BASELINE_SCALE + INNER_RING_GROWTH_FACTOR
+ - percent * INNER_RING_GROWTH_FACTOR;
+ mLauncher.getWorkspace().invalidate();
+ if (mFolderIcon != null) {
+ mFolderIcon.invalidate();
+ }
+ }
+ });
+ va.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (mFolderIcon != null) {
+ mFolderIcon.setBackgroundDrawable(sFolderInnerRingDrawable);
+ }
+ mLauncher.getWorkspace().hideFolderAccept(FolderRingAnimator.this);
+ }
+ });
+ va.start();
+ }
+
+ public void getLocation(int[] loc) {
+ loc[0] = mFolderLocX;
+ loc[1] = mFolderLocY;
+ }
+
+ public float getOuterRingScale() {
+ return mOuterRingScale;
+ }
+
+ public float getInnerRingScale() {
+ return mInnerRingScale;
}
- return icon;
}
private boolean willAcceptItem(ItemInfo item) {
@@ -166,69 +252,22 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene
mOriginalHeight = lp.height;
}
- private void animateToAcceptState() {
- ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
- va.setDuration(CONSUMPTION_ANIMATION_DURATION);
- va.addUpdateListener(new AnimatorUpdateListener() {
- public void onAnimationUpdate(ValueAnimator animation) {
- final float percent = (Float) animation.getAnimatedValue();
- mOuterRingScale = OUTER_RING_BASELINE_SCALE + percent * OUTER_RING_GROWTH_FACTOR;
- mInnerRingScale = INNER_RING_BASELINE_SCALE + percent * INNER_RING_GROWTH_FACTOR;
- mLauncher.getWorkspace().invalidate();
- invalidate();
- }
- });
- va.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- // Instead of setting the background drawable to null, we set the color to
- // transparent. Setting the background drawable to null results in onDraw
- // not getting called.
- setBackgroundColor(Color.TRANSPARENT);
- requestLayout();
- }
- });
- va.start();
- }
-
- private void animateToNaturalState() {
- ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
- va.setDuration(CONSUMPTION_ANIMATION_DURATION);
- va.addUpdateListener(new AnimatorUpdateListener() {
- public void onAnimationUpdate(ValueAnimator animation) {
- final float percent = (Float) animation.getAnimatedValue();
- mOuterRingScale = OUTER_RING_BASELINE_SCALE + OUTER_RING_GROWTH_FACTOR
- - percent * OUTER_RING_GROWTH_FACTOR;
- mInnerRingScale = INNER_RING_BASELINE_SCALE + INNER_RING_GROWTH_FACTOR
- - percent * INNER_RING_GROWTH_FACTOR;
- mLauncher.getWorkspace().invalidate();
- invalidate();
- }
- });
- va.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- setBackgroundDrawable(sFolderInnerRingDrawable);
- mLauncher.getWorkspace().hideFolderAccept(FolderIcon.this);
- }
- });
- va.start();
- }
-
private void determineFolderLocationInWorkspace() {
int tvLocation[] = new int[2];
int wsLocation[] = new int[2];
getLocationOnScreen(tvLocation);
mLauncher.getWorkspace().getLocationOnScreen(wsLocation);
- mFolderLocX = tvLocation[0] - wsLocation[0] + getMeasuredWidth() / 2;
- mFolderLocY = tvLocation[1] - wsLocation[1] + getMeasuredHeight() / 2;
+
+ int x = tvLocation[0] - wsLocation[0] + getMeasuredWidth() / 2;
+ int y = tvLocation[1] - wsLocation[1] + getMeasuredHeight() / 2;
+ mFolderRingAnimator.setLocation(x, y);
}
public void onDragEnter(DragObject d) {
if (!willAcceptItem((ItemInfo) d.dragInfo)) return;
determineFolderLocationInWorkspace();
- mLauncher.getWorkspace().showFolderAccept(this);
- animateToAcceptState();
+ mLauncher.getWorkspace().showFolderAccept(mFolderRingAnimator);
+ mFolderRingAnimator.animateToAcceptState();
}
public void onDragOver(DragObject d) {
@@ -236,26 +275,13 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene
public void onDragExit(DragObject d) {
if (!willAcceptItem((ItemInfo) d.dragInfo)) return;
- animateToNaturalState();
+ mFolderRingAnimator.animateToNaturalState();
}
public DropTarget getDropTargetDelegate(DragObject d) {
return null;
}
- public void getFolderLocation(int[] loc) {
- loc[0] = mFolderLocX;
- loc[1] = mFolderLocY;
- }
-
- public float getOuterRingScale() {
- return mOuterRingScale;
- }
-
- public float getInnerRingScale() {
- return mInnerRingScale;
- }
-
@Override
protected void onDraw(Canvas canvas) {
if (mFolder == null) return;