Search in sources :

Example 1 with VIEW_ALPHA

use of com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA in project android_packages_apps_Launcher3 by crdroidandroid.

the class WorkspaceStateTransitionAnimation method applyChildState.

private void applyChildState(LauncherState state, CellLayout cl, int childIndex, PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter, StateAnimationConfig config) {
    float pageAlpha = pageAlphaProvider.getPageAlpha(childIndex);
    float springLoadedProgress = (state instanceof SpringLoadedState) ? 1.0f : 0f;
    propertySetter.setFloat(cl, CellLayout.SPRING_LOADED_PROGRESS, springLoadedProgress, ZOOM_OUT);
    Interpolator fadeInterpolator = config.getInterpolator(ANIM_WORKSPACE_FADE, pageAlphaProvider.interpolator);
    propertySetter.setFloat(cl.getShortcutsAndWidgets(), VIEW_ALPHA, pageAlpha, fadeInterpolator);
}
Also used : SpringLoadedState(com.android.launcher3.states.SpringLoadedState) Interpolator(android.view.animation.Interpolator)

Example 2 with VIEW_ALPHA

use of com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA in project android_packages_apps_Launcher3 by crdroidandroid.

the class RecentsView method createTaskDismissAnimation.

public PendingAnimation createTaskDismissAnimation(TaskView taskView, boolean animateTaskView, boolean shouldRemoveTask, long duration) {
    if (mPendingAnimation != null) {
        mPendingAnimation.createPlaybackController().dispatchOnCancel().dispatchOnEnd();
    }
    PendingAnimation anim = new PendingAnimation(duration);
    int count = getPageCount();
    if (count == 0) {
        return anim;
    }
    int[] oldScroll = new int[count];
    int[] newScroll = new int[count];
    getPageScrolls(oldScroll, false, SIMPLE_SCROLL_LOGIC);
    getPageScrolls(newScroll, false, (v) -> v.getVisibility() != GONE && v != taskView);
    int taskCount = getTaskViewCount();
    int scrollDiffPerPage = 0;
    if (count > 1) {
        scrollDiffPerPage = Math.abs(oldScroll[1] - oldScroll[0]);
    }
    int draggedIndex = indexOfChild(taskView);
    boolean isFocusedTaskDismissed = taskView.getTask().key.id == mFocusedTaskId;
    if (isFocusedTaskDismissed && showAsGrid()) {
        anim.setFloat(mActionsView, VIEW_ALPHA, 0, clampToProgress(ACCEL_0_5, 0, 0.5f));
    }
    float dismissedTaskWidth = taskView.getLayoutParams().width + mPageSpacing;
    boolean needsCurveUpdates = false;
    for (int i = 0; i < count; i++) {
        View child = getChildAt(i);
        if (child == taskView) {
            if (animateTaskView) {
                addDismissedTaskAnimations(taskView, duration, anim);
            }
        } else if (!showAsGrid()) {
            // Compute scroll offsets from task dismissal for animation.
            // If we just take newScroll - oldScroll, everything to the right of dragged task
            // translates to the left. We need to offset this in some cases:
            // - In RTL, add page offset to all pages, since we want pages to move to the right
            // Additionally, add a page offset if:
            // - Current page is rightmost page (leftmost for RTL)
            // - Dragging an adjacent page on the left side (right side for RTL)
            int offset = mIsRtl ? scrollDiffPerPage : 0;
            if (mCurrentPage == draggedIndex) {
                int lastPage = taskCount - 1;
                if (mCurrentPage == lastPage) {
                    offset += mIsRtl ? -scrollDiffPerPage : scrollDiffPerPage;
                }
            } else {
                // Dragging an adjacent page.
                // (Right in RTL, left in LTR)
                int negativeAdjacent = mCurrentPage - 1;
                if (draggedIndex == negativeAdjacent) {
                    offset += mIsRtl ? -scrollDiffPerPage : scrollDiffPerPage;
                }
            }
            int scrollDiff = newScroll[i] - oldScroll[i] + offset;
            if (scrollDiff != 0) {
                FloatProperty translationProperty = child instanceof TaskView ? ((TaskView) child).getPrimaryDismissTranslationProperty() : mOrientationHandler.getPrimaryViewTranslate();
                float additionalDismissDuration = ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET * Math.abs(i - draggedIndex);
                anim.setFloat(child, translationProperty, scrollDiff, clampToProgress(LINEAR, Utilities.boundToRange(INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET + additionalDismissDuration, 0f, 1f), 1));
                if (ENABLE_QUICKSTEP_LIVE_TILE.get() && mEnableDrawingLiveTile && child instanceof TaskView && ((TaskView) child).isRunningTask()) {
                    anim.addOnFrameCallback(() -> {
                        mLiveTileTaskViewSimulator.taskPrimaryTranslation.value = mOrientationHandler.getPrimaryValue(child.getTranslationX(), child.getTranslationY());
                        redrawLiveTile();
                    });
                }
                needsCurveUpdates = true;
            }
        } else if (child instanceof TaskView) {
            // successive task dismissal durations for a staggered effect.
            if (isFocusedTaskDismissed || (i >= draggedIndex && isSameGridRow((TaskView) child, taskView))) {
                FloatProperty translationProperty = ((TaskView) child).getPrimaryDismissTranslationProperty();
                float additionalDismissDuration = ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET * Math.abs(i - draggedIndex);
                anim.setFloat(child, translationProperty, !mIsRtl ? -dismissedTaskWidth : dismissedTaskWidth, clampToProgress(LINEAR, Utilities.boundToRange(INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET + additionalDismissDuration, 0f, 1f), 1));
            }
        }
    }
    if (needsCurveUpdates) {
        anim.addOnFrameCallback(this::updateCurveProperties);
    }
    // Add a tiny bit of translation Z, so that it draws on top of other views
    if (animateTaskView) {
        taskView.setTranslationZ(0.1f);
    }
    mPendingAnimation = anim;
    mPendingAnimation.addEndListener(new Consumer<Boolean>() {

        @Override
        public void accept(Boolean success) {
            if (ENABLE_QUICKSTEP_LIVE_TILE.get() && mEnableDrawingLiveTile && taskView.isRunningTask() && success) {
                finishRecentsAnimation(true, /* toRecents */
                false, /* shouldPip */
                () -> onEnd(success));
            } else {
                onEnd(success);
            }
        }

        @SuppressWarnings("WrongCall")
        private void onEnd(boolean success) {
            if (success) {
                if (shouldRemoveTask) {
                    if (taskView.getTask() != null) {
                        if (ENABLE_QUICKSTEP_LIVE_TILE.get() && taskView.isRunningTask()) {
                            finishRecentsAnimation(true, /* toRecents */
                            false, /* shouldPip */
                            () -> removeTaskInternal(taskView));
                        } else {
                            removeTaskInternal(taskView);
                        }
                        mActivity.getStatsLogManager().logger().withItemInfo(taskView.getItemInfo()).log(LAUNCHER_TASK_DISMISS_SWIPE_UP);
                    }
                }
                // Reset task translations as they may have updated via animations in
                // createTaskDismissAnimation
                resetTaskVisuals();
                int pageToSnapTo = mCurrentPage;
                // be at any page but the focused task always displays at the start.
                if (taskView.getTask().key.id == mFocusedTaskId) {
                    pageToSnapTo = mTaskViewStartIndex;
                } else if (draggedIndex < pageToSnapTo || pageToSnapTo == (getTaskViewCount() - 1)) {
                    pageToSnapTo -= 1;
                }
                removeViewInLayout(taskView);
                if (getTaskViewCount() == 0) {
                    startHome();
                } else {
                    snapToPageImmediately(pageToSnapTo);
                    dispatchScrollChanged();
                    // Grid got messed up, reapply.
                    updateGridProperties(true);
                    if (showAsGrid() && getFocusedTaskView() == null && mActionsView.getVisibilityAlpha().getValue() == 1) {
                        animateActionsViewOut();
                    }
                }
                // Update the layout synchronously so that the position of next view is
                // immediately available.
                onLayout(false, /*  changed */
                getLeft(), getTop(), getRight(), getBottom());
            }
            onDismissAnimationEnds();
            mPendingAnimation = null;
        }
    });
    return anim;
}
Also used : PendingAnimation(com.android.launcher3.anim.PendingAnimation) FloatProperty(android.util.FloatProperty) ImageView(android.widget.ImageView) View(android.view.View) ListView(android.widget.ListView) PagedView(com.android.launcher3.PagedView) TextPaint(android.text.TextPaint) Point(android.graphics.Point)

