Search in sources :

Example 1 with TaskView

use of com.android.quickstep.views.TaskView in project android_packages_apps_Launcher3 by crdroidandroid.

the class TaskViewTouchController method onControllerInterceptTouchEvent.

@Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
    if ((ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) && mCurrentAnimation == null) {
        clearState();
    }
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        mNoIntercept = !canInterceptTouch(ev);
        if (mNoIntercept) {
            return false;
        }
        // Now figure out which direction scroll events the controller will start
        // calling the callbacks.
        int directionsToDetectScroll = 0;
        boolean ignoreSlopWhenSettling = false;
        if (mCurrentAnimation != null) {
            directionsToDetectScroll = DIRECTION_BOTH;
            ignoreSlopWhenSettling = true;
        } else {
            mTaskBeingDragged = null;
            for (int i = 0; i < mRecentsView.getTaskViewCount(); i++) {
                TaskView view = mRecentsView.getTaskViewAt(i);
                if (mRecentsView.isTaskViewVisible(view) && mActivity.getDragLayer().isEventOverView(view, ev)) {
                    // Disable swiping up and down if the task overlay is modal.
                    if (isRecentsModal()) {
                        mTaskBeingDragged = null;
                        break;
                    }
                    mTaskBeingDragged = view;
                    int upDirection = mRecentsView.getPagedOrientationHandler().getUpDirection(mIsRtl);
                    if (!SysUINavigationMode.getMode(mActivity).hasGestures || (mActivity.getDeviceProfile().isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get())) {
                        // Don't allow swipe down to open if we don't support swipe up
                        // to enter overview, or when grid layout is enabled.
                        directionsToDetectScroll = upDirection;
                        mAllowGoingUp = true;
                        mAllowGoingDown = false;
                    } else {
                        // The task can be dragged up to dismiss it,
                        // and down to open if it's the current page.
                        mAllowGoingUp = true;
                        if (i == mRecentsView.getCurrentPage()) {
                            mAllowGoingDown = true;
                            directionsToDetectScroll = DIRECTION_BOTH;
                        } else {
                            mAllowGoingDown = false;
                            directionsToDetectScroll = upDirection;
                        }
                    }
                    break;
                }
            }
            if (mTaskBeingDragged == null) {
                mNoIntercept = true;
                return false;
            }
        }
        mDetector.setDetectableScrollConditions(directionsToDetectScroll, ignoreSlopWhenSettling);
    }
    if (mNoIntercept) {
        return false;
    }
    onControllerTouchEvent(ev);
    return mDetector.isDraggingOrSettling();
}
Also used : TaskView(com.android.quickstep.views.TaskView)

Example 2 with TaskView

use of com.android.quickstep.views.TaskView in project android_packages_apps_Launcher3 by crdroidandroid.

the class AbsSwipeUpHandler method updateSysUiFlags.

/**
 * @param windowProgress 0 == app, 1 == overview
 */
private void updateSysUiFlags(float windowProgress) {
    if (mRecentsAnimationController != null && mRecentsView != null) {
        TaskView runningTask = mRecentsView.getRunningTaskView();
        TaskView centermostTask = mRecentsView.getTaskViewNearestToCenterOfScreen();
        int centermostTaskFlags = centermostTask == null ? 0 : centermostTask.getThumbnail().getSysUiStatusNavFlags();
        boolean swipeUpThresholdPassed = windowProgress > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD;
        boolean quickswitchThresholdPassed = centermostTask != runningTask;
        // We will handle the sysui flags based on the centermost task view.
        mRecentsAnimationController.setUseLauncherSystemBarFlags(swipeUpThresholdPassed || (quickswitchThresholdPassed && centermostTaskFlags != 0));
        mRecentsAnimationController.setSplitScreenMinimized(swipeUpThresholdPassed);
        // Provide a hint to WM the direction that we will be settling in case the animation
        // needs to be canceled
        mRecentsAnimationController.setWillFinishToHome(swipeUpThresholdPassed);
        if (swipeUpThresholdPassed) {
            mActivity.getSystemUiController().updateUiState(UI_STATE_FULLSCREEN_TASK, 0);
        } else {
            mActivity.getSystemUiController().updateUiState(UI_STATE_FULLSCREEN_TASK, centermostTaskFlags);
        }
    }
}
Also used : TaskView(com.android.quickstep.views.TaskView)

Example 3 with TaskView

