diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-08-11 16:02:02 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-08-15 10:08:16 -0700 |
commit | 06e21a25877db7207b5393ab163028bb4116df4f (patch) | |
tree | 561c8fa4afcbeb024082f2c6947a538cd54eff9e /src/com/android/launcher3/widget/PendingItemPreviewProvider.java | |
parent | 8769b44ae073ea7ec5ba5b7687105df6d35c3282 (diff) | |
download | android_packages_apps_Trebuchet-06e21a25877db7207b5393ab163028bb4116df4f.tar.gz android_packages_apps_Trebuchet-06e21a25877db7207b5393ab163028bb4116df4f.tar.bz2 android_packages_apps_Trebuchet-06e21a25877db7207b5393ab163028bb4116df4f.zip |
Moving the state changes during drag-n-drop from startDrag to onDragStart
This will allow drag controller to optinally defer drag, based on some
threshold, by simply deferring the callback onDragStart
Change-Id: I17c06a15e2092b9797c7e57529b12a53d2acae6e
Diffstat (limited to 'src/com/android/launcher3/widget/PendingItemPreviewProvider.java')
-rw-r--r-- | src/com/android/launcher3/widget/PendingItemPreviewProvider.java | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/com/android/launcher3/widget/PendingItemPreviewProvider.java b/src/com/android/launcher3/widget/PendingItemPreviewProvider.java new file mode 100644 index 000000000..8739390c4 --- /dev/null +++ b/src/com/android/launcher3/widget/PendingItemPreviewProvider.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.widget; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.view.View; + +import com.android.launcher3.HolographicOutlineHelper; +import com.android.launcher3.Launcher; +import com.android.launcher3.PendingAddItemInfo; +import com.android.launcher3.R; +import com.android.launcher3.Workspace; +import com.android.launcher3.graphics.DragPreviewProvider; + +/** + * Extension of {@link DragPreviewProvider} with logic specific to pending widgets/shortcuts + * dragged from the widget tray. + */ +public class PendingItemPreviewProvider extends DragPreviewProvider { + + private final PendingAddItemInfo mAddInfo; + private final Bitmap mPreviewBitmap; + + public PendingItemPreviewProvider(View view, PendingAddItemInfo addInfo, Bitmap preview) { + super(view); + mAddInfo = addInfo; + mPreviewBitmap = preview; + } + + @Override + public Bitmap createDragOutline(Canvas canvas) { + Workspace workspace = Launcher.getLauncher(mView.getContext()).getWorkspace(); + int[] size = workspace.estimateItemSize(mAddInfo, false); + + int w = size[0]; + int h = size[1]; + final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + canvas.setBitmap(b); + + Rect src = new Rect(0, 0, mPreviewBitmap.getWidth(), mPreviewBitmap.getHeight()); + float scaleFactor = Math.min((w - DRAG_BITMAP_PADDING) / (float) mPreviewBitmap.getWidth(), + (h - DRAG_BITMAP_PADDING) / (float) mPreviewBitmap.getHeight()); + int scaledWidth = (int) (scaleFactor * mPreviewBitmap.getWidth()); + int scaledHeight = (int) (scaleFactor * mPreviewBitmap.getHeight()); + Rect dst = new Rect(0, 0, scaledWidth, scaledHeight); + + // center the image + dst.offset((w - scaledWidth) / 2, (h - scaledHeight) / 2); + + canvas.drawBitmap(mPreviewBitmap, src, dst, null); + + // Don't clip alpha values for the drag outline if we're using the default widget preview + boolean clipAlpha = !(mAddInfo instanceof PendingAddWidgetInfo && + (((PendingAddWidgetInfo) mAddInfo).previewImage == 0)); + final int outlineColor = mView.getResources().getColor(R.color.outline_color); + HolographicOutlineHelper.obtain(mView.getContext()) + .applyExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor, clipAlpha); + canvas.setBitmap(null); + + return b; + } +} |