Search in sources :

Example 36 with OVERVIEW

use of com.android.launcher3.LauncherState.OVERVIEW in project android_packages_apps_Trebuchet by LineageOS.

the class PredictionUiStateManager method canApplyPredictions.

private boolean canApplyPredictions(PredictionState newState) {
    if (mAppsView == null) {
        // If there is no apps view, no need to schedule.
        return true;
    }
    Launcher launcher = Launcher.getLauncher(mAppsView.getContext());
    PredictionRowView predictionRow = mAppsView.getFloatingHeaderView().findFixedRowByType(PredictionRowView.class);
    if (!predictionRow.isShown() || predictionRow.getAlpha() == 0 || launcher.isForceInvisible()) {
        return true;
    }
    if (mCurrentState.isEnabled != newState.isEnabled || mCurrentState.apps.isEmpty() != newState.apps.isEmpty()) {
        // If the visibility of the prediction row is changing, apply immediately.
        return true;
    }
    if (launcher.getDeviceProfile().isVerticalBarLayout()) {
        // If we are here & mAppsView.isShown() = true, we are probably in all-apps or mid way
        return false;
    }
    if (!launcher.isInState(OVERVIEW) && !launcher.isInState(BACKGROUND_APP)) {
        // Just a fallback as we dont need to apply instantly, if we are not in the swipe-up UI
        return false;
    }
    // against 1, keeps the logic simple :)
    return launcher.getAllAppsController().getProgress() > 1;
}
Also used : Launcher(com.android.launcher3.Launcher)

Example 37 with OVERVIEW

use of com.android.launcher3.LauncherState.OVERVIEW in project android_packages_apps_Trebuchet by LineageOS.

the class BaseSwipeUpHandlerV2 method onActivityInit.

@Override
protected boolean onActivityInit(Boolean alreadyOnHome) {
    super.onActivityInit(alreadyOnHome);
    final T activity = mActivityInterface.getCreatedActivity();
    if (mActivity == activity) {
        return true;
    }
    if (mActivity != null) {
        // The launcher may have been recreated as a result of device rotation.
        int oldState = mStateCallback.getState() & ~LAUNCHER_UI_STATES;
        initStateCallbacks();
        mStateCallback.setState(oldState);
    }
    mWasLauncherAlreadyVisible = alreadyOnHome;
    mActivity = activity;
    // up, or until we transition home and the home animation is composed
    if (alreadyOnHome) {
        mActivity.clearForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS);
    } else {
        mActivity.addForceInvisibleFlag(STATE_HANDLER_INVISIBILITY_FLAGS);
    }
    mRecentsView = activity.getOverviewPanel();
    mRecentsView.setOnPageTransitionEndCallback(null);
    addLiveTileOverlay();
    mStateCallback.setState(STATE_LAUNCHER_PRESENT);
    if (alreadyOnHome) {
        onLauncherStart();
    } else {
        activity.runOnceOnStart(this::onLauncherStart);
    }
    setupRecentsViewUi();
    if (mDeviceState.getNavMode() == TWO_BUTTONS) {
        // If the device is in two button mode, swiping up will show overview with predictions
        // so we need to kick off switching to the overview predictions as soon as possible
        mActivityInterface.updateOverviewPredictionState();
    }
    linkRecentsViewScroll();
    return true;
}
Also used : LAUNCHER_QUICKSWITCH_RIGHT(com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_RIGHT) LAUNCHER_QUICKSWITCH_LEFT(com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_QUICKSWITCH_LEFT) STATE_END_TARGET_SET(com.android.quickstep.GestureState.STATE_END_TARGET_SET)

Example 38 with OVERVIEW

use of com.android.launcher3.LauncherState.OVERVIEW in project android_packages_apps_Trebuchet by LineageOS.

the class LauncherActivityInterface method switchToRecentsIfVisible.

