diff options
Diffstat (limited to 'src/com/android/launcher3/FolderIcon.java')
-rw-r--r-- | src/com/android/launcher3/FolderIcon.java | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java index 78026f162..a359f1180 100644 --- a/src/com/android/launcher3/FolderIcon.java +++ b/src/com/android/launcher3/FolderIcon.java @@ -33,6 +33,7 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; +import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; @@ -70,7 +71,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { 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.24f; + private static final float PERSPECTIVE_SHIFT_FACTOR = 0.18f; // Flag as to whether or not to draw an outer ring. Currently none is designed. public static final boolean HAS_OUTER_RING = true; @@ -105,6 +106,8 @@ public class FolderIcon extends FrameLayout implements FolderListener { boolean mAnimating = false; private Rect mOldBounds = new Rect(); + private float mSlop; + private PreviewItemDrawingParams mParams = new PreviewItemDrawingParams(0, 0, 0, 0); private PreviewItemDrawingParams mAnimParams = new PreviewItemDrawingParams(0, 0, 0, 0); private ArrayList<ShortcutInfo> mHiddenItems = new ArrayList<ShortcutInfo>(); @@ -130,7 +133,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { final ViewGroup cellLayoutChildren = (ViewGroup) getParent(); final ViewGroup cellLayout = (ViewGroup) cellLayoutChildren.getParent(); final Workspace workspace = (Workspace) cellLayout.getParent(); - return !workspace.isSmall(); + return !workspace.workspaceInModalState(); } static FolderIcon fromXml(int resId, Launcher launcher, ViewGroup group, @@ -175,6 +178,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { icon.mFolderRingAnimator = new FolderRingAnimator(launcher, icon); folderInfo.addListener(icon); + icon.setOnFocusChangeListener(launcher.mFocusHandler); return icon; } @@ -308,7 +312,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { } } - Folder getFolder() { + public Folder getFolder() { return mFolder; } @@ -341,7 +345,12 @@ public class FolderIcon extends FrameLayout implements FolderListener { mFolderRingAnimator.animateToAcceptState(); layout.showFolderAccept(mFolderRingAnimator); mOpenAlarm.setOnAlarmListener(mOnOpenListener); - if (SPRING_LOADING_ENABLED) { + if (SPRING_LOADING_ENABLED && + ((dragInfo instanceof AppInfo) || (dragInfo instanceof ShortcutInfo))) { + // TODO: we currently don't support spring-loading for PendingAddShortcutInfos even + // though widget-style shortcuts can be added to folders. The issue is that we need + // to deal with configuration activities which are currently handled in + // Workspace#onDropExternal. mOpenAlarm.setAlarm(ON_OPEN_DELAY); } mDragInfo = (ItemInfo) dragInfo; @@ -359,6 +368,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { item.spanX = 1; item.spanY = 1; } else { + // ShortcutInfo item = (ShortcutInfo) mDragInfo; } mFolder.beginExternalDrag(item); @@ -371,7 +381,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { float scaleRelativeToDragLayer, Runnable postAnimationRunnable) { // These correspond two the drawable and view that the icon was dropped _onto_ - Drawable animateDrawable = ((TextView) destView).getCompoundDrawables()[1]; + Drawable animateDrawable = getTopDrawable((TextView) destView); computePreviewDrawingParams(animateDrawable.getIntrinsicWidth(), destView.getMeasuredWidth()); @@ -385,8 +395,8 @@ public class FolderIcon extends FrameLayout implements FolderListener { } public void performDestroyAnimation(final View finalView, Runnable onCompleteRunnable) { - Drawable animateDrawable = ((TextView) finalView).getCompoundDrawables()[1]; - computePreviewDrawingParams(animateDrawable.getIntrinsicWidth(), + Drawable animateDrawable = getTopDrawable((TextView) finalView); + computePreviewDrawingParams(animateDrawable.getIntrinsicWidth(), finalView.getMeasuredWidth()); // This will animate the first item from it's position as an icon into its @@ -492,6 +502,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { int adjustedAvailableSpace = (int) ((mAvailableSpaceInPreview / 2) * (1 + 0.8f)); int unscaledHeight = (int) (mIntrinsicIconSize * (1 + PERSPECTIVE_SHIFT_FACTOR)); + mBaselineIconScale = (1.0f * adjustedAvailableSpace / unscaledHeight); mBaselineIconSize = (int) (mIntrinsicIconSize * mBaselineIconScale); @@ -546,7 +557,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { // We want to imagine our coordinates from the bottom left, growing up and to the // right. This is natural for the x-axis, but for the y-axis, we have to invert things. float transY = mAvailableSpaceInPreview - (offset + scaledSize + scaleOffsetCorrection) + getPaddingTop(); - float transX = offset + scaleOffsetCorrection; + float transX = (mAvailableSpaceInPreview - scaledSize) / 2; float totalScale = mBaselineIconScale * scale; final int overlayAlpha = (int) (80 * (1 - r)); @@ -570,10 +581,18 @@ public class FolderIcon extends FrameLayout implements FolderListener { if (d != null) { mOldBounds.set(d.getBounds()); d.setBounds(0, 0, mIntrinsicIconSize, mIntrinsicIconSize); - d.setColorFilter(Color.argb(params.overlayAlpha, 255, 255, 255), - PorterDuff.Mode.SRC_ATOP); - d.draw(canvas); - d.clearColorFilter(); + if (d instanceof FastBitmapDrawable) { + FastBitmapDrawable fd = (FastBitmapDrawable) d; + int oldBrightness = fd.getBrightness(); + fd.setBrightness(params.overlayAlpha); + d.draw(canvas); + fd.setBrightness(oldBrightness); + } else { + d.setColorFilter(Color.argb(params.overlayAlpha, 255, 255, 255), + PorterDuff.Mode.SRC_ATOP); + d.draw(canvas); + d.clearColorFilter(); + } d.setBounds(mOldBounds); } canvas.restore(); @@ -595,7 +614,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { computePreviewDrawingParams(mAnimParams.drawable); } else { v = (TextView) items.get(0); - d = v.getCompoundDrawables()[1]; + d = getTopDrawable(v); computePreviewDrawingParams(d); } @@ -604,7 +623,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { for (int i = nItemsInPreview - 1; i >= 0; i--) { v = (TextView) items.get(i); if (!mHiddenItems.contains(v.getTag())) { - d = v.getCompoundDrawables()[1]; + d = getTopDrawable(v); mParams = computePreviewItemDrawingParams(i, mParams); mParams.drawable = d; drawPreviewItem(canvas, mParams); @@ -615,6 +634,11 @@ public class FolderIcon extends FrameLayout implements FolderListener { } } + private Drawable getTopDrawable(TextView v) { + Drawable d = v.getCompoundDrawables()[1]; + return (d instanceof PreloadIconDrawable) ? ((PreloadIconDrawable) d).mIcon : d; + } + private void animateFirstItem(final Drawable d, int duration, final boolean reverse, final Runnable onCompleteRunnable) { final PreviewItemDrawingParams finalParams = computePreviewItemDrawingParams(0, null); @@ -703,11 +727,22 @@ public class FolderIcon extends FrameLayout implements FolderListener { case MotionEvent.ACTION_UP: mLongPressHelper.cancelLongPress(); break; + case MotionEvent.ACTION_MOVE: + if (!Utilities.pointInView(this, event.getX(), event.getY(), mSlop)) { + mLongPressHelper.cancelLongPress(); + } + break; } return result; } @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + } + + @Override public void cancelLongPress() { super.cancelLongPress(); |