Loading quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt +12 −11 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.RectF import com.android.launcher3.R import com.android.launcher3.Utilities.mapRange import com.android.launcher3.Utilities.mapToRange Loading @@ -30,7 +31,8 @@ import com.android.launcher3.util.DisplayController /** Helps draw the taskbar background, made up of a rectangle plus two inverted rounded corners. */ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { val paint: Paint = Paint() val paint = Paint() val lastDrawnTransientRect = RectF() var backgroundHeight = context.deviceProfile.taskbarSize.toFloat() var translationYForSwipe = 0f Loading Loading @@ -131,7 +133,11 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { val radius = newBackgroundHeight / 2f val bottomMarginProgress = bottomMargin * ((1f - progress) / 2f) canvas.translate(0f, canvas.height - bottomMargin + bottomMarginProgress) // Aligns the bottom with the bottom of the stashed handle. val bottom = canvas.height - bottomMargin + bottomMarginProgress + (-mapRange(1f - progress, 0f, stashedHandleHeight / 2f) + translationYForSwipe) // Draw shadow. val shadowAlpha = Loading @@ -143,19 +149,14 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { setColorAlphaBound(Color.BLACK, Math.round(shadowAlpha)) ) // Aligns the bottom with the bottom of the stashed handle. val bottom = (-mapRange(1f - progress, 0f, stashedHandleHeight / 2f) + translationYForSwipe) canvas.drawRoundRect( lastDrawnTransientRect.set( transientBackgroundBounds.left + halfWidthDelta, bottom - newBackgroundHeight, transientBackgroundBounds.right - halfWidthDelta, bottom, radius, radius, paint bottom ) canvas.drawRoundRect(lastDrawnTransientRect, radius, radius, paint) } canvas.restore() } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +15 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.util.Pair; Loading Loading @@ -69,11 +70,13 @@ import com.android.launcher3.shortcuts.DeepShortcutView; import com.android.launcher3.shortcuts.ShortcutDragPreviewProvider; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.IntSet; import com.android.launcher3.util.ItemInfoMatcher; import com.android.quickstep.util.LogUtils; import com.android.quickstep.util.MultiValueUpdateListener; import com.android.systemui.shared.recents.model.Task; import com.android.wm.shell.draganddrop.DragAndDropConstants; import java.io.PrintWriter; import java.util.Arrays; Loading Loading @@ -310,9 +313,6 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im if (mDisallowGlobalDrag) { AbstractFloatingView.closeAllOpenViewsExcept(mActivity, TYPE_TASKBAR_ALL_APPS); } else { // stash the transient taskbar mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); AbstractFloatingView.closeAllOpenViews(mActivity); } Loading Loading @@ -395,6 +395,15 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im com.android.launcher3.logging.InstanceId launcherInstanceId = instanceIds.second; intent.putExtra(ClipDescription.EXTRA_LOGGING_INSTANCE_ID, internalInstanceId); if (DisplayController.isTransientTaskbar(mActivity)) { // Tell WM Shell to ignore drag events in the provided transient taskbar region. TaskbarDragLayer dragLayer = mControllers.taskbarActivityContext.getDragLayer(); int[] locationOnScreen = dragLayer.getLocationOnScreen(); RectF disallowExternalDropRegion = new RectF(dragLayer.getLastDrawnTransientRect()); disallowExternalDropRegion.offset(locationOnScreen[0], locationOnScreen[1]); intent.putExtra(DragAndDropConstants.EXTRA_DISALLOW_HIT_REGION, disallowExternalDropRegion); } ClipData clipData = new ClipData(clipDescription, new ClipData.Item(intent)); if (btv.startDragAndDrop(clipData, shadowBuilder, null /* localState */, Loading @@ -421,9 +430,6 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im if (dragEvent.getResult()) { maybeOnDragEnd(); } else { // un-stash the transient taskbar in case drag and drop was canceled mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false); // This will take care of calling maybeOnDragEnd() after the animation animateGlobalDragViewToOriginalPosition(btv, dragEvent); } Loading Loading @@ -451,6 +457,9 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im mControllers.taskbarAutohideSuspendController.updateFlag( TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_DRAGGING, false); mActivity.onDragEnd(); // Note, this must be done last to ensure no AutohideSuspendFlags are active, as that // will prevent us from stashing until the timeout. mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +6 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.KeyEvent.KEYCODE_BACK; import android.content.Context; import android.graphics.Canvas; import android.graphics.RectF; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; Loading Loading @@ -183,6 +184,11 @@ public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> { invalidate(); } /** Returns the bounds in DragLayer coordinates of where the transient background was drawn. */ protected RectF getLastDrawnTransientRect() { return mBackgroundRenderer.getLastDrawnTransientRect(); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { TestLogging.recordMotionEvent(TestProtocol.SEQUENCE_MAIN, "Touch event", ev); Loading Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt +12 −11 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.RectF import com.android.launcher3.R import com.android.launcher3.Utilities.mapRange import com.android.launcher3.Utilities.mapToRange Loading @@ -30,7 +31,8 @@ import com.android.launcher3.util.DisplayController /** Helps draw the taskbar background, made up of a rectangle plus two inverted rounded corners. */ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { val paint: Paint = Paint() val paint = Paint() val lastDrawnTransientRect = RectF() var backgroundHeight = context.deviceProfile.taskbarSize.toFloat() var translationYForSwipe = 0f Loading Loading @@ -131,7 +133,11 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { val radius = newBackgroundHeight / 2f val bottomMarginProgress = bottomMargin * ((1f - progress) / 2f) canvas.translate(0f, canvas.height - bottomMargin + bottomMarginProgress) // Aligns the bottom with the bottom of the stashed handle. val bottom = canvas.height - bottomMargin + bottomMarginProgress + (-mapRange(1f - progress, 0f, stashedHandleHeight / 2f) + translationYForSwipe) // Draw shadow. val shadowAlpha = Loading @@ -143,19 +149,14 @@ class TaskbarBackgroundRenderer(context: TaskbarActivityContext) { setColorAlphaBound(Color.BLACK, Math.round(shadowAlpha)) ) // Aligns the bottom with the bottom of the stashed handle. val bottom = (-mapRange(1f - progress, 0f, stashedHandleHeight / 2f) + translationYForSwipe) canvas.drawRoundRect( lastDrawnTransientRect.set( transientBackgroundBounds.left + halfWidthDelta, bottom - newBackgroundHeight, transientBackgroundBounds.right - halfWidthDelta, bottom, radius, radius, paint bottom ) canvas.drawRoundRect(lastDrawnTransientRect, radius, radius, paint) } canvas.restore() } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +15 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.util.Pair; Loading Loading @@ -69,11 +70,13 @@ import com.android.launcher3.shortcuts.DeepShortcutView; import com.android.launcher3.shortcuts.ShortcutDragPreviewProvider; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.IntSet; import com.android.launcher3.util.ItemInfoMatcher; import com.android.quickstep.util.LogUtils; import com.android.quickstep.util.MultiValueUpdateListener; import com.android.systemui.shared.recents.model.Task; import com.android.wm.shell.draganddrop.DragAndDropConstants; import java.io.PrintWriter; import java.util.Arrays; Loading Loading @@ -310,9 +313,6 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im if (mDisallowGlobalDrag) { AbstractFloatingView.closeAllOpenViewsExcept(mActivity, TYPE_TASKBAR_ALL_APPS); } else { // stash the transient taskbar mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); AbstractFloatingView.closeAllOpenViews(mActivity); } Loading Loading @@ -395,6 +395,15 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im com.android.launcher3.logging.InstanceId launcherInstanceId = instanceIds.second; intent.putExtra(ClipDescription.EXTRA_LOGGING_INSTANCE_ID, internalInstanceId); if (DisplayController.isTransientTaskbar(mActivity)) { // Tell WM Shell to ignore drag events in the provided transient taskbar region. TaskbarDragLayer dragLayer = mControllers.taskbarActivityContext.getDragLayer(); int[] locationOnScreen = dragLayer.getLocationOnScreen(); RectF disallowExternalDropRegion = new RectF(dragLayer.getLastDrawnTransientRect()); disallowExternalDropRegion.offset(locationOnScreen[0], locationOnScreen[1]); intent.putExtra(DragAndDropConstants.EXTRA_DISALLOW_HIT_REGION, disallowExternalDropRegion); } ClipData clipData = new ClipData(clipDescription, new ClipData.Item(intent)); if (btv.startDragAndDrop(clipData, shadowBuilder, null /* localState */, Loading @@ -421,9 +430,6 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im if (dragEvent.getResult()) { maybeOnDragEnd(); } else { // un-stash the transient taskbar in case drag and drop was canceled mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false); // This will take care of calling maybeOnDragEnd() after the animation animateGlobalDragViewToOriginalPosition(btv, dragEvent); } Loading Loading @@ -451,6 +457,9 @@ public class TaskbarDragController extends DragController<BaseTaskbarContext> im mControllers.taskbarAutohideSuspendController.updateFlag( TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_DRAGGING, false); mActivity.onDragEnd(); // Note, this must be done last to ensure no AutohideSuspendFlags are active, as that // will prevent us from stashing until the timeout. mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true); } } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java +6 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.KeyEvent.KEYCODE_BACK; import android.content.Context; import android.graphics.Canvas; import android.graphics.RectF; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; Loading Loading @@ -183,6 +184,11 @@ public class TaskbarDragLayer extends BaseDragLayer<TaskbarActivityContext> { invalidate(); } /** Returns the bounds in DragLayer coordinates of where the transient background was drawn. */ protected RectF getLastDrawnTransientRect() { return mBackgroundRenderer.getLastDrawnTransientRect(); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { TestLogging.recordMotionEvent(TestProtocol.SEQUENCE_MAIN, "Touch event", ev); Loading