diff options
author | Raj Yengisetty <rajesh@cyngn.com> | 2015-04-09 17:54:00 -0700 |
---|---|---|
committer | Raj Yengisetty <rajesh@cyngn.com> | 2015-05-12 13:37:38 -0700 |
commit | 7f0a6204f692a1eda48e47a74e0481d6d7bc2191 (patch) | |
tree | a143e80d47a29026f39a35eb06e4dce93a174460 /src/com/android/launcher3/FolderIcon.java | |
parent | e301067845dd42ad778f4271e30e244bad457086 (diff) | |
download | android_packages_apps_Trebuchet-7f0a6204f692a1eda48e47a74e0481d6d7bc2191.tar.gz android_packages_apps_Trebuchet-7f0a6204f692a1eda48e47a74e0481d6d7bc2191.tar.bz2 android_packages_apps_Trebuchet-7f0a6204f692a1eda48e47a74e0481d6d7bc2191.zip |
Trebuchet: new folder UI v1
This change adds a number of new UI components and animations for
folders.
Designer: Hayden Schoen
Change-Id: I255cd4664432d84aebecf7e16ace5d9948573e27
Diffstat (limited to 'src/com/android/launcher3/FolderIcon.java')
-rw-r--r-- | src/com/android/launcher3/FolderIcon.java | 134 |
1 files changed, 102 insertions, 32 deletions
diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java index 032d2a6f2..34603b90f 100644 --- a/src/com/android/launcher3/FolderIcon.java +++ b/src/com/android/launcher3/FolderIcon.java @@ -39,6 +39,7 @@ import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import com.android.launcher3.DropTarget.DragObject; @@ -58,17 +59,17 @@ public class FolderIcon extends FrameLayout implements FolderListener { private CheckLongPressHelper mLongPressHelper; // The number of icons to display in the - private static final int NUM_ITEMS_IN_PREVIEW = 3; + private static final int NUM_ITEMS_IN_PREVIEW = 4; private static final int CONSUMPTION_ANIMATION_DURATION = 100; private static final int DROP_IN_ANIMATION_DURATION = 400; private static final int INITIAL_ITEM_ANIMATION_DURATION = 350; private static final int FINAL_ITEM_ANIMATION_DURATION = 200; // The degree to which the inner ring grows when accepting drop - private static final float INNER_RING_GROWTH_FACTOR = 0.15f; + private static final float INNER_RING_GROWTH_FACTOR = 0.0f; // The degree to which the outer ring is scaled in its natural state - private static final float OUTER_RING_GROWTH_FACTOR = 0.3f; + private static final float OUTER_RING_GROWTH_FACTOR = 0.15f; // The amount of vertical spread between items in the stack [0...1] private static final float PERSPECTIVE_SHIFT_FACTOR = 0.18f; @@ -88,7 +89,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { public static Drawable sSharedFolderLeaveBehind = null; - private ImageView mPreviewBackground; + private View mPreviewBackground; private BubbleTextView mFolderName; FolderRingAnimator mFolderRingAnimator = null; @@ -157,11 +158,11 @@ public class FolderIcon extends FrameLayout implements FolderListener { lp.topMargin = grid.iconSizePx + grid.iconDrawablePaddingPx; // Offset the preview background to center this view accordingly - icon.mPreviewBackground = (ImageView) icon.findViewById(R.id.preview_background); + icon.mPreviewBackground = icon.findViewById(R.id.preview_background); lp = (FrameLayout.LayoutParams) icon.mPreviewBackground.getLayoutParams(); - lp.topMargin = grid.folderBackgroundOffset; - lp.width = grid.folderIconSizePx; - lp.height = grid.folderIconSizePx; + lp.width = grid.iconSizePx; + lp.height = grid.iconSizePx; + icon.mPreviewBackground.setLayoutParams(lp); icon.setTag(folderInfo); icon.setOnClickListener(launcher); @@ -179,6 +180,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { folderInfo.addListener(icon); icon.setOnFocusChangeListener(launcher.mFocusHandler); + icon.setDrawingCacheEnabled(true); return icon; } @@ -217,11 +219,11 @@ public class FolderIcon extends FrameLayout implements FolderListener { LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - sPreviewSize = grid.folderIconSizePx; + sPreviewSize = grid.iconSizePx; sPreviewPadding = res.getDimensionPixelSize(R.dimen.folder_preview_padding); - sSharedOuterRingDrawable = res.getDrawable(R.drawable.portal_ring_outer_holo); - sSharedInnerRingDrawable = res.getDrawable(R.drawable.portal_ring_inner_nolip_holo); - sSharedFolderLeaveBehind = res.getDrawable(R.drawable.portal_ring_rest); + sSharedOuterRingDrawable = res.getDrawable(R.drawable.folder_fill_highlight); + sSharedInnerRingDrawable = null; + sSharedFolderLeaveBehind = res.getDrawable(R.drawable.folder_bg); sStaticValuesDirty = false; } } @@ -236,7 +238,10 @@ public class FolderIcon extends FrameLayout implements FolderListener { final int previewSize = sPreviewSize; mAcceptAnimator.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - final float percent = (Float) animation.getAnimatedValue(); + float percent = (Float) animation.getAnimatedValue(); + if (mFolderIcon != null) { + percent = 1f; + } mOuterRingSize = (1 + percent * OUTER_RING_GROWTH_FACTOR) * previewSize; mInnerRingSize = (1 + percent * INNER_RING_GROWTH_FACTOR) * previewSize; if (mCellLayout != null) { @@ -248,7 +253,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { @Override public void onAnimationStart(Animator animation) { if (mFolderIcon != null) { - mFolderIcon.mPreviewBackground.setVisibility(INVISIBLE); + mFolderIcon.mPreviewBackground.setBackground(null); } } }); @@ -265,7 +270,10 @@ public class FolderIcon extends FrameLayout implements FolderListener { final int previewSize = sPreviewSize; mNeutralAnimator.addUpdateListener(new AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { - final float percent = (Float) animation.getAnimatedValue(); + float percent = (Float) animation.getAnimatedValue(); + if (mFolderIcon != null) { + percent = 0f; + } mOuterRingSize = (1 + (1 - percent) * OUTER_RING_GROWTH_FACTOR) * previewSize; mInnerRingSize = (1 + (1 - percent) * INNER_RING_GROWTH_FACTOR) * previewSize; if (mCellLayout != null) { @@ -280,7 +288,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { mCellLayout.hideFolderAccept(FolderRingAnimator.this); } if (mFolderIcon != null) { - mFolderIcon.mPreviewBackground.setVisibility(VISIBLE); + mFolderIcon.mPreviewBackground.setBackgroundResource(R.drawable.folder_bg); } } }); @@ -353,6 +361,14 @@ public class FolderIcon extends FrameLayout implements FolderListener { mInfo.add(item); } + public void setPreviewBackground(int res) { + if (res < 0) { + mPreviewBackground.setBackground(null); + } else { + mPreviewBackground.setBackgroundResource(res); + } + } + public void onDragEnter(Object dragInfo) { if (mFolder.isDestroyed() || !willAcceptItem((ItemInfo) dragInfo)) return; CellLayout.LayoutParams lp = (CellLayout.LayoutParams) getLayoutParams(); @@ -537,7 +553,7 @@ public class FolderIcon extends FrameLayout implements FolderListener { mMaxPerspectiveShift = mBaselineIconSize * PERSPECTIVE_SHIFT_FACTOR; mPreviewOffsetX = (mTotalWidth - mAvailableSpaceInPreview) / 2; - mPreviewOffsetY = previewPadding + grid.folderBackgroundOffset; + mPreviewOffsetY = grid.folderBackgroundOffset; } } @@ -649,26 +665,80 @@ public class FolderIcon extends FrameLayout implements FolderListener { int nItemsInPreview = Math.min(items.size(), NUM_ITEMS_IN_PREVIEW); // Hidden folder - don't display Preview + View folderLock = findViewById(R.id.folder_lock_image); + folderLock.setVisibility(mInfo.hidden ? VISIBLE : INVISIBLE); + View appView = findViewById(R.id.app_0); + appView.setVisibility(mInfo.hidden ? INVISIBLE : VISIBLE); + appView = findViewById(R.id.app_1); + appView.setVisibility(mInfo.hidden ? INVISIBLE : VISIBLE); + appView = findViewById(R.id.app_2); + appView.setVisibility(mInfo.hidden ? INVISIBLE : VISIBLE); + appView = findViewById(R.id.app_3); + appView.setVisibility(mInfo.hidden ? INVISIBLE : VISIBLE); + if (mInfo.hidden) { - mParams = computePreviewItemDrawingParams(NUM_ITEMS_IN_PREVIEW/2, mParams); - canvas.save(); - canvas.translate(mParams.transX + mPreviewOffsetX, mParams.transY + mPreviewOffsetY); - canvas.scale(mParams.scale, mParams.scale); - Drawable lock = getResources().getDrawable(R.drawable.folder_lock); - lock.setBounds(0, 0, mIntrinsicIconSize, mIntrinsicIconSize); - lock.draw(canvas); - canvas.restore(); return; } if (!mAnimating) { - for (int i = nItemsInPreview - 1; i >= 0; i--) { - v = (TextView) items.get(i); - if (!mHiddenItems.contains(v.getTag())) { - d = getTopDrawable(v); - mParams = computePreviewItemDrawingParams(i, mParams); - mParams.drawable = d; - drawPreviewItem(canvas, mParams); + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + + // get dimen for the icon size + // ratio: iconsize = 3*padding + 2*small_icon_size + // padding*6.5 = small_icon_size + // so padding = folderIconSize / 16 + int padding = grid.iconSizePx / 16; + int smallIconSize = (int) (padding * 6.5); + + for (int i = NUM_ITEMS_IN_PREVIEW; i >= 0; i--) { + d = null; + if (i < items.size()) { + v = (TextView) items.get(i); + if (!mHiddenItems.contains(v.getTag())) { + d = getTopDrawable(v); + mParams = computePreviewItemDrawingParams(i, mParams); + mParams.drawable = d; + } + } + + ImageView appIcon = null; + int marginLeft = 0, marginRight = 0, marginTop = 0, marginBottom = 0; + switch(i) { + case 0: + appIcon = (ImageView) findViewById(R.id.app_0); + marginLeft = padding; + marginTop = padding; + break; + case 1: + appIcon = (ImageView) findViewById(R.id.app_1); + marginTop = padding; + marginRight = padding; + break; + case 2: + appIcon = (ImageView) findViewById(R.id.app_2); + marginBottom = padding; + marginLeft = padding; + break; + case 3: + appIcon = (ImageView) findViewById(R.id.app_3); + marginBottom = padding; + marginRight = padding; + break; + } + + if (appIcon != null) { + appIcon.setImageDrawable(d); + RelativeLayout.LayoutParams layoutParams + = (RelativeLayout.LayoutParams) appIcon.getLayoutParams(); + layoutParams.width = smallIconSize; + layoutParams.height = smallIconSize; + layoutParams.leftMargin = marginLeft; + layoutParams.rightMargin = marginRight; + layoutParams.topMargin = marginTop; + layoutParams.bottomMargin = marginBottom; + + appIcon.setLayoutParams(layoutParams); } } } else { |