Example 3 with VIEW_ALPHA

use of com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA in project android_packages_apps_Launcher3 by AOSPA.

the class WorkspaceStateTransitionAnimation method applyChildState.

private void applyChildState(LauncherState state, CellLayout cl, int childIndex, PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter, StateAnimationConfig config) {
    float pageAlpha = pageAlphaProvider.getPageAlpha(childIndex);
    float springLoadedProgress = (state instanceof SpringLoadedState) ? 1.0f : 0f;
    propertySetter.setFloat(cl, CellLayout.SPRING_LOADED_PROGRESS, springLoadedProgress, ZOOM_OUT);
    Interpolator fadeInterpolator = config.getInterpolator(ANIM_WORKSPACE_FADE, pageAlphaProvider.interpolator);
    propertySetter.setFloat(cl.getShortcutsAndWidgets(), VIEW_ALPHA, pageAlpha, fadeInterpolator);
}
Also used : SpringLoadedState(com.android.launcher3.states.SpringLoadedState) Interpolator(android.view.animation.Interpolator)

Example 4 with VIEW_ALPHA

use of com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA in project android_packages_apps_Launcher3 by AOSPA.

the class RecentsView method addDismissedTaskAnimations.

private void addDismissedTaskAnimations(TaskView taskView, long duration, PendingAnimation anim) {
    // alpha is set to 0 so that it can be recycled in the view pool properly
    if (ENABLE_QUICKSTEP_LIVE_TILE.get() && taskView.isRunningTask()) {
        runActionOnRemoteHandles(remoteTargetHandle -> {
            TransformParams params = remoteTargetHandle.getTransformParams();
            anim.setFloat(params, TransformParams.TARGET_ALPHA, 0, clampToProgress(FINAL_FRAME, 0, 0.5f));
        });
    }
    anim.setFloat(taskView, VIEW_ALPHA, 0, clampToProgress(isOnGridBottomRow(taskView) ? ACCEL : FINAL_FRAME, 0, 0.5f));
    FloatProperty<TaskView> secondaryViewTranslate = taskView.getSecondaryDissmissTranslationProperty();
    int secondaryTaskDimension = mOrientationHandler.getSecondaryDimension(taskView);
    int verticalFactor = mOrientationHandler.getSecondaryTranslationDirectionFactor();
    ResourceProvider rp = DynamicResource.provider(mActivity);
    SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_START).setDampingRatio(rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio)).setStiffness(rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness));
    anim.add(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate, verticalFactor * secondaryTaskDimension * 2).setDuration(duration), LINEAR, sp);
    if (ENABLE_QUICKSTEP_LIVE_TILE.get() && mEnableDrawingLiveTile && taskView.isRunningTask()) {
        anim.addOnFrameCallback(() -> {
            runActionOnRemoteHandles(remoteTargetHandle -> remoteTargetHandle.getTaskViewSimulator().taskSecondaryTranslation.value = mOrientationHandler.getSecondaryValue(taskView.getTranslationX(), taskView.getTranslationY()));
            redrawLiveTile();
        });
    }
}
Also used : SpringProperty(com.android.launcher3.anim.SpringProperty) TransformParams(com.android.quickstep.util.TransformParams) ResourceProvider(com.android.systemui.plugins.ResourceProvider) TextPaint(android.text.TextPaint) Point(android.graphics.Point)

