Search in sources :

Example 21 with PagedOrientationHandler

use of com.android.launcher3.touch.PagedOrientationHandler in project android_packages_apps_Trebuchet by LineageOS.

the class TaskMenuView method orientAroundTaskView.

private void orientAroundTaskView(TaskView taskView) {
    PagedOrientationHandler orientationHandler = taskView.getPagedOrientationHandler();
    measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
    mActivity.getDragLayer().getDescendantRectRelativeToSelf(taskView, sTempRect);
    Rect insets = mActivity.getDragLayer().getInsets();
    BaseDragLayer.LayoutParams params = (BaseDragLayer.LayoutParams) getLayoutParams();
    params.width = orientationHandler.getTaskMenuWidth(taskView.getThumbnail());
    // Gravity set to Left instead of Start as sTempRect.left measures Left distance not Start
    params.gravity = Gravity.LEFT;
    setLayoutParams(params);
    setScaleX(taskView.getScaleX());
    setScaleY(taskView.getScaleY());
    boolean canActivityRotate = taskView.getRecentsView().mOrientationState.isRecentsActivityRotationAllowed();
    mOptionLayout.setOrientation(orientationHandler.getTaskMenuLayoutOrientation(canActivityRotate, mOptionLayout));
    setPosition(sTempRect.left - insets.left, sTempRect.top - insets.top, taskView.getPagedOrientationHandler());
}
Also used : BaseDragLayer(com.android.launcher3.views.BaseDragLayer) Rect(android.graphics.Rect) PagedOrientationHandler(com.android.launcher3.touch.PagedOrientationHandler)

Example 22 with PagedOrientationHandler

use of com.android.launcher3.touch.PagedOrientationHandler in project android_packages_apps_Trebuchet by LineageOS.

the class TaskViewTouchController method onDragEnd.

@Override
public void onDragEnd(float velocity) {
    boolean fling = mDetector.isFling(velocity);
    final boolean goingToEnd;
    final int logAction;
    boolean blockedFling = fling && mFlingBlockCheck.isBlocked();
    if (blockedFling) {
        fling = false;
    }
    PagedOrientationHandler orientationHandler = mRecentsView.getPagedOrientationHandler();
    float progress = mCurrentAnimation.getProgressFraction();
    float interpolatedProgress = mCurrentAnimation.getInterpolatedProgress();
    if (fling) {
        logAction = Touch.FLING;
        boolean goingUp = orientationHandler.isGoingUp(velocity, mIsRtl);
        goingToEnd = goingUp == mCurrentAnimationIsGoingUp;
    } else {
        logAction = Touch.SWIPE;
        goingToEnd = interpolatedProgress > SUCCESS_TRANSITION_PROGRESS;
    }
    long animationDuration = BaseSwipeDetector.calculateDuration(velocity, goingToEnd ? (1 - progress) : progress);
    if (blockedFling && !goingToEnd) {
        animationDuration *= LauncherAnimUtils.blockedFlingDurationFactor(velocity);
    }
    mCurrentAnimation.setEndAction(() -> onCurrentAnimationEnd(goingToEnd, logAction));
    if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
        mCurrentAnimation.getAnimationPlayer().addUpdateListener(valueAnimator -> {
            if (mRecentsView.getCurrentPage() != 0 || mCurrentAnimationIsGoingUp) {
                mRecentsView.redrawLiveTile(true);
            }
        });
    }
    mCurrentAnimation.startWithVelocity(mActivity, goingToEnd, velocity, mEndDisplacement, animationDuration);
}
Also used : PagedOrientationHandler(com.android.launcher3.touch.PagedOrientationHandler)

Example 23 with PagedOrientationHandler

use of com.android.launcher3.touch.PagedOrientationHandler in project android_packages_apps_Trebuchet by LineageOS.

the class RecentsOrientedState method update.

/**
 * Sets the appropriate {@link PagedOrientationHandler} for {@link #mOrientationHandler}
 * @param touchRotation The rotation the nav bar region that is touched is in
 * @param displayRotation Rotation of the display/device
 *
 * @return true if there was any change in the internal state as a result of this call,
 *         false otherwise
 */
