Search in sources :

Example 26 with OVERVIEW

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

the class RecentsView method updateDeadZoneRects.

private void updateDeadZoneRects() {
    // Get the deadzone rect surrounding the clear all button to not dismiss overview to home
    mClearAllButtonDeadZoneRect.setEmpty();
    if (mClearAllButton.getWidth() > 0) {
        int verticalMargin = getResources().getDimensionPixelSize(R.dimen.recents_clear_all_deadzone_vertical_margin);
        mClearAllButton.getHitRect(mClearAllButtonDeadZoneRect);
        mClearAllButtonDeadZoneRect.inset(-getPaddingRight() / 2, -verticalMargin);
    }
    // Get the deadzone rect between the task views
    mTaskViewDeadZoneRect.setEmpty();
    int count = getTaskViewCount();
    if (count > 0) {
        final View taskView = getTaskViewAt(0);
        getTaskViewAt(count - 1).getHitRect(mTaskViewDeadZoneRect);
        mTaskViewDeadZoneRect.union(taskView.getLeft(), taskView.getTop(), taskView.getRight(), taskView.getBottom());
    }
}
Also used : View(android.view.View) ListView(android.widget.ListView) PagedView(com.android.launcher3.PagedView) TextPaint(android.text.TextPaint) Point(android.graphics.Point)

Example 27 with OVERVIEW

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

the class OverviewToHomeAnim method animateWithVelocity.

/**
 * Starts the animation. If velocity < 0 (i.e. upwards), also plays a
 * {@link StaggeredWorkspaceAnim}.
 */
public void animateWithVelocity(float velocity) {
    StateManager<LauncherState> stateManager = mLauncher.getStateManager();
    LauncherState startState = stateManager.getState();
    if (startState != OVERVIEW) {
        Log.e(TAG, "animateFromOverviewToHome: unexpected start state " + startState);
    }
    AnimatorSet anim = new AnimatorSet();
    boolean playStaggeredWorkspaceAnim = velocity < 0;
    if (playStaggeredWorkspaceAnim) {
        StaggeredWorkspaceAnim staggeredWorkspaceAnim = new StaggeredWorkspaceAnim(mLauncher, velocity, false);
        staggeredWorkspaceAnim.addAnimatorListener(new AnimationSuccessListener() {

            @Override
            public void onAnimationSuccess(Animator animator) {
                mIsHomeStaggeredAnimFinished = true;
                maybeOverviewToHomeAnimComplete();
            }
        });
        anim.play(staggeredWorkspaceAnim.getAnimators());
    } else {
        mIsHomeStaggeredAnimFinished = true;
    }
    RecentsView recentsView = mLauncher.getOverviewPanel();
    int numPagesToScroll = recentsView.getNextPage() - DEFAULT_PAGE;
    int scrollDuration = Math.min(MAX_PAGE_SCROLL_DURATION, numPagesToScroll * PER_PAGE_SCROLL_DURATION);
    int duration = Math.max(scrollDuration, startState.getTransitionDuration(mLauncher));
    StateAnimationConfig config = new UseFirstInterpolatorStateAnimConfig();
    config.duration = duration;
    config.animFlags = playStaggeredWorkspaceAnim ? // StaggeredWorkspaceAnim doesn't animate overview, so we handle it here.
    PLAY_ATOMIC_OVERVIEW_PEEK : ANIM_ALL_COMPONENTS;
    boolean isLayoutNaturalToLauncher = recentsView.getPagedOrientationHandler().isLayoutNaturalToLauncher();
    config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, isLayoutNaturalToLauncher ? clampToProgress(FAST_OUT_SLOW_IN, 0, 0.75f) : FINAL_FRAME);
    config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, FINAL_FRAME);
    config.setInterpolator(ANIM_OVERVIEW_SCALE, FINAL_FRAME);
    config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, INSTANT);
    if (!isLayoutNaturalToLauncher) {
        config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL);
    }
    AnimatorSet stateAnim = stateManager.createAtomicAnimation(startState, NORMAL, config);
    stateAnim.addListener(new AnimationSuccessListener() {

        @Override
        public void onAnimationSuccess(Animator animator) {
            mIsOverviewHidden = true;
            maybeOverviewToHomeAnimComplete();
        }
    });
    anim.play(stateAnim);
    stateManager.setCurrentAnimation(anim, NORMAL);
    anim.start();
    recentsView.snapToPage(DEFAULT_PAGE, duration);
}
Also used : LauncherState(com.android.launcher3.LauncherState) Animator(android.animation.Animator) StateAnimationConfig(com.android.launcher3.states.StateAnimationConfig) RecentsView(com.android.quickstep.views.RecentsView) AnimatorSet(android.animation.AnimatorSet) AnimationSuccessListener(com.android.launcher3.anim.AnimationSuccessListener)