@Override
public boolean switchToRecentsIfVisible(Runnable onCompleteCallback) {
    if (TestProtocol.sDebugTracing) {
        Log.d(TestProtocol.OVERIEW_NOT_ALLAPPS, "switchToRecentsIfVisible");
    }
    Launcher launcher = getVisibleLauncher();
    if (launcher == null) {
        return false;
    }
    launcher.getUserEventDispatcher().logActionCommand(LauncherLogProto.Action.Command.RECENTS_BUTTON, getContainerType(), LauncherLogProto.ContainerType.TASKSWITCHER);
    launcher.getStateManager().goToState(OVERVIEW, launcher.getStateManager().shouldAnimateStateChange(), onCompleteCallback);
    return true;
}
Also used : Launcher(com.android.launcher3.Launcher) BaseQuickstepLauncher(com.android.launcher3.BaseQuickstepLauncher)

Example 39 with OVERVIEW

use of com.android.launcher3.LauncherState.OVERVIEW in project android_packages_apps_Trebuchet by LineageOS.

the class PortraitStatesTouchController method initCurrentAnimation.

@Override
protected float initCurrentAnimation(@AnimationFlags int animFlags) {
    float range = getShiftRange();
    long maxAccuracy = (long) (2 * range);
    float startVerticalShift = mFromState.getVerticalProgress(mLauncher) * range;
    float endVerticalShift = mToState.getVerticalProgress(mLauncher) * range;
    float totalShift = endVerticalShift - startVerticalShift;
    final StateAnimationConfig config = totalShift == 0 ? new StateAnimationConfig() : getConfigForStates(mFromState, mToState);
    config.animFlags = updateAnimComponentsOnReinit(animFlags);
    config.duration = maxAccuracy;
    cancelPendingAnim();
    if (mFromState == OVERVIEW && mToState == NORMAL && mOverviewPortraitStateTouchHelper.shouldSwipeDownReturnToApp()) {
        // Reset the state manager, when changing the interaction mode
        mLauncher.getStateManager().goToState(OVERVIEW, false);
        mPendingAnimation = mOverviewPortraitStateTouchHelper.createSwipeDownToTaskAppAnimation(maxAccuracy, Interpolators.LINEAR);
        Runnable onCancelRunnable = () -> {
            cancelPendingAnim();
            clearState();
        };
        mCurrentAnimation = mPendingAnimation.createPlaybackController().setOnCancelRunnable(onCancelRunnable);
        mLauncher.getStateManager().setCurrentUserControlledAnimation(mCurrentAnimation);
        RecentsView recentsView = mLauncher.getOverviewPanel();
        totalShift = LayoutUtils.getShelfTrackingDistance(mLauncher, mLauncher.getDeviceProfile(), recentsView.getPagedOrientationHandler());
    } else {
        mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(mToState, config).setOnCancelRunnable(this::clearState);
    }
    if (totalShift == 0) {
        totalShift = Math.signum(mFromState.ordinal - mToState.ordinal) * OverviewState.getDefaultSwipeHeight(mLauncher);
    }
    return 1 / totalShift;
}
Also used : StateAnimationConfig(com.android.launcher3.states.StateAnimationConfig) RecentsView(com.android.quickstep.views.RecentsView)

Example 40 with OVERVIEW

use of com.android.launcher3.LauncherState.OVERVIEW 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)

Aggregations

LauncherState (com.android.launcher3.LauncherState)53 Animator (android.animation.Animator)50 ValueAnimator (android.animation.ValueAnimator)42 StateAnimationConfig (com.android.launcher3.states.StateAnimationConfig)41 RecentsView (com.android.quickstep.views.RecentsView)40 AnimatorSet (android.animation.AnimatorSet)38 Launcher (com.android.launcher3.Launcher)36 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)34 ObjectAnimator (android.animation.ObjectAnimator)30 LargeTest (androidx.test.filters.LargeTest)29 Test (org.junit.Test)29 Point (android.graphics.Point)24 View (android.view.View)22 DeviceProfile (com.android.launcher3.DeviceProfile)19 PendingAnimation (com.android.launcher3.anim.PendingAnimation)19 RemoteAnimationTargetCompat (com.android.systemui.shared.system.RemoteAnimationTargetCompat)19 ItemInfo (com.android.launcher3.model.data.ItemInfo)18 DepthController (com.android.launcher3.statehandlers.DepthController)17 Task (com.android.systemui.shared.recents.model.Task)17 Rect (android.graphics.Rect)16