use of com.android.quickstep.views.TaskView in project android_packages_apps_Launcher3 by crdroidandroid.

the class AbsSwipeUpHandler method startNewTask.

@UiThread
private void startNewTask() {
    TaskView taskToLaunch = mRecentsView == null ? null : mRecentsView.getNextPageTaskView();
    startNewTask(success -> {
        if (!success) {
            reset();
            // We couldn't launch the task, so take user to overview so they can
            // decide what to do instead of staying in this broken state.
            endLauncherTransitionController();
            updateSysUiFlags(1);
        }
        doLogGesture(NEW_TASK, taskToLaunch);
    });
}
Also used : TaskView(com.android.quickstep.views.TaskView) UiThread(androidx.annotation.UiThread)

Example 4 with TaskView

use of com.android.quickstep.views.TaskView in project android_packages_apps_Launcher3 by crdroidandroid.

the class OverviewCommandHelper method executeCommand.

/**
 * Executes the task and returns true if next task can be executed. If false, then the next
 * task is deferred until {@link #scheduleNextTask} is called
 */
private <T extends StatefulActivity<?>> boolean executeCommand(CommandInfo cmd) {
    BaseActivityInterface<?, T> activityInterface = mOverviewComponentObserver.getActivityInterface();
    RecentsView recents = activityInterface.getVisibleRecentsView();
    if (recents == null) {
        if (cmd.type == TYPE_HIDE) {
            // already hidden
            return true;
        }
    } else {
        switch(cmd.type) {
            case TYPE_SHOW:
                // already visible
                return true;
            case TYPE_HIDE:
                {
                    int currentPage = recents.getNextPage();
                    TaskView tv = (currentPage >= 0 && currentPage < recents.getTaskViewCount()) ? (TaskView) recents.getPageAt(currentPage) : null;
                    return launchTask(recents, tv, cmd);
                }
            case TYPE_TOGGLE:
                return launchTask(recents, getNextTask(recents), cmd);
        }
    }
    if (activityInterface.switchToRecentsIfVisible(() -> scheduleNextTask(cmd))) {
        // If successfully switched, wait until animation finishes
        return false;
    }
    final T activity = activityInterface.getCreatedActivity();
    if (activity != null) {
        InteractionJankMonitorWrapper.begin(activity.getRootView(), InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH);
    }
    GestureState gestureState = mService.createGestureState(GestureState.DEFAULT_STATE);
    gestureState.setHandlingAtomicEvent(true);
    AbsSwipeUpHandler interactionHandler = mService.getSwipeUpHandlerFactory().newHandler(gestureState, cmd.createTime);
    interactionHandler.setGestureEndCallback(() -> onTransitionComplete(cmd, interactionHandler));
    interactionHandler.initWhenReady();
    RecentsAnimationListener recentAnimListener = new RecentsAnimationListener() {

        @Override
        public void onRecentsAnimationStart(RecentsAnimationController controller, RecentsAnimationTargets targets) {
            interactionHandler.onGestureEnded(0, new PointF(), new PointF());
            cmd.removeListener(this);
        }

        @Override
        public void onRecentsAnimationCanceled(ThumbnailData thumbnailData) {
            interactionHandler.onGestureCancelled();
            cmd.removeListener(this);
            RecentsView createdRecents = activityInterface.getCreatedActivity().getOverviewPanel();
            if (createdRecents != null) {
                createdRecents.onRecentsAnimationComplete();
            }
        }
    };
    if (mTaskAnimationManager.isRecentsAnimationRunning()) {
        cmd.mActiveCallbacks = mTaskAnimationManager.continueRecentsAnimation(gestureState);
        cmd.mActiveCallbacks.addListener(interactionHandler);
        mTaskAnimationManager.notifyRecentsAnimationState(interactionHandler);
        interactionHandler.onGestureStarted(true);
        cmd.mActiveCallbacks.addListener(recentAnimListener);
        mTaskAnimationManager.notifyRecentsAnimationState(recentAnimListener);
    } else {
        Intent intent = new Intent(interactionHandler.getLaunchIntent());
        intent.putExtra(INTENT_EXTRA_LOG_TRACE_ID, gestureState.getGestureId());
        cmd.mActiveCallbacks = mTaskAnimationManager.startRecentsAnimation(gestureState, intent, interactionHandler);
        interactionHandler.onGestureStarted(false);
        cmd.mActiveCallbacks.addListener(recentAnimListener);
    }
    Trace.beginAsyncSection(TRANSITION_NAME, 0);
    return false;
}
Also used : TaskView(com.android.quickstep.views.TaskView) ThumbnailData(com.android.systemui.shared.recents.model.ThumbnailData) PointF(android.graphics.PointF) RecentsView(com.android.quickstep.views.RecentsView) Intent(android.content.Intent) RecentsAnimationListener(com.android.quickstep.RecentsAnimationCallbacks.RecentsAnimationListener)

