diff options
Diffstat (limited to 'src/com/android/launcher3/Workspace.java')
-rw-r--r-- | src/com/android/launcher3/Workspace.java | 96 |
1 files changed, 40 insertions, 56 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 53a3f948d..35c8589d4 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -27,7 +27,6 @@ import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.WallpaperManager; -import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; @@ -47,9 +46,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; -import android.os.Handler.Callback; import android.os.IBinder; -import android.os.Message; import android.os.Parcelable; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; @@ -76,9 +73,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; /** * The workspace is a wide area with a wallpaper and a finite number of pages. @@ -212,7 +207,7 @@ public class Workspace extends SmoothPagedView private HolographicOutlineHelper mOutlineHelper; private Bitmap mDragOutline = null; - private final Rect mTempRect = new Rect(); + private static final Rect sTempRect = new Rect(); private final int[] mTempXY = new int[2]; private int[] mTempVisiblePagesRange = new int[2]; private boolean mOverscrollEffectSet; @@ -241,6 +236,8 @@ public class Workspace extends SmoothPagedView private DropTarget.DragEnforcer mDragEnforcer; private float mMaxDistanceForFolderCreation; + private final Canvas mCanvas = new Canvas(); + // Variables relating to touch disambiguation (scrolling workspace vs. scrolling a widget) private float mXDown; private float mYDown; @@ -1980,14 +1977,7 @@ public class Workspace extends SmoothPagedView * appearance). * */ - public void onDragStartedWithItem(View v) { - final Canvas canvas = new Canvas(); - - // The outline is used to visualize where the item will land if dropped - mDragOutline = createDragOutline(v, canvas, DRAG_BITMAP_PADDING); - } - - private Rect getDrawableBounds(Drawable d) { + private static Rect getDrawableBounds(Drawable d) { Rect bounds = new Rect(); d.copyBounds(bounds); if (bounds.width() == 0 || bounds.height() == 0) { @@ -2003,8 +1993,6 @@ public class Workspace extends SmoothPagedView } public void onExternalDragStartedWithItem(View v) { - final Canvas canvas = new Canvas(); - // Compose a drag bitmap with the view scaled to the icon size LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); @@ -2024,22 +2012,19 @@ public class Workspace extends SmoothPagedView // Compose the bitmap to create the icon from Bitmap b = Bitmap.createBitmap(bmpWidth, bmpHeight, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(b); - drawDragView(v, c, 0); - c.setBitmap(null); + mCanvas.setBitmap(b); + drawDragView(v, mCanvas, 0); + mCanvas.setBitmap(null); // The outline is used to visualize where the item will land if dropped - mDragOutline = createDragOutline(b, canvas, DRAG_BITMAP_PADDING, iconSize, iconSize, true); + mDragOutline = createDragOutline(b, DRAG_BITMAP_PADDING, iconSize, iconSize, true); } public void onDragStartedWithItem(PendingAddItemInfo info, Bitmap b, boolean clipAlpha) { - final Canvas canvas = new Canvas(); - int[] size = estimateItemSize(info.spanX, info.spanY, info, false); // The outline is used to visualize where the item will land if dropped - mDragOutline = createDragOutline(b, canvas, DRAG_BITMAP_PADDING, size[0], - size[1], clipAlpha); + mDragOutline = createDragOutline(b, DRAG_BITMAP_PADDING, size[0], size[1], clipAlpha); } public void exitWidgetResizeMode() { @@ -2537,8 +2522,8 @@ public class Workspace extends SmoothPagedView * @param destCanvas the canvas to draw on * @param padding the horizontal and vertical padding to use when drawing */ - private void drawDragView(View v, Canvas destCanvas, int padding) { - final Rect clipRect = mTempRect; + private static void drawDragView(View v, Canvas destCanvas, int padding) { + final Rect clipRect = sTempRect; v.getDrawingRect(clipRect); boolean textVisible = false; @@ -2577,7 +2562,7 @@ public class Workspace extends SmoothPagedView * @param expectedPadding padding to add to the drag view. If a different padding was used * its value will be changed */ - public Bitmap createDragBitmap(View v, Canvas canvas, AtomicInteger expectedPadding) { + public Bitmap createDragBitmap(View v, AtomicInteger expectedPadding) { Bitmap b; int padding = expectedPadding.get(); @@ -2592,9 +2577,9 @@ public class Workspace extends SmoothPagedView v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888); } - canvas.setBitmap(b); - drawDragView(v, canvas, padding); - canvas.setBitmap(null); + mCanvas.setBitmap(b); + drawDragView(v, mCanvas, padding); + mCanvas.setBitmap(null); return b; } @@ -2603,15 +2588,15 @@ public class Workspace extends SmoothPagedView * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location. * Responsibility for the bitmap is transferred to the caller. */ - private Bitmap createDragOutline(View v, Canvas canvas, int padding) { + private Bitmap createDragOutline(View v, int padding) { final int outlineColor = getResources().getColor(R.color.outline_color); final Bitmap b = Bitmap.createBitmap( v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888); - canvas.setBitmap(b); - drawDragView(v, canvas, padding); - mOutlineHelper.applyMediumExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor); - canvas.setBitmap(null); + mCanvas.setBitmap(b); + drawDragView(v, mCanvas, padding); + mOutlineHelper.applyExpensiveOutlineWithBlur(b, mCanvas, outlineColor, outlineColor); + mCanvas.setBitmap(null); return b; } @@ -2619,11 +2604,11 @@ public class Workspace extends SmoothPagedView * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location. * Responsibility for the bitmap is transferred to the caller. */ - private Bitmap createDragOutline(Bitmap orig, Canvas canvas, int padding, int w, int h, + private Bitmap createDragOutline(Bitmap orig, int padding, int w, int h, boolean clipAlpha) { final int outlineColor = getResources().getColor(R.color.outline_color); final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); - canvas.setBitmap(b); + mCanvas.setBitmap(b); Rect src = new Rect(0, 0, orig.getWidth(), orig.getHeight()); float scaleFactor = Math.min((w - padding) / (float) orig.getWidth(), @@ -2635,10 +2620,10 @@ public class Workspace extends SmoothPagedView // center the image dst.offset((w - scaledWidth) / 2, (h - scaledHeight) / 2); - canvas.drawBitmap(orig, src, dst, null); - mOutlineHelper.applyMediumExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor, + mCanvas.drawBitmap(orig, src, dst, null); + mOutlineHelper.applyExpensiveOutlineWithBlur(b, mCanvas, outlineColor, outlineColor, clipAlpha); - canvas.setBitmap(null); + mCanvas.setBitmap(null); return b; } @@ -2656,21 +2641,20 @@ public class Workspace extends SmoothPagedView CellLayout layout = (CellLayout) child.getParent().getParent(); layout.prepareChildForDrag(child); + beginDragShared(child, this); + } + + public void beginDragShared(View child, DragSource source) { child.clearFocus(); child.setPressed(false); - final Canvas canvas = new Canvas(); - // The outline is used to visualize where the item will land if dropped - mDragOutline = createDragOutline(child, canvas, DRAG_BITMAP_PADDING); - beginDragShared(child, this); - } + mDragOutline = createDragOutline(child, DRAG_BITMAP_PADDING); - public void beginDragShared(View child, DragSource source) { mLauncher.onDragStarted(child); // The drag bitmap follows the touch point around on the screen AtomicInteger padding = new AtomicInteger(DRAG_BITMAP_PADDING); - final Bitmap b = createDragBitmap(child, new Canvas(), padding); + final Bitmap b = createDragBitmap(child, padding); final int bmpWidth = b.getWidth(); final int bmpHeight = b.getHeight(); @@ -2684,7 +2668,7 @@ public class Workspace extends SmoothPagedView DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); Point dragVisualizeOffset = null; Rect dragRect = null; - if (child instanceof BubbleTextView || child instanceof PagedViewIcon) { + if (child instanceof BubbleTextView) { int iconSize = grid.iconSizePx; int top = child.getPaddingTop(); int left = (bmpWidth - iconSize) / 2; @@ -2703,7 +2687,7 @@ public class Workspace extends SmoothPagedView // Clear the pressed state if necessary if (child instanceof BubbleTextView) { BubbleTextView icon = (BubbleTextView) child; - icon.clearPressedOrFocusedBackground(); + icon.clearPressedBackground(); } else if (child instanceof FolderIcon) { // The folder cling isn't flexible enough to be shown in non-default workspace positions // Also if they are dragging it a folder, we assume they don't need to see the cling. @@ -2738,14 +2722,14 @@ public class Workspace extends SmoothPagedView // Compose a new drag bitmap that is of the icon size AtomicInteger padding = new AtomicInteger(DRAG_BITMAP_PADDING); - final Bitmap tmpB = createDragBitmap(child, new Canvas(), padding); + final Bitmap tmpB = createDragBitmap(child, padding); Bitmap b = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888); Paint p = new Paint(); p.setFilterBitmap(true); - Canvas c = new Canvas(b); - c.drawBitmap(tmpB, new Rect(0, 0, tmpB.getWidth(), tmpB.getHeight()), + mCanvas.setBitmap(b); + mCanvas.drawBitmap(tmpB, new Rect(0, 0, tmpB.getWidth(), tmpB.getHeight()), new Rect(0, 0, iconSize, iconSize), p); - c.setBitmap(null); + mCanvas.setBitmap(null); // Find the child's location on the screen int bmpWidth = tmpB.getWidth(); @@ -4020,12 +4004,12 @@ public class Workspace extends SmoothPagedView int height = MeasureSpec.makeMeasureSpec(unScaledSize[1], MeasureSpec.EXACTLY); Bitmap b = Bitmap.createBitmap(unScaledSize[0], unScaledSize[1], Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(b); + mCanvas.setBitmap(b); layout.measure(width, height); layout.layout(0, 0, unScaledSize[0], unScaledSize[1]); - layout.draw(c); - c.setBitmap(null); + layout.draw(mCanvas); + mCanvas.setBitmap(null); layout.setVisibility(visibility); return b; } |