Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05abfa49 authored by Ats Jenk's avatar Ats Jenk Committed by Android (Google) Code Review
Browse files

Merge "Fix invoking transient taskbar in desktop windowing prototypes" into tm-qpr-dev

parents 007f5232 d9f6d4e3
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.launcher3.statehandlers;

import android.os.SystemProperties;
import android.util.Log;
import android.view.View;

import com.android.launcher3.Launcher;
@@ -29,6 +30,9 @@ import com.android.launcher3.uioverrides.QuickstepLauncher;
 */
public class DesktopVisibilityController {

    private static final String TAG = "DesktopVisController";
    private static final boolean DEBUG = false;

    private final Launcher mLauncher;

    private boolean mFreeformTasksVisible;
@@ -58,6 +62,9 @@ public class DesktopVisibilityController {
     * Sets whether freeform windows are visible and updates launcher visibility based on that.
     */
    public void setFreeformTasksVisible(boolean freeformTasksVisible) {
        if (DEBUG) {
            Log.d(TAG, "setFreeformTasksVisible: visible=" + freeformTasksVisible);
        }
        if (!isDesktopModeSupported()) {
            return;
        }
@@ -83,6 +90,9 @@ public class DesktopVisibilityController {
     * Sets whether the overview is visible and updates launcher visibility based on that.
     */
    public void setOverviewStateEnabled(boolean overviewStateEnabled) {
        if (DEBUG) {
            Log.d(TAG, "setOverviewStateEnabled: enabled=" + overviewStateEnabled);
        }
        if (!isDesktopModeSupported()) {
            return;
        }
@@ -109,6 +119,9 @@ public class DesktopVisibilityController {
     * Sets whether recents gesture is in progress.
     */
    public void setGestureInProgress(boolean gestureInProgress) {
        if (DEBUG) {
            Log.d(TAG, "setGestureInProgress: inProgress=" + gestureInProgress);
        }
        if (!isDesktopModeSupported()) {
            return;
        }
@@ -118,6 +131,9 @@ public class DesktopVisibilityController {
    }

    private void setLauncherViewsVisibility(int visibility) {
        if (DEBUG) {
            Log.d(TAG, "setLauncherViewsVisibility: visibility=" + visibility);
        }
        View workspaceView = mLauncher.getWorkspace();
        if (workspaceView != null) {
            workspaceView.setVisibility(visibility);
@@ -129,6 +145,9 @@ public class DesktopVisibilityController {
    }

    private void markLauncherPaused() {
        if (DEBUG) {
            Log.d(TAG, "markLauncherPaused");
        }
        StatefulActivity<LauncherState> activity =
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
        if (activity != null) {
@@ -137,6 +156,9 @@ public class DesktopVisibilityController {
    }

    private void markLauncherResumed() {
        if (DEBUG) {
            Log.d(TAG, "markLauncherResumed");
        }
        StatefulActivity<LauncherState> activity =
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
        // Check activity state before calling setResumed(). Launcher may have been actually
+1 −1
Original line number Diff line number Diff line
@@ -800,7 +800,7 @@ public class QuickstepLauncher extends Launcher {

    @Override
    public void setResumed() {
        if (DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED) {
        if (DesktopTaskView.DESKTOP_MODE_SUPPORTED) {
            DesktopVisibilityController controller = mDesktopVisibilityController;
            if (controller != null && controller.areFreeformTasksVisible()
                    && !controller.isGestureInProgress()) {
+16 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.launcher3.anim.Interpolators.ACCEL_2;
import static com.android.launcher3.anim.Interpolators.INSTANT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.quickstep.AbsSwipeUpHandler.RECENTS_ATTACH_DURATION;
import static com.android.quickstep.GestureState.GestureEndTarget.LAST_TASK;
import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS;
import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_FADE_ANIM;
import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_TRANSLATE_X_ANIM;
@@ -62,6 +63,7 @@ import com.android.launcher3.util.NavigationMode;
import com.android.launcher3.views.ScrimView;
import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.views.DesktopTaskView;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.model.ThumbnailData;

@@ -107,6 +109,20 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T
        if (endTarget != null) {
            // We were on our way to this state when we got canceled, end there instead.
            startState = stateFromGestureEndTarget(endTarget);
            if (DesktopTaskView.DESKTOP_MODE_SUPPORTED) {
                DesktopVisibilityController controller = getDesktopVisibilityController();
                if (controller != null && controller.areFreeformTasksVisible()
                        && endTarget == LAST_TASK) {
                    // When we are cancelling the transition and going back to last task, move to
                    // rest state instead when desktop tasks are visible.
                    // If a fullscreen task is visible, launcher goes to normal state when the
                    // activity is stopped. This does not happen when freeform tasks are visible
                    // on top of launcher. Force the launcher state to rest state here.
                    startState = activity.getStateManager().getRestState();
                    // Do not animate the transition
                    activityVisible = false;
                }
            }
        }
        activity.getStateManager().goToState(startState, activityVisible);
    }
+7 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.quickstep.TopTaskTracker.CachedTaskInfo;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.views.DesktopTaskView;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -238,6 +239,12 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
            // to let the transition controller collect Home activity.
            CachedTaskInfo cti = gestureState.getRunningTask();
            boolean homeIsOnTop = cti != null && cti.isHomeTask();
            if (DesktopTaskView.DESKTOP_MODE_SUPPORTED) {
                if (cti != null && cti.isFreeformTask()) {
                    // No transient launch when desktop task is on top
                    homeIsOnTop = true;
                }
            }
            if (!homeIsOnTop) {
                options.setTransientLaunch();
            }
+10 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.quickstep;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.content.Intent.ACTION_CHOOSER;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -254,6 +255,15 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
                    .getActivityType() == ACTIVITY_TYPE_HOME;
        }

        /**
         * Returns {@code true} if this task windowing mode is set to {@link
         * android.app.WindowConfiguration#WINDOWING_MODE_FREEFORM}
         */
        public boolean isFreeformTask() {
            return mTopTask != null && mTopTask.configuration.windowConfiguration.getWindowingMode()
                    == WINDOWING_MODE_FREEFORM;
        }

        /**
         * Returns {@link Task} array which can be used as a placeholder until the true object
         * is loaded by the model
Loading