public boolean update(@SurfaceRotation int touchRotation, @SurfaceRotation int displayRotation) {
    mRecentsActivityRotation = inferRecentsActivityRotation(displayRotation);
    mDisplayRotation = displayRotation;
    mTouchRotation = touchRotation;
    mPreviousRotation = touchRotation;
    PagedOrientationHandler oldHandler = mOrientationHandler;
    if (mRecentsActivityRotation == mTouchRotation || (canRecentsActivityRotate() && (mFlags & FLAG_SWIPE_UP_NOT_RUNNING) != 0)) {
        mOrientationHandler = PagedOrientationHandler.PORTRAIT;
        if (DEBUG) {
            Log.d(TAG, "current RecentsOrientedState: " + this);
        }
    } else if (mTouchRotation == ROTATION_90) {
        mOrientationHandler = PagedOrientationHandler.LANDSCAPE;
    } else if (mTouchRotation == ROTATION_270) {
        mOrientationHandler = PagedOrientationHandler.SEASCAPE;
    } else {
        mOrientationHandler = PagedOrientationHandler.PORTRAIT;
    }
    if (DEBUG) {
        Log.d(TAG, "current RecentsOrientedState: " + this);
    }
    return oldHandler != mOrientationHandler;
}
Also used : PagedOrientationHandler(com.android.launcher3.touch.PagedOrientationHandler)

Example 24 with PagedOrientationHandler

use of com.android.launcher3.touch.PagedOrientationHandler in project android_packages_apps_Trebuchet by LineageOS.

the class AnimatorControllerWithResistance method createRecentsResistanceAnim.

/**
 * Creates the resistance animation for {@link #createForRecents}, or can be used separately
 * when starting from recents, i.e. {@link #createRecentsResistanceFromOverviewAnim}.
 */
public static <SCALE, TRANSLATION> PendingAnimation createRecentsResistanceAnim(RecentsParams<SCALE, TRANSLATION> params) {
    Rect startRect = new Rect();
    PagedOrientationHandler orientationHandler = params.recentsOrientedState.getOrientationHandler();
    LauncherActivityInterface.INSTANCE.calculateTaskSize(params.context, params.dp, startRect, orientationHandler);
    long distanceToCover = startRect.bottom;
    boolean isTwoButtonMode = SysUINavigationMode.getMode(params.context) == TWO_BUTTONS;
    if (isTwoButtonMode) {
        // We can only drag a small distance past overview, not to the top of the screen.
        distanceToCover = (long) ((params.dp.heightPx - startRect.bottom) * TWO_BUTTON_EXTRA_DRAG_FACTOR);
    }
    PendingAnimation resistAnim = params.resistAnim != null ? params.resistAnim : new PendingAnimation(distanceToCover * 2);
    PointF pivot = new PointF();
    float fullscreenScale = params.recentsOrientedState.getFullScreenScaleAndPivot(startRect, params.dp, pivot);
    float prevScaleRate = (fullscreenScale - params.startScale) / (params.dp.heightPx - startRect.bottom);
    // This is what the scale would be at the end of the drag if we didn't apply resistance.
    float endScale = params.startScale - prevScaleRate * distanceToCover;
    final TimeInterpolator scaleInterpolator;
    if (isTwoButtonMode) {
        // We are bounded by the distance of the drag, so we don't need to apply resistance.
        scaleInterpolator = LINEAR;
    } else {
        // Create an interpolator that resists the scale so the scale doesn't get smaller than
        // RECENTS_SCALE_MAX_RESIST.
        float startResist = Utilities.getProgress(params.resistanceParams.scaleStartResist, params.startScale, endScale);
        float maxResist = Utilities.getProgress(params.resistanceParams.scaleMaxResist, params.startScale, endScale);
        scaleInterpolator = t -> {
            if (t < startResist) {
                return t;
            }
            float resistProgress = Utilities.getProgress(t, startResist, 1);
            resistProgress = RECENTS_SCALE_RESIST_INTERPOLATOR.getInterpolation(resistProgress);
            return startResist + resistProgress * (maxResist - startResist);
        };
    }
    resistAnim.addFloat(params.scaleTarget, params.scaleProperty, params.startScale, endScale, scaleInterpolator);
    if (!isTwoButtonMode) {
        // Compute where the task view would be based on the end scale, if we didn't translate.
        RectF endRectF = new RectF(startRect);
        Matrix temp = new Matrix();
        temp.setScale(params.resistanceParams.scaleMaxResist, params.resistanceParams.scaleMaxResist, pivot.x, pivot.y);
        temp.mapRect(endRectF);
        // Translate such that the task view touches the top of the screen when drag does.
        float endTranslation = endRectF.top * orientationHandler.getSecondaryTranslationDirectionFactor() * params.resistanceParams.translationFactor;
        resistAnim.addFloat(params.translationTarget, params.translationProperty, params.startTranslation, endTranslation, RECENTS_TRANSLATE_RESIST_INTERPOLATOR);
    }
    return resistAnim;
}
Also used : RectF(android.graphics.RectF) PendingAnimation(com.android.launcher3.anim.PendingAnimation) Rect(android.graphics.Rect) Matrix(android.graphics.Matrix) PagedOrientationHandler(com.android.launcher3.touch.PagedOrientationHandler) PointF(android.graphics.PointF) TimeInterpolator(android.animation.TimeInterpolator)

