summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-07-22 10:50:11 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-07-27 17:37:23 -0700
commita2454ad2d8dcffa94f670853eb464726c73597f1 (patch)
tree63899483e75a7faadff477cb117bf5c5cfc54962 /src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
parent71538da6e2e70af15684cc270a6e67c9b5a010dc (diff)
downloadandroid_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.tar.gz
android_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.tar.bz2
android_packages_apps_Trebuchet-a2454ad2d8dcffa94f670853eb464726c73597f1.zip
Launcher shortcuts animations update.
> The shortcut container closes with an animation > When opening/closing the animation only the icon scales and not the title and drag handle > When dragging the icon, it starts from the original icon position and moves under the user finger. The container grows to follow the drag view. Bug: 28980830 Change-Id: Ic0353c30b682d1f018cbf4d62e8a6e8e7d7d4664
Diffstat (limited to 'src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java')
-rw-r--r--src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
new file mode 100644
index 000000000..a25e475d4
--- /dev/null
+++ b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java
@@ -0,0 +1,103 @@
+/*
+ * 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.shortcuts;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.android.launcher3.BubbleTextView;
+import com.android.launcher3.HolographicOutlineHelper;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.graphics.DragPreviewProvider;
+
+/**
+ * Extension of {@link DragPreviewProvider} which generates bitmaps scaled to the default icon size.
+ */
+public class ShortcutDragPreviewProvider extends DragPreviewProvider {
+
+ private final Point mPositionShift;
+
+ public ShortcutDragPreviewProvider(View icon, Point shift) {
+ super(icon);
+ mPositionShift = shift;
+ }
+
+ @Override
+ public Bitmap createDragOutline(Canvas canvas) {
+ Bitmap b = drawScaledPreview(canvas);
+
+ final int outlineColor = mView.getResources().getColor(R.color.outline_color);
+ HolographicOutlineHelper.obtain(mView.getContext())
+ .applyExpensiveOutlineWithBlur(b, canvas, outlineColor, outlineColor);
+ canvas.setBitmap(null);
+ return b;
+ }
+
+ @Override
+ public Bitmap createDragBitmap(Canvas canvas) {
+ Bitmap b = drawScaledPreview(canvas);
+ canvas.setBitmap(null);
+ return b;
+ }
+
+ private Bitmap drawScaledPreview(Canvas canvas) {
+ Drawable d = mView.getBackground();
+ Rect bounds = getDrawableBounds(d);
+
+ int size = Launcher.getLauncher(mView.getContext()).getDeviceProfile().iconSizePx;
+
+ final Bitmap b = Bitmap.createBitmap(
+ size + DRAG_BITMAP_PADDING,
+ size + DRAG_BITMAP_PADDING,
+ Bitmap.Config.ARGB_8888);
+
+ canvas.setBitmap(b);
+ canvas.save(Canvas.MATRIX_SAVE_FLAG);
+ canvas.translate(DRAG_BITMAP_PADDING / 2, DRAG_BITMAP_PADDING / 2);
+ canvas.scale(((float) size) / bounds.width(), ((float) size) / bounds.height(), 0, 0);
+ canvas.translate(bounds.left, bounds.top);
+ d.draw(canvas);
+ canvas.restore();
+ return b;
+ }
+
+ @Override
+ public float getScaleAndPosition(Bitmap preview, int[] outPos) {
+ Launcher launcher = Launcher.getLauncher(mView.getContext());
+ int iconSize = getDrawableBounds(mView.getBackground()).width();
+ float scale = launcher.getDragLayer().getLocationInDragLayer(mView, outPos);
+
+ int iconLeft = mView.getPaddingStart();
+ if (Utilities.isRtl(mView.getResources())) {
+ iconLeft = mView.getWidth() - iconSize - iconLeft;
+ }
+
+ outPos[0] += Math.round(scale * iconLeft + (scale * iconSize - preview.getWidth()) / 2 +
+ mPositionShift.x);
+ outPos[1] += Math.round((scale * mView.getHeight() - preview.getHeight()) / 2
+ + mPositionShift.y);
+ float size = launcher.getDeviceProfile().iconSizePx;
+ return scale * iconSize / size;
+ }
+}