diff options
author | Adam Cohen <adamcohen@google.com> | 2011-06-01 15:30:43 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2011-06-08 15:21:29 -0700 |
commit | c0dcf597084d00e4c23a7fea5fd0738f6c095a6b (patch) | |
tree | 9dcecb4d43b4abc0263d47300536e87a72e33c58 /src/com/android/launcher2/FolderIcon.java | |
parent | 9578bde6a903925fbda2ecf738c7b00d6fa4026d (diff) | |
download | android_packages_apps_Trebuchet-c0dcf597084d00e4c23a7fea5fd0738f6c095a6b.tar.gz android_packages_apps_Trebuchet-c0dcf597084d00e4c23a7fea5fd0738f6c095a6b.tar.bz2 android_packages_apps_Trebuchet-c0dcf597084d00e4c23a7fea5fd0738f6c095a6b.zip |
Fixing up some Folder bugs
-> Rendering properly while in spring-loaded mode
-> Fixed bug where sometimes the folder's background would vanish
-> Fixed bug where the folder background was "stuck" in a fixed
location, not following the folder
-> Can now add to folders and create folders from spring-loaded mode
Change-Id: Ie1c5583a6230a192e6d07763d001b50053daca43
Diffstat (limited to 'src/com/android/launcher2/FolderIcon.java')
-rw-r--r-- | src/com/android/launcher2/FolderIcon.java | 115 |
1 files changed, 63 insertions, 52 deletions
diff --git a/src/com/android/launcher2/FolderIcon.java b/src/com/android/launcher2/FolderIcon.java index 952d704be..449068c56 100644 --- a/src/com/android/launcher2/FolderIcon.java +++ b/src/com/android/launcher2/FolderIcon.java @@ -16,8 +16,6 @@ package com.android.launcher2; -import java.util.ArrayList; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; @@ -36,12 +34,15 @@ import android.widget.FrameLayout; import android.widget.TextView; import com.android.launcher.R; +import com.android.launcher2.DropTarget.DragObject; import com.android.launcher2.FolderInfo.FolderListener; +import java.util.ArrayList; + /** * An icon that can appear on in the workspace representing an {@link UserFolder}. */ -public class FolderIcon extends FrameLayout implements DropTarget, FolderListener { +public class FolderIcon extends FrameLayout implements FolderListener { private Launcher mLauncher; Folder mFolder; FolderInfo mInfo; @@ -63,7 +64,7 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene private static final float OUTER_RING_GROWTH_FACTOR = 0.3f; // The amount of vertical spread between items in the stack [0...1] - private static final float PERSPECTIVE_SHIFT_FACTOR = 0.18f; + private static final float PERSPECTIVE_SHIFT_FACTOR = 0.3f; // The degree to which the item in the back of the stack is scaled [0...1] // (0 means it's not scaled at all, 1 means it's scaled to nothing) @@ -72,9 +73,6 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene // The percentage of the FolderIcons view that will be dedicated to the items preview private static final float SPACE_PERCENTAGE_FOR_ICONS = 0.8f; - public static Drawable sFolderOuterRingDrawable = null; - public static Drawable sFolderInnerRingDrawable = null; - private int mOriginalWidth = -1; private int mOriginalHeight = -1; @@ -127,29 +125,43 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene public float mInnerRingScale; public FolderIcon mFolderIcon = null; private Launcher mLauncher; + public Drawable mOuterRingDrawable = null; + public Drawable mInnerRingDrawable = null; + public static Drawable sSharedOuterRingDrawable = null; + public static Drawable sSharedInnerRingDrawable = null; + private ValueAnimator mAcceptAnimator; + private ValueAnimator mNeutralAnimator; public FolderRingAnimator(Launcher launcher, FolderIcon folderIcon) { mLauncher = launcher; mFolderIcon = folderIcon; - if (sFolderOuterRingDrawable == null) { - sFolderOuterRingDrawable = + mOuterRingDrawable = + launcher.getResources().getDrawable(R.drawable.portal_ring_outer_holo); + mInnerRingDrawable = + launcher.getResources().getDrawable(R.drawable.portal_ring_inner_holo); + if (sSharedOuterRingDrawable == null) { + sSharedOuterRingDrawable = launcher.getResources().getDrawable(R.drawable.portal_ring_outer_holo); } - if (sFolderInnerRingDrawable == null) { - sFolderInnerRingDrawable = + if (sSharedInnerRingDrawable == null) { + sSharedInnerRingDrawable = launcher.getResources().getDrawable(R.drawable.portal_ring_inner_holo); } } + // Location is expressed in window coordinates 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() { + if (mNeutralAnimator != null) { + mNeutralAnimator.cancel(); + } + mAcceptAnimator = ValueAnimator.ofFloat(0f, 1f); + mAcceptAnimator.setDuration(CONSUMPTION_ANIMATION_DURATION); + mAcceptAnimator.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { final float percent = (Float) animation.getAnimatedValue(); mOuterRingScale = OUTER_RING_BASELINE_SCALE + percent * OUTER_RING_GROWTH_FACTOR; @@ -160,25 +172,24 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene } } }); - va.addListener(new AnimatorListenerAdapter() { + mAcceptAnimator.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. + public void onAnimationStart(Animator animation) { if (mFolderIcon != null) { - mFolderIcon.setBackgroundColor(Color.TRANSPARENT); - mFolderIcon.requestLayout(); + mFolderIcon.setBackgroundDrawable(null); } } }); - va.start(); + mAcceptAnimator.start(); } public void animateToNaturalState() { - ValueAnimator va = ValueAnimator.ofFloat(0f, 1f); - va.setDuration(CONSUMPTION_ANIMATION_DURATION); - va.addUpdateListener(new AnimatorUpdateListener() { + if (mAcceptAnimator != null) { + mAcceptAnimator.cancel(); + } + mNeutralAnimator = ValueAnimator.ofFloat(0f, 1f); + mNeutralAnimator.setDuration(CONSUMPTION_ANIMATION_DURATION); + mNeutralAnimator.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { final float percent = (Float) animation.getAnimatedValue(); mOuterRingScale = OUTER_RING_BASELINE_SCALE + OUTER_RING_GROWTH_FACTOR @@ -191,18 +202,19 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene } } }); - va.addListener(new AnimatorListenerAdapter() { + mNeutralAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { if (mFolderIcon != null) { - mFolderIcon.setBackgroundDrawable(sFolderInnerRingDrawable); + mFolderIcon.setBackgroundDrawable(mInnerRingDrawable); } mLauncher.getWorkspace().hideFolderAccept(FolderRingAnimator.this); } }); - va.start(); + mNeutralAnimator.start(); } + // Location is expressed in window coordinates public void getLocation(int[] loc) { loc[0] = mFolderLocX; loc[1] = mFolderLocY; @@ -224,8 +236,8 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene !mFolder.isFull() && item != mInfo); } - public boolean acceptDrop(DragObject d) { - final ItemInfo item = (ItemInfo) d.dragInfo; + public boolean acceptDrop(Object dragInfo) { + final ItemInfo item = (ItemInfo) dragInfo; return willAcceptItem(item); } @@ -234,19 +246,6 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, item.cellX, item.cellY); } - public void onDrop(DragObject d) { - ShortcutInfo item; - if (d.dragInfo instanceof ApplicationInfo) { - // Came from all apps -- make a copy - item = ((ApplicationInfo) d.dragInfo).makeShortcut(); - } else { - item = (ShortcutInfo) d.dragInfo; - } - item.cellX = -1; - item.cellY = -1; - addItem(item); - } - void saveState(CellLayout.LayoutParams lp) { mOriginalWidth = lp.width; mOriginalHeight = lp.height; @@ -255,35 +254,48 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene private void determineFolderLocationInWorkspace() { int tvLocation[] = new int[2]; int wsLocation[] = new int[2]; - getLocationOnScreen(tvLocation); - mLauncher.getWorkspace().getLocationOnScreen(wsLocation); + getLocationInWindow(tvLocation); + mLauncher.getWorkspace().getLocationInWindow(wsLocation); 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; + public void onDragEnter(Object dragInfo) { + if (!willAcceptItem((ItemInfo) dragInfo)) return; determineFolderLocationInWorkspace(); mLauncher.getWorkspace().showFolderAccept(mFolderRingAnimator); mFolderRingAnimator.animateToAcceptState(); } - public void onDragOver(DragObject d) { + public void onDragOver(Object dragInfo) { } - public void onDragExit(DragObject d) { - if (!willAcceptItem((ItemInfo) d.dragInfo)) return; + public void onDragExit(Object dragInfo) { + if (!willAcceptItem((ItemInfo) dragInfo)) return; mFolderRingAnimator.animateToNaturalState(); } + public void onDrop(Object dragInfo) { + ShortcutInfo item; + if (dragInfo instanceof ApplicationInfo) { + // Came from all apps -- make a copy + item = ((ApplicationInfo) dragInfo).makeShortcut(); + } else { + item = (ShortcutInfo) dragInfo; + } + item.cellX = -1; + item.cellY = -1; + addItem(item); + } + public DropTarget getDropTargetDelegate(DragObject d) { return null; } @Override - protected void onDraw(Canvas canvas) { + protected void dispatchDraw(Canvas canvas) { if (mFolder == null) return; if (mFolder.getItemCount() == 0) return; @@ -337,7 +349,6 @@ public class FolderIcon extends FrameLayout implements DropTarget, FolderListene } canvas.restore(); } - canvas.restore(); } |