Example 5 with TaskView

use of com.android.quickstep.views.TaskView in project android_packages_apps_Launcher3 by crdroidandroid.

the class RecentsActivity method getActivityLaunchOptions.

@Override
public ActivityOptionsWrapper getActivityLaunchOptions(final View v, @Nullable ItemInfo item) {
    if (!(v instanceof TaskView)) {
        return super.getActivityLaunchOptions(v, item);
    }
    final TaskView taskView = (TaskView) v;
    RunnableList onEndCallback = new RunnableList();
    mActivityLaunchAnimationRunner = new RemoteAnimationFactory() {

        @Override
        public void onCreateAnimation(int transit, RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, RemoteAnimationTargetCompat[] nonAppTargets, AnimationResult result) {
            AnimatorSet anim = composeRecentsLaunchAnimator(taskView, appTargets, wallpaperTargets, nonAppTargets);
            anim.addListener(resetStateListener());
            result.setAnimation(anim, RecentsActivity.this, onEndCallback::executeAllAndDestroy, true);
        }

        @Override
        public void onAnimationCancelled() {
            onEndCallback.executeAllAndDestroy();
        }
    };
    final LauncherAnimationRunner wrapper = new LauncherAnimationRunner(mUiHandler, mActivityLaunchAnimationRunner, true);
    RemoteAnimationAdapterCompat adapterCompat = new RemoteAnimationAdapterCompat(wrapper, RECENTS_LAUNCH_DURATION, RECENTS_LAUNCH_DURATION - STATUS_BAR_TRANSITION_DURATION - STATUS_BAR_TRANSITION_PRE_DELAY);
    final ActivityOptionsWrapper activityOptions = new ActivityOptionsWrapper(ActivityOptionsCompat.makeRemoteAnimation(adapterCompat), onEndCallback);
    activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON);
    return activityOptions;
}
Also used : RemoteAnimationAdapterCompat(com.android.systemui.shared.system.RemoteAnimationAdapterCompat) TaskView(com.android.quickstep.views.TaskView) RemoteAnimationFactory(com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory) RemoteAnimationTargetCompat(com.android.systemui.shared.system.RemoteAnimationTargetCompat) AnimationResult(com.android.launcher3.LauncherAnimationRunner.AnimationResult) ActivityOptionsWrapper(com.android.launcher3.util.ActivityOptionsWrapper) AnimatorSet(android.animation.AnimatorSet) LauncherAnimationRunner(com.android.launcher3.LauncherAnimationRunner) RunnableList(com.android.launcher3.util.RunnableList)

Aggregations

TaskView (com.android.quickstep.views.TaskView)14 AnimatorPlaybackController (com.android.launcher3.anim.AnimatorPlaybackController)2 PendingAnimation (com.android.launcher3.anim.PendingAnimation)2 RecentsView (com.android.quickstep.views.RecentsView)2 RemoteAnimationTargetCompat (com.android.systemui.shared.system.RemoteAnimationTargetCompat)2 Animator (android.animation.Animator)1 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)1 AnimatorSet (android.animation.AnimatorSet)1 ObjectAnimator (android.animation.ObjectAnimator)1 ComponentName (android.content.ComponentName)1 Context (android.content.Context)1 Intent (android.content.Intent)1 PointF (android.graphics.PointF)1 UiThread (androidx.annotation.UiThread)1 DeviceProfile (com.android.launcher3.DeviceProfile)1 LauncherAnimationRunner (com.android.launcher3.LauncherAnimationRunner)1 AnimationResult (com.android.launcher3.LauncherAnimationRunner.AnimationResult)1 RemoteAnimationFactory (com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory)1 ItemInfo (com.android.launcher3.model.data.ItemInfo)1 ActivityOptionsWrapper (com.android.launcher3.util.ActivityOptionsWrapper)1