Example 5 with VIEW_ALPHA

use of com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA in project android_packages_apps_Launcher3 by AOSPA.

the class TaskViewUtils method createRecentsWindowAnimator.

public static void createRecentsWindowAnimator(@NonNull TaskView v, boolean skipViewChanges, @NonNull RemoteAnimationTargetCompat[] appTargets, @NonNull RemoteAnimationTargetCompat[] wallpaperTargets, @NonNull RemoteAnimationTargetCompat[] nonAppTargets, @Nullable DepthController depthController, PendingAnimation out) {
    RecentsView recentsView = v.getRecentsView();
    boolean isQuickSwitch = v.isEndQuickswitchCuj();
    v.setEndQuickswitchCuj(false);
    boolean inLiveTileMode = ENABLE_QUICKSTEP_LIVE_TILE.get() && v.getRecentsView().getRunningTaskIndex() != -1;
    final RemoteAnimationTargets targets = new RemoteAnimationTargets(appTargets, wallpaperTargets, nonAppTargets, inLiveTileMode ? MODE_CLOSING : MODE_OPENING);
    final RemoteAnimationTargetCompat navBarTarget = targets.getNavBarRemoteAnimationTarget();
    SurfaceTransactionApplier applier = new SurfaceTransactionApplier(v);
    targets.addReleaseCheck(applier);
    RemoteTargetHandle[] remoteTargetHandles;
    RemoteTargetHandle[] recentsViewHandles = recentsView.getRemoteTargetHandles();
    if (v.isRunningTask() && recentsViewHandles != null) {
        // Re-use existing handles
        remoteTargetHandles = recentsViewHandles;
    } else {
        RemoteTargetGluer gluer = new RemoteTargetGluer(v.getContext(), recentsView.getSizeStrategy(), targets);
        if (v.containsMultipleTasks()) {
            remoteTargetHandles = gluer.assignTargetsForSplitScreen(targets, v.getTaskIds());
        } else {
            remoteTargetHandles = gluer.assignTargets(targets);
        }
    }
    for (RemoteTargetHandle remoteTargetGluer : remoteTargetHandles) {
        remoteTargetGluer.getTransformParams().setSyncTransactionApplier(applier);
    }
    int taskIndex = recentsView.indexOfChild(v);
    Context context = v.getContext();
    DeviceProfile dp = BaseActivity.fromContext(context).getDeviceProfile();
    boolean showAsGrid = dp.overviewShowAsGrid;
    boolean parallaxCenterAndAdjacentTask = taskIndex != recentsView.getCurrentPage() && !showAsGrid;
    int taskRectTranslationPrimary = recentsView.getScrollOffset(taskIndex);
    int taskRectTranslationSecondary = showAsGrid ? (int) v.getGridTranslationY() : 0;
    RemoteTargetHandle[] topMostSimulators = null;
    if (!v.isRunningTask()) {
        // TVSs already initialized from the running task, no need to re-init
        for (RemoteTargetHandle targetHandle : remoteTargetHandles) {
            TaskViewSimulator tvsLocal = targetHandle.getTaskViewSimulator();
            tvsLocal.setDp(dp);
            // RecentsView never updates the display rotation until swipe-up so the value may
            // be stale. Use the display value instead.
            int displayRotation = DisplayController.INSTANCE.get(context).getInfo().rotation;
            tvsLocal.getOrientationState().update(displayRotation, displayRotation);
            tvsLocal.fullScreenProgress.value = 0;
            tvsLocal.recentsViewScale.value = 1;
            tvsLocal.setIsGridTask(v.isGridTask());
            tvsLocal.getOrientationState().getOrientationHandler().set(tvsLocal, TaskViewSimulator::setTaskRectTranslation, taskRectTranslationPrimary, taskRectTranslationSecondary);
            // Fade in the task during the initial 20% of the animation
            out.addFloat(targetHandle.getTransformParams(), TransformParams.TARGET_ALPHA, 0, 1, clampToProgress(LINEAR, 0, 0.2f));
        }
    }
    for (RemoteTargetHandle targetHandle : remoteTargetHandles) {
        TaskViewSimulator tvsLocal = targetHandle.getTaskViewSimulator();
        out.setFloat(tvsLocal.fullScreenProgress, AnimatedFloat.VALUE, 1, TOUCH_RESPONSE_INTERPOLATOR);
        out.setFloat(tvsLocal.recentsViewScale, AnimatedFloat.VALUE, tvsLocal.getFullScreenScale(), TOUCH_RESPONSE_INTERPOLATOR);
        out.setFloat(tvsLocal.recentsViewScroll, AnimatedFloat.VALUE, 0, TOUCH_RESPONSE_INTERPOLATOR);
        out.addOnFrameCallback(() -> {
            for (RemoteTargetHandle handle : remoteTargetHandles) {
                handle.getTaskViewSimulator().apply(handle.getTransformParams());
            }
        });
        if (navBarTarget != null) {
            final Rect cropRect = new Rect();
            out.addOnFrameListener(new MultiValueUpdateListener() {

                FloatProp mNavFadeOut = new FloatProp(1f, 0f, 0, ANIMATION_NAV_FADE_OUT_DURATION, NAV_FADE_OUT_INTERPOLATOR);

                FloatProp mNavFadeIn = new FloatProp(0f, 1f, ANIMATION_DELAY_NAV_FADE_IN, ANIMATION_NAV_FADE_IN_DURATION, NAV_FADE_IN_INTERPOLATOR);

                @Override
                public void onUpdate(float percent, boolean initOnly) {
                    final SurfaceParams.Builder navBuilder = new SurfaceParams.Builder(navBarTarget.leash);
                    // TODO Do we need to operate over multiple TVSs for the navbar leash?
                    for (RemoteTargetHandle handle : remoteTargetHandles) {
                        if (mNavFadeIn.value > mNavFadeIn.getStartValue()) {
                            TaskViewSimulator taskViewSimulator = handle.getTaskViewSimulator();
                            taskViewSimulator.getCurrentCropRect().round(cropRect);
                            navBuilder.withMatrix(taskViewSimulator.getCurrentMatrix()).withWindowCrop(cropRect).withAlpha(mNavFadeIn.value);
                        } else {
                            navBuilder.withAlpha(mNavFadeOut.value);
                        }
                        handle.getTransformParams().applySurfaceParams(navBuilder.build());
                    }
                }
            });
        } else if (inLiveTileMode) {
            // There is no transition animation for app launch from recent in live tile mode so
            // we have to trigger the navigation bar animation from system here.
            final RecentsAnimationController controller = recentsView.getRecentsAnimationController();
            if (controller != null) {
                controller.animateNavigationBarToApp(RECENTS_LAUNCH_DURATION);
            }
        }
        topMostSimulators = remoteTargetHandles;
    }
    if (!skipViewChanges && parallaxCenterAndAdjacentTask && topMostSimulators.length > 0) {
        out.addFloat(v, VIEW_ALPHA, 1, 0, clampToProgress(LINEAR, 0.2f, 0.4f));
        RemoteTargetHandle[] simulatorCopies = topMostSimulators;
        for (RemoteTargetHandle handle : simulatorCopies) {
            handle.getTaskViewSimulator().apply(handle.getTransformParams());
        }
        // Mt represents the overall transformation on the thumbnailView relative to the
        // Launcher's rootView
        // K(t) represents transformation on the running window by the taskViewSimulator at
        // any time t.
        // at t = 0, we know that the simulator matches the thumbnailView. So if we apply K(0)`
        // on the Launcher's rootView, the thumbnailView would match the full running task
        // window. If we apply "K(0)` K(t)" thumbnailView will match the final transformed
        // window at any time t. This gives the overall matrix on thumbnailView to be:
        // Mt K(0)` K(t)
        // During animation we apply transformation on the thumbnailView (and not the rootView)
        // to follow the TaskViewSimulator. So the final matrix applied on the thumbnailView is:
        // Mt K(0)` K(t) Mt`
        TaskThumbnailView[] thumbnails = v.getThumbnails();
        Matrix[] mt = new Matrix[simulatorCopies.length];
        Matrix[] mti = new Matrix[simulatorCopies.length];
        for (int i = 0; i < thumbnails.length; i++) {
            TaskThumbnailView ttv = thumbnails[i];
            RectF localBounds = new RectF(0, 0, ttv.getWidth(), ttv.getHeight());
            float[] tvBoundsMapped = new float[] { 0, 0, ttv.getWidth(), ttv.getHeight() };
            getDescendantCoordRelativeToAncestor(ttv, ttv.getRootView(), tvBoundsMapped, false);
            RectF localBoundsInRoot = new RectF(tvBoundsMapped[0], tvBoundsMapped[1], tvBoundsMapped[2], tvBoundsMapped[3]);
            Matrix localMt = new Matrix();
            localMt.setRectToRect(localBounds, localBoundsInRoot, ScaleToFit.FILL);
            mt[i] = localMt;
            Matrix localMti = new Matrix();
            localMt.invert(localMti);
            mti[i] = localMti;
        }
        Matrix[] k0i = new Matrix[simulatorCopies.length];
        for (int i = 0; i < simulatorCopies.length; i++) {
            k0i[i] = new Matrix();
            simulatorCopies[i].getTaskViewSimulator().getCurrentMatrix().invert(k0i[i]);
        }
        Matrix animationMatrix = new Matrix();
        out.addOnFrameCallback(() -> {
            for (int i = 0; i < simulatorCopies.length; i++) {
                animationMatrix.set(mt[i]);
                animationMatrix.postConcat(k0i[i]);
                animationMatrix.postConcat(simulatorCopies[i].getTaskViewSimulator().getCurrentMatrix());
                animationMatrix.postConcat(mti[i]);
                thumbnails[i].setAnimationMatrix(animationMatrix);
            }
        });
        out.addListener(new AnimatorListenerAdapter() {

            @Override
            public void onAnimationEnd(Animator animation) {
                for (TaskThumbnailView ttv : thumbnails) {
                    ttv.setAnimationMatrix(null);
                }
            }
        });
    }
    out.addListener(new AnimationSuccessListener() {

        @Override
        public void onAnimationSuccess(Animator animator) {
            if (isQuickSwitch) {
                InteractionJankMonitorWrapper.end(InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH);
            }
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            targets.release();
            super.onAnimationEnd(animation);
        }
    });
    if (depthController != null) {
        out.setFloat(depthController, DEPTH, BACKGROUND_APP.getDepth(context), TOUCH_RESPONSE_INTERPOLATOR);
    }
}
Also used : DeviceProfile(com.android.launcher3.DeviceProfile) MultiValueUpdateListener(com.android.quickstep.util.MultiValueUpdateListener) SurfaceTransactionApplier(com.android.quickstep.util.SurfaceTransactionApplier) Matrix(android.graphics.Matrix) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) SurfaceParams(com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams) AnimationSuccessListener(com.android.launcher3.anim.AnimationSuccessListener) Context(android.content.Context) Rect(android.graphics.Rect) TaskViewSimulator(com.android.quickstep.util.TaskViewSimulator) RemoteAnimationTargetCompat(com.android.systemui.shared.system.RemoteAnimationTargetCompat) RectF(android.graphics.RectF) RemoteTargetHandle(com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle) Animator(android.animation.Animator) ObjectAnimator(android.animation.ObjectAnimator) ValueAnimator(android.animation.ValueAnimator) RecentsView(com.android.quickstep.views.RecentsView) TaskThumbnailView(com.android.quickstep.views.TaskThumbnailView)

Aggregations

Point (android.graphics.Point)7 TextPaint (android.text.TextPaint)7 Animator (android.animation.Animator)6 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)6 Context (android.content.Context)6 Matrix (android.graphics.Matrix)6 RectF (android.graphics.RectF)6 DeviceProfile (com.android.launcher3.DeviceProfile)6 SpringProperty (com.android.launcher3.anim.SpringProperty)6 SurfaceTransactionApplier (com.android.quickstep.util.SurfaceTransactionApplier)6 TaskViewSimulator (com.android.quickstep.util.TaskViewSimulator)6 TransformParams (com.android.quickstep.util.TransformParams)6 RecentsView (com.android.quickstep.views.RecentsView)6 TaskThumbnailView (com.android.quickstep.views.TaskThumbnailView)6 ResourceProvider (com.android.systemui.plugins.ResourceProvider)6 ObjectAnimator (android.animation.ObjectAnimator)5 Rect (android.graphics.Rect)5 Interpolator (android.view.animation.Interpolator)5 AnimationSuccessListener (com.android.launcher3.anim.AnimationSuccessListener)5 SpringLoadedState (com.android.launcher3.states.SpringLoadedState)5