Example 25 with PagedOrientationHandler

use of com.android.launcher3.touch.PagedOrientationHandler in project android_packages_apps_Launcher3 by ArrowOS.

the class TaskOverlayFactory method addSplitOptions.

/**
 * Does NOT add split options in the following scenarios:
 * * The taskView to add split options is already showing split screen tasks
 * * There aren't at least 2 tasks in overview to show split options for
 * * Device is in "Lock task mode"
 * * The taskView to show split options for is the focused task AND we haven't started
 *   scrolling in overview (if we haven't scrolled, there's a split overview action button so
 *   we don't need this menu option)
 */
private static void addSplitOptions(List<SystemShortcut> outShortcuts, BaseDraggingActivity activity, TaskView taskView, DeviceProfile deviceProfile) {
    RecentsView recentsView = taskView.getRecentsView();
    PagedOrientationHandler orientationHandler = recentsView.getPagedOrientationHandler();
    int[] taskViewTaskIds = taskView.getTaskIds();
    boolean taskViewHasMultipleTasks = taskViewTaskIds[0] != -1 && taskViewTaskIds[1] != -1;
    boolean notEnoughTasksToSplit = recentsView.getTaskViewCount() < 2;
    boolean isFocusedTask = deviceProfile.overviewShowAsGrid && taskView.isFocusedTask();
    boolean isTaskInExpectedScrollPosition = recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView));
    ActivityManager activityManager = (ActivityManager) taskView.getContext().getSystemService(Context.ACTIVITY_SERVICE);
    boolean isLockTaskMode = activityManager.isInLockTaskMode();
    if (taskViewHasMultipleTasks || notEnoughTasksToSplit || isLockTaskMode || (isFocusedTask && isTaskInExpectedScrollPosition)) {
        return;
    }
    List<SplitPositionOption> positions = orientationHandler.getSplitPositionOptions(deviceProfile);
    for (SplitPositionOption option : positions) {
        outShortcuts.add(new SplitSelectSystemShortcut(activity, taskView, option));
    }
}
Also used : SplitPositionOption(com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption) PagedOrientationHandler(com.android.launcher3.touch.PagedOrientationHandler) RecentsView(com.android.quickstep.views.RecentsView) ActivityManager(android.app.ActivityManager) SplitSelectSystemShortcut(com.android.quickstep.TaskShortcutFactory.SplitSelectSystemShortcut)

Aggregations

PagedOrientationHandler (com.android.launcher3.touch.PagedOrientationHandler)101 RecentsView (com.android.quickstep.views.RecentsView)25 DeviceProfile (com.android.launcher3.DeviceProfile)22 Rect (android.graphics.Rect)16 PendingAnimation (com.android.launcher3.anim.PendingAnimation)15 FloatProperty (android.util.FloatProperty)14 BaseDragLayer (com.android.launcher3.views.BaseDragLayer)12 PointF (android.graphics.PointF)11 RectF (android.graphics.RectF)11 Point (android.graphics.Point)9 TimeInterpolator (android.animation.TimeInterpolator)6 Matrix (android.graphics.Matrix)6 View (android.view.View)6 Interpolator (android.view.animation.Interpolator)6 AbstractFloatingView (com.android.launcher3.AbstractFloatingView)6 TaskView (com.android.quickstep.views.TaskView)6 Context (android.content.Context)5 ShapeDrawable (android.graphics.drawable.ShapeDrawable)5 RectShape (android.graphics.drawable.shapes.RectShape)5 MotionEvent (android.view.MotionEvent)5