Example 28 with OVERVIEW

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

the class TaskOverlayFactory method getEnabledShortcuts.

public static List<SystemShortcut> getEnabledShortcuts(TaskView taskView) {
    final ArrayList<SystemShortcut> shortcuts = new ArrayList<>();
    final BaseDraggingActivity activity = BaseActivity.fromContext(taskView.getContext());
    for (TaskShortcutFactory menuOption : MENU_OPTIONS) {
        SystemShortcut shortcut = menuOption.getShortcut(activity, taskView);
        if (shortcut != null) {
            shortcuts.add(shortcut);
        }
    }
    RecentsOrientedState orientedState = taskView.getRecentsView().getPagedViewOrientedState();
    boolean canLauncherRotate = orientedState.canRecentsActivityRotate();
    boolean isInLandscape = orientedState.getTouchRotation() != ROTATION_0;
    // Add overview actions to the menu when in in-place rotate landscape mode.
    if (!canLauncherRotate && isInLandscape) {
        // Add screenshot action to task menu.
        SystemShortcut screenshotShortcut = TaskShortcutFactory.SCREENSHOT.getShortcut(activity, taskView);
        if (screenshotShortcut != null) {
            shortcuts.add(screenshotShortcut);
        }
        // Add modal action only if display orientation is the same as the device orientation.
        if (orientedState.getDisplayRotation() == ROTATION_0) {
            SystemShortcut modalShortcut = TaskShortcutFactory.MODAL.getShortcut(activity, taskView);
            if (modalShortcut != null) {
                shortcuts.add(modalShortcut);
            }
        }
    }
    return shortcuts;
}
Also used : BaseDraggingActivity(com.android.launcher3.BaseDraggingActivity) SystemShortcut(com.android.launcher3.popup.SystemShortcut) ArrayList(java.util.ArrayList) RecentsOrientedState(com.android.quickstep.util.RecentsOrientedState)

Example 29 with OVERVIEW

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

the class ItemLongClickListener method onWorkspaceItemLongClick.

private static boolean onWorkspaceItemLongClick(View v) {
    TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onWorkspaceItemLongClick");
    Launcher launcher = Launcher.getLauncher(v.getContext());
    if (!canStartDrag(launcher))
        return false;
    if (!launcher.isInState(NORMAL) && !launcher.isInState(OVERVIEW))
        return false;
    if (!(v.getTag() instanceof ItemInfo))
        return false;
    launcher.setWaitingForResult(null);
    beginDrag(v, launcher, (ItemInfo) v.getTag(), new DragOptions());
    return true;
}
Also used : DragOptions(com.android.launcher3.dragndrop.DragOptions) ItemInfo(com.android.launcher3.model.data.ItemInfo) Launcher(com.android.launcher3.Launcher)

Example 30 with OVERVIEW

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

the class QuickstepAtomicAnimationFactory method prepareForAtomicAnimation.

