summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/CellLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/CellLayout.java')
-rw-r--r--src/com/android/launcher2/CellLayout.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index 8aae809b9..a6c2c5f75 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -28,6 +28,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PointF;
@@ -135,6 +136,9 @@ public class CellLayout extends ViewGroup {
private TimeInterpolator mEaseOutInterpolator;
private CellLayoutChildren mChildren;
+ private boolean mIsHotseat = false;
+ private final int mBubbleScalePercent;
+
public CellLayout(Context context) {
this(context, null);
}
@@ -180,6 +184,8 @@ public class CellLayout extends ViewGroup {
mNormalBackground.setFilterBitmap(true);
mActiveGlowBackground.setFilterBitmap(true);
+ mBubbleScalePercent = res.getInteger(R.integer.app_icon_hotseat_scale_percent);
+
// Initialize the data structures used for the drag visualization.
mCrosshairsDrawable = res.getDrawable(R.drawable.gardening_crosshairs);
@@ -492,6 +498,25 @@ public class CellLayout extends ViewGroup {
@Override
protected void dispatchDraw(Canvas canvas) {
+ // Debug drawing for hit space
+ if (false) {
+ final Rect frame = mRect;
+ for (int i = mChildren.getChildCount() - 1; i >= 0; i--) {
+ final View child = mChildren.getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+ if ((child.getVisibility() == VISIBLE || child.getAnimation() != null) &&
+ lp.isLockedToGrid) {
+ child.getHitRect(frame);
+ frame.offset(mPaddingLeft, mPaddingTop);
+
+ Paint p = new Paint();
+ p.setColor(Color.GREEN);
+ canvas.drawRect(frame, p);
+ }
+ }
+ }
+
super.dispatchDraw(canvas);
if (mForegroundAlpha > 0) {
mOverScrollForegroundDrawable.setBounds(mForegroundRect);
@@ -554,10 +579,55 @@ public class CellLayout extends ViewGroup {
return mCountY;
}
+ public void setIsHotseat(boolean isHotseat) {
+ mIsHotseat = isHotseat;
+ }
+
public boolean addViewToCellLayout(
View child, int index, int childId, LayoutParams params, boolean markCells) {
+ return addViewToCellLayout(child, index, childId, params, markCells, false);
+ }
+
+ public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params,
+ boolean markCells, boolean allApps) {
final LayoutParams lp = params;
+ // Hotseat icons - scale down and remove text
+ // Don't scale the all apps button
+ // scale percent set to -1 means do not scale
+ // Only scale BubbleTextViews
+ if (child instanceof BubbleTextView) {
+ BubbleTextView bubbleChild = (BubbleTextView) child;
+
+ if (mIsHotseat && !allApps && mBubbleScalePercent >= 0) {
+ // If we haven't measured the child yet, do it now
+ // (this happens if we're being dropped from all-apps
+ if ((bubbleChild.getMeasuredWidth() | bubbleChild.getMeasuredHeight()) == 0) {
+ getChildrenLayout().measureChild(bubbleChild);
+ }
+ int measuredWidth = bubbleChild.getMeasuredWidth();
+ int measuredHeight = bubbleChild.getMeasuredHeight();
+
+ float bubbleScale = mBubbleScalePercent / 100f;
+ bubbleChild.setPivotX(0);
+ bubbleChild.setPivotY(0);
+ bubbleChild.setScaleX(bubbleScale);
+ bubbleChild.setScaleY(bubbleScale);
+ bubbleChild.setTranslationX(measuredWidth * (1 - bubbleScale) / 2);
+ bubbleChild.setTranslationY(measuredHeight * (1 - bubbleScale) / 2);
+
+ bubbleChild.setTextColor(android.R.color.transparent);
+ } else {
+ bubbleChild.setScaleX(1f);
+ bubbleChild.setScaleY(1f);
+ bubbleChild.setTranslationX(0f);
+ bubbleChild.setTranslationY(0f);
+
+ bubbleChild.setTextColor(
+ getResources().getColor(R.color.workspace_icon_text_color));
+ }
+ }
+
// Generate an id for each view, this assumes we have at most 256x256 cells
// per workspace screen
if (lp.cellX >= 0 && lp.cellX <= mCountX - 1 && lp.cellY >= 0 && lp.cellY <= mCountY - 1) {