Loading res/layout-port/workspace_cling.xml +49 −11 Original line number Diff line number Diff line Loading @@ -22,20 +22,15 @@ <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="25dp" android:layout_marginEnd="25dp" android:layout_marginTop="310dp"> android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_marginStart="25dp" android:layout_marginEnd="25dp" android:layout_marginTop="30dp" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/cling_arrow_up" /> <LinearLayout android:paddingLeft="20dp" android:paddingRight="20dp" Loading @@ -56,14 +51,57 @@ android:layout_height="wrap_content" android:text="@string/workspace_cling_move_item" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/cling_arrow_down" /> </LinearLayout> <LinearLayout android:id="@+id/focused_hotseat_app_bubble" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_marginEnd="25dp" android:layout_marginBottom="100dp" android:orientation="vertical" android:visibility="gone"> <LinearLayout android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="20dp" android:paddingBottom="20dp" android:layout_width="240dp" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/cling"> <TextView android:id="@+id/focused_hotseat_app_title" style="@style/ClingTitleText" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/focused_hotseat_app_description" style="@style/ClingText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" android:layout_marginEnd="80dp" android:src="@drawable/cling_arrow_down" /> </LinearLayout> </FrameLayout> <Button style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:layout_marginEnd="20dp" android:layout_gravity="bottom|end" android:layout_marginStart="20dp" android:layout_gravity="bottom|start" android:onClick="dismissWorkspaceCling" /> </com.android.launcher3.Cling> res/values/styles.xml +0 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ <item name="android:layout_height">wrap_content</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#49C0EC</item> <item name="android:fontFamily">sans-serif-condensed</item> </style> <style name="ClingText"> <item name="android:layout_width">wrap_content</item> Loading src/com/android/launcher3/CellLayout.java +11 −23 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ public class CellLayout extends ViewGroup { private static final int INVALID_DIRECTION = -100; private DropTarget.DragEnforcer mDragEnforcer; private Rect mTempRect = new Rect(); private final static PorterDuffXfermode sAddBlendMode = new PorterDuffXfermode(PorterDuff.Mode.ADD); private final static Paint sPaint = new Paint(); Loading Loading @@ -397,25 +399,6 @@ public class CellLayout extends ViewGroup { } } public void scaleRect(Rect r, float scale) { if (scale != 1.0f) { r.left = (int) (r.left * scale + 0.5f); r.top = (int) (r.top * scale + 0.5f); r.right = (int) (r.right * scale + 0.5f); r.bottom = (int) (r.bottom * scale + 0.5f); } } Rect temp = new Rect(); void scaleRectAboutCenter(Rect in, Rect out, float scale) { int cx = in.centerX(); int cy = in.centerY(); out.set(in); out.offset(-cx, -cy); scaleRect(out, scale); out.offset(cx, cy); } @Override protected void onDraw(Canvas canvas) { // When we're large, we are either drawn in a "hover" state (ie when dragging an item to Loading Loading @@ -443,10 +426,11 @@ public class CellLayout extends ViewGroup { final float alpha = mDragOutlineAlphas[i]; if (alpha > 0) { final Rect r = mDragOutlines[i]; scaleRectAboutCenter(r, temp, getChildrenScale()); mTempRect.set(r); Utilities.scaleRectAboutCenter(mTempRect, getChildrenScale()); final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag(); paint.setAlpha((int)(alpha + .5f)); canvas.drawBitmap(b, null, temp, paint); canvas.drawBitmap(b, null, mTempRect, paint); } } Loading @@ -456,9 +440,13 @@ public class CellLayout extends ViewGroup { final int padding = mPressedOrFocusedIcon.getPressedOrFocusedBackgroundPadding(); final Bitmap b = mPressedOrFocusedIcon.getPressedOrFocusedBackground(); if (b != null) { int offset = getMeasuredWidth() - getPaddingLeft() - getPaddingRight() - (mCountX * mCellWidth); int left = getPaddingLeft() + (int) Math.ceil(offset / 2f); int top = getPaddingTop(); canvas.drawBitmap(b, mPressedOrFocusedIcon.getLeft() + getPaddingLeft() - padding, mPressedOrFocusedIcon.getTop() + getPaddingTop() - padding, mPressedOrFocusedIcon.getLeft() + left - padding, mPressedOrFocusedIcon.getTop() + top - padding, null); } } Loading src/com/android/launcher3/Cling.java +90 −10 Original line number Diff line number Diff line Loading @@ -18,17 +18,13 @@ package com.android.launcher3; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.ActivityOptions; import android.content.Context; import android.content.ComponentName; import android.content.Intent; 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.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.*; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; Loading @@ -37,8 +33,10 @@ import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.widget.FrameLayout; import android.widget.TextView; public class Cling extends FrameLayout implements Insettable, View.OnLongClickListener { public class Cling extends FrameLayout implements Insettable, View.OnClickListener, View.OnLongClickListener, View.OnTouchListener { static final String FIRST_RUN_CLING_DISMISSED_KEY = "cling_gel.first_run.dismissed"; static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; Loading Loading @@ -66,6 +64,12 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi private String mDrawIdentifier; private Drawable mBackground; private int[] mTouchDownPt = new int[2]; private Drawable mFocusedHotseatApp; private ComponentName mFocusedHotseatAppComponent; private Rect mFocusedHotseatAppBounds; private Paint mErasePaint; private Paint mBubblePaint; private Paint mDotPaint; Loading Loading @@ -100,6 +104,8 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi mScrimView = scrim; mBackgroundColor = 0xdd000000; setOnLongClickListener(this); setOnClickListener(this); setOnTouchListener(this); mErasePaint = new Paint(); mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); Loading @@ -121,6 +127,46 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi } } void setFocusedHotseatApp(int drawableId, int appRank, ComponentName cn, String title, String description) { // Get the app to draw Resources r = getResources(); int appIconId = drawableId; Hotseat hotseat = mLauncher.getHotseat(); if (hotseat != null && appIconId > -1 && appRank > -1 && !title.isEmpty() && !description.isEmpty()) { // Set the app bounds int x = hotseat.getCellXFromOrder(appRank); int y = hotseat.getCellYFromOrder(appRank); Rect pos = hotseat.getCellCoordinates(x, y); LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); mFocusedHotseatApp = getResources().getDrawable(appIconId); mFocusedHotseatAppComponent = cn; mFocusedHotseatAppBounds = new Rect(pos.left, pos.top, pos.left + Utilities.sIconTextureWidth, pos.top + Utilities.sIconTextureHeight); Utilities.scaleRectAboutCenter(mFocusedHotseatAppBounds, (grid.hotseatIconSize / grid.iconSize)); // Set the title TextView v = (TextView) findViewById(R.id.focused_hotseat_app_title); if (v != null) { v.setText(title); } // Set the description v = (TextView) findViewById(R.id.focused_hotseat_app_description); if (v != null) { v.setText(description); } // Show the bubble View bubble = findViewById(R.id.focused_hotseat_app_bubble); bubble.setVisibility(View.VISIBLE); } } void show(boolean animate, int duration) { setVisibility(View.VISIBLE); setLayerType(View.LAYER_TYPE_HARDWARE, null); Loading Loading @@ -274,6 +320,32 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi return super.onTouchEvent(event); }; @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { mTouchDownPt[0] = (int) ev.getX(); mTouchDownPt[1] = (int) ev.getY(); } return false; } @Override public void onClick(View v) { if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE)) { if (mFocusedHotseatAppBounds != null && mFocusedHotseatAppBounds.contains(mTouchDownPt[0], mTouchDownPt[1])) { // Launch the activity that is being highlighted Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(mFocusedHotseatAppComponent); intent.addCategory(Intent.CATEGORY_LAUNCHER); mLauncher.startActivity(intent, null); mLauncher.dismissWorkspaceCling(this); } } } @Override public boolean onLongClick(View v) { if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || Loading Loading @@ -354,8 +426,16 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi canvas.drawBitmap(eraseBg, 0, 0, null); eraseCanvas.setBitmap(null); eraseBg = null; } // Draw the focused hotseat app icon if (mFocusedHotseatAppBounds != null && mFocusedHotseatApp != null) { mFocusedHotseatApp.setBounds(mFocusedHotseatAppBounds.left, mFocusedHotseatAppBounds.top, mFocusedHotseatAppBounds.right, mFocusedHotseatAppBounds.bottom); mFocusedHotseatApp.setAlpha((int) (255 * alpha)); mFocusedHotseatApp.draw(canvas); } } canvas.restore(); } Loading src/com/android/launcher3/Hotseat.java +20 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,11 @@ import android.content.ComponentName; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; Loading Loading @@ -102,6 +101,25 @@ public class Hotseat extends FrameLayout { } } /** This returns the coordinates of an app in a given cell, relative to the DragLayer */ Rect getCellCoordinates(int cellX, int cellY) { Rect coords = new Rect(); mContent.cellToRect(cellX, cellY, 1, 1, coords); int[] hotseatInParent = new int[2]; Utilities.getDescendantCoordRelativeToParent(this, mLauncher.getDragLayer(), hotseatInParent, false); coords.offset(hotseatInParent[0], hotseatInParent[1]); // Center the icon int cWidth = mContent.getShortcutsAndWidgets().getCellContentWidth(); int cHeight = mContent.getShortcutsAndWidgets().getCellContentHeight(); int cellPaddingX = (int) Math.max(0, ((coords.width() - cWidth) / 2f)); int cellPaddingY = (int) Math.max(0, ((coords.height() - cHeight) / 2f)); coords.offset(cellPaddingX, cellPaddingY); return coords; } @Override protected void onFinishInflate() { super.onFinishInflate(); Loading Loading
res/layout-port/workspace_cling.xml +49 −11 Original line number Diff line number Diff line Loading @@ -22,20 +22,15 @@ <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="25dp" android:layout_marginEnd="25dp" android:layout_marginTop="310dp"> android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_marginStart="25dp" android:layout_marginEnd="25dp" android:layout_marginTop="30dp" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/cling_arrow_up" /> <LinearLayout android:paddingLeft="20dp" android:paddingRight="20dp" Loading @@ -56,14 +51,57 @@ android:layout_height="wrap_content" android:text="@string/workspace_cling_move_item" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/cling_arrow_down" /> </LinearLayout> <LinearLayout android:id="@+id/focused_hotseat_app_bubble" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_marginEnd="25dp" android:layout_marginBottom="100dp" android:orientation="vertical" android:visibility="gone"> <LinearLayout android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="20dp" android:paddingBottom="20dp" android:layout_width="240dp" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/cling"> <TextView android:id="@+id/focused_hotseat_app_title" style="@style/ClingTitleText" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/focused_hotseat_app_description" style="@style/ClingText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" android:layout_marginEnd="80dp" android:src="@drawable/cling_arrow_down" /> </LinearLayout> </FrameLayout> <Button style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:layout_marginEnd="20dp" android:layout_gravity="bottom|end" android:layout_marginStart="20dp" android:layout_gravity="bottom|start" android:onClick="dismissWorkspaceCling" /> </com.android.launcher3.Cling>
res/values/styles.xml +0 −1 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ <item name="android:layout_height">wrap_content</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#49C0EC</item> <item name="android:fontFamily">sans-serif-condensed</item> </style> <style name="ClingText"> <item name="android:layout_width">wrap_content</item> Loading
src/com/android/launcher3/CellLayout.java +11 −23 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ public class CellLayout extends ViewGroup { private static final int INVALID_DIRECTION = -100; private DropTarget.DragEnforcer mDragEnforcer; private Rect mTempRect = new Rect(); private final static PorterDuffXfermode sAddBlendMode = new PorterDuffXfermode(PorterDuff.Mode.ADD); private final static Paint sPaint = new Paint(); Loading Loading @@ -397,25 +399,6 @@ public class CellLayout extends ViewGroup { } } public void scaleRect(Rect r, float scale) { if (scale != 1.0f) { r.left = (int) (r.left * scale + 0.5f); r.top = (int) (r.top * scale + 0.5f); r.right = (int) (r.right * scale + 0.5f); r.bottom = (int) (r.bottom * scale + 0.5f); } } Rect temp = new Rect(); void scaleRectAboutCenter(Rect in, Rect out, float scale) { int cx = in.centerX(); int cy = in.centerY(); out.set(in); out.offset(-cx, -cy); scaleRect(out, scale); out.offset(cx, cy); } @Override protected void onDraw(Canvas canvas) { // When we're large, we are either drawn in a "hover" state (ie when dragging an item to Loading Loading @@ -443,10 +426,11 @@ public class CellLayout extends ViewGroup { final float alpha = mDragOutlineAlphas[i]; if (alpha > 0) { final Rect r = mDragOutlines[i]; scaleRectAboutCenter(r, temp, getChildrenScale()); mTempRect.set(r); Utilities.scaleRectAboutCenter(mTempRect, getChildrenScale()); final Bitmap b = (Bitmap) mDragOutlineAnims[i].getTag(); paint.setAlpha((int)(alpha + .5f)); canvas.drawBitmap(b, null, temp, paint); canvas.drawBitmap(b, null, mTempRect, paint); } } Loading @@ -456,9 +440,13 @@ public class CellLayout extends ViewGroup { final int padding = mPressedOrFocusedIcon.getPressedOrFocusedBackgroundPadding(); final Bitmap b = mPressedOrFocusedIcon.getPressedOrFocusedBackground(); if (b != null) { int offset = getMeasuredWidth() - getPaddingLeft() - getPaddingRight() - (mCountX * mCellWidth); int left = getPaddingLeft() + (int) Math.ceil(offset / 2f); int top = getPaddingTop(); canvas.drawBitmap(b, mPressedOrFocusedIcon.getLeft() + getPaddingLeft() - padding, mPressedOrFocusedIcon.getTop() + getPaddingTop() - padding, mPressedOrFocusedIcon.getLeft() + left - padding, mPressedOrFocusedIcon.getTop() + top - padding, null); } } Loading
src/com/android/launcher3/Cling.java +90 −10 Original line number Diff line number Diff line Loading @@ -18,17 +18,13 @@ package com.android.launcher3; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.ActivityOptions; import android.content.Context; import android.content.ComponentName; import android.content.Intent; 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.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.*; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; Loading @@ -37,8 +33,10 @@ import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.widget.FrameLayout; import android.widget.TextView; public class Cling extends FrameLayout implements Insettable, View.OnLongClickListener { public class Cling extends FrameLayout implements Insettable, View.OnClickListener, View.OnLongClickListener, View.OnTouchListener { static final String FIRST_RUN_CLING_DISMISSED_KEY = "cling_gel.first_run.dismissed"; static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; Loading Loading @@ -66,6 +64,12 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi private String mDrawIdentifier; private Drawable mBackground; private int[] mTouchDownPt = new int[2]; private Drawable mFocusedHotseatApp; private ComponentName mFocusedHotseatAppComponent; private Rect mFocusedHotseatAppBounds; private Paint mErasePaint; private Paint mBubblePaint; private Paint mDotPaint; Loading Loading @@ -100,6 +104,8 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi mScrimView = scrim; mBackgroundColor = 0xdd000000; setOnLongClickListener(this); setOnClickListener(this); setOnTouchListener(this); mErasePaint = new Paint(); mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY)); Loading @@ -121,6 +127,46 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi } } void setFocusedHotseatApp(int drawableId, int appRank, ComponentName cn, String title, String description) { // Get the app to draw Resources r = getResources(); int appIconId = drawableId; Hotseat hotseat = mLauncher.getHotseat(); if (hotseat != null && appIconId > -1 && appRank > -1 && !title.isEmpty() && !description.isEmpty()) { // Set the app bounds int x = hotseat.getCellXFromOrder(appRank); int y = hotseat.getCellYFromOrder(appRank); Rect pos = hotseat.getCellCoordinates(x, y); LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); mFocusedHotseatApp = getResources().getDrawable(appIconId); mFocusedHotseatAppComponent = cn; mFocusedHotseatAppBounds = new Rect(pos.left, pos.top, pos.left + Utilities.sIconTextureWidth, pos.top + Utilities.sIconTextureHeight); Utilities.scaleRectAboutCenter(mFocusedHotseatAppBounds, (grid.hotseatIconSize / grid.iconSize)); // Set the title TextView v = (TextView) findViewById(R.id.focused_hotseat_app_title); if (v != null) { v.setText(title); } // Set the description v = (TextView) findViewById(R.id.focused_hotseat_app_description); if (v != null) { v.setText(description); } // Show the bubble View bubble = findViewById(R.id.focused_hotseat_app_bubble); bubble.setVisibility(View.VISIBLE); } } void show(boolean animate, int duration) { setVisibility(View.VISIBLE); setLayerType(View.LAYER_TYPE_HARDWARE, null); Loading Loading @@ -274,6 +320,32 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi return super.onTouchEvent(event); }; @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { mTouchDownPt[0] = (int) ev.getX(); mTouchDownPt[1] = (int) ev.getY(); } return false; } @Override public void onClick(View v) { if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE)) { if (mFocusedHotseatAppBounds != null && mFocusedHotseatAppBounds.contains(mTouchDownPt[0], mTouchDownPt[1])) { // Launch the activity that is being highlighted Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(mFocusedHotseatAppComponent); intent.addCategory(Intent.CATEGORY_LAUNCHER); mLauncher.startActivity(intent, null); mLauncher.dismissWorkspaceCling(this); } } } @Override public boolean onLongClick(View v) { if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || Loading Loading @@ -354,8 +426,16 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi canvas.drawBitmap(eraseBg, 0, 0, null); eraseCanvas.setBitmap(null); eraseBg = null; } // Draw the focused hotseat app icon if (mFocusedHotseatAppBounds != null && mFocusedHotseatApp != null) { mFocusedHotseatApp.setBounds(mFocusedHotseatAppBounds.left, mFocusedHotseatAppBounds.top, mFocusedHotseatAppBounds.right, mFocusedHotseatAppBounds.bottom); mFocusedHotseatApp.setAlpha((int) (255 * alpha)); mFocusedHotseatApp.draw(canvas); } } canvas.restore(); } Loading
src/com/android/launcher3/Hotseat.java +20 −2 Original line number Diff line number Diff line Loading @@ -20,12 +20,11 @@ import android.content.ComponentName; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; Loading Loading @@ -102,6 +101,25 @@ public class Hotseat extends FrameLayout { } } /** This returns the coordinates of an app in a given cell, relative to the DragLayer */ Rect getCellCoordinates(int cellX, int cellY) { Rect coords = new Rect(); mContent.cellToRect(cellX, cellY, 1, 1, coords); int[] hotseatInParent = new int[2]; Utilities.getDescendantCoordRelativeToParent(this, mLauncher.getDragLayer(), hotseatInParent, false); coords.offset(hotseatInParent[0], hotseatInParent[1]); // Center the icon int cWidth = mContent.getShortcutsAndWidgets().getCellContentWidth(); int cHeight = mContent.getShortcutsAndWidgets().getCellContentHeight(); int cellPaddingX = (int) Math.max(0, ((coords.width() - cWidth) / 2f)); int cellPaddingY = (int) Math.max(0, ((coords.height() - cHeight) / 2f)); coords.offset(cellPaddingX, cellPaddingY); return coords; } @Override protected void onFinishInflate() { super.onFinishInflate(); Loading