@Override
public void prepareForAtomicAnimation(LauncherState fromState, LauncherState toState, StateAnimationConfig config) {
    if (toState == NORMAL && fromState == OVERVIEW) {
        config.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL);
        config.setInterpolator(ANIM_WORKSPACE_FADE, ACCEL);
        config.setInterpolator(ANIM_ALL_APPS_FADE, ACCEL);
        config.setInterpolator(ANIM_OVERVIEW_SCALE, clampToProgress(ACCEL, 0, 0.9f));
        config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL_DEACCEL);
        if (SysUINavigationMode.getMode(mActivity) == NO_BUTTON) {
            config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
        } else {
            config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
        }
        Workspace workspace = mActivity.getWorkspace();
        // Start from a higher workspace scale, but only if we're invisible so we don't jump.
        boolean isWorkspaceVisible = workspace.getVisibility() == VISIBLE;
        if (isWorkspaceVisible) {
            CellLayout currentChild = (CellLayout) workspace.getChildAt(workspace.getCurrentPage());
            isWorkspaceVisible = currentChild.getVisibility() == VISIBLE && currentChild.getShortcutsAndWidgets().getAlpha() > 0;
        }
        if (!isWorkspaceVisible) {
            workspace.setScaleX(0.92f);
            workspace.setScaleY(0.92f);
        }
        Hotseat hotseat = mActivity.getHotseat();
        boolean isHotseatVisible = hotseat.getVisibility() == VISIBLE && hotseat.getAlpha() > 0;
        if (!isHotseatVisible) {
            hotseat.setScaleX(0.92f);
            hotseat.setScaleY(0.92f);
            if (ENABLE_OVERVIEW_ACTIONS.get()) {
                AllAppsContainerView qsbContainer = mActivity.getAppsView();
                View qsb = qsbContainer.getSearchView();
                boolean qsbVisible = qsb.getVisibility() == VISIBLE && qsb.getAlpha() > 0;
                if (!qsbVisible) {
                    qsbContainer.setScaleX(0.92f);
                    qsbContainer.setScaleY(0.92f);
                }
            }
        }
    } else if (toState == NORMAL && fromState == OVERVIEW_PEEK) {
        // Keep fully visible until the very end (when overview is offscreen) to make invisible.
        config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
    } else if (toState == OVERVIEW_PEEK && fromState == NORMAL) {
        config.setInterpolator(ANIM_OVERVIEW_FADE, INSTANT);
        config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, OVERSHOOT_1_7);
        config.setInterpolator(ANIM_OVERVIEW_SCRIM_FADE, FAST_OUT_SLOW_IN);
    } else if ((fromState == NORMAL || fromState == HINT_STATE) && toState == OVERVIEW) {
        if (SysUINavigationMode.getMode(mActivity) == NO_BUTTON) {
            config.setInterpolator(ANIM_WORKSPACE_SCALE, fromState == NORMAL ? ACCEL : OVERSHOOT_1_2);
            config.setInterpolator(ANIM_WORKSPACE_TRANSLATE, ACCEL);
            config.setInterpolator(ANIM_OVERVIEW_FADE, INSTANT);
        } else {
            config.setInterpolator(ANIM_WORKSPACE_SCALE, OVERSHOOT_1_2);
            config.setInterpolator(ANIM_OVERVIEW_FADE, OVERSHOOT_1_2);
            // Scale up the recents, if it is not coming from the side
            RecentsView overview = mActivity.getOverviewPanel();
            if (overview.getVisibility() != VISIBLE || overview.getContentAlpha() == 0) {
                RECENTS_SCALE_PROPERTY.set(overview, RECENTS_PREPARE_SCALE);
            }
        }
        config.setInterpolator(ANIM_WORKSPACE_FADE, OVERSHOOT_1_2);
        config.setInterpolator(ANIM_ALL_APPS_FADE, OVERSHOOT_1_2);
        config.setInterpolator(ANIM_OVERVIEW_SCALE, OVERSHOOT_1_2);
        config.setInterpolator(ANIM_DEPTH, OVERSHOOT_1_2);
        Interpolator translationInterpolator = ENABLE_OVERVIEW_ACTIONS.get() && removeShelfFromOverview(mActivity) ? OVERSHOOT_1_2 : OVERSHOOT_1_7;
        config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, translationInterpolator);
        config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, translationInterpolator);
    } else if (fromState == HINT_STATE && toState == NORMAL) {
        config.setInterpolator(ANIM_DEPTH, DEACCEL_3);
        if (mHintToNormalDuration == -1) {
            ValueAnimator va = getSpringScaleAnimator(mActivity, mActivity.getWorkspace(), toState.getWorkspaceScaleAndTranslation(mActivity).scale);
            mHintToNormalDuration = (int) va.getDuration();
        }
        config.duration = Math.max(config.duration, mHintToNormalDuration);
    }
}
Also used : AllAppsContainerView(com.android.launcher3.allapps.AllAppsContainerView) Hotseat(com.android.launcher3.Hotseat) CellLayout(com.android.launcher3.CellLayout) RecentsView(com.android.quickstep.views.RecentsView) Interpolator(android.view.animation.Interpolator) ValueAnimator(android.animation.ValueAnimator) View(android.view.View) AllAppsContainerView(com.android.launcher3.allapps.AllAppsContainerView) RecentsView(com.android.quickstep.views.RecentsView) Workspace(com.android.launcher3.Workspace)

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