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

Commit 0927251a authored by Ats Jenk's avatar Ats Jenk
Browse files

Account for freeform tasks being visible in overview

When live tiles are enabled, desktop tasks remain visible while in
overview. This is due to tasks remaining in running state.
Update DesktopVsibilityController to handle this case. If in freeform,
it should return that freeform tasks are not visible to any callers.
Also move launcher state handling to inside the controller so we don't
have this handling in other places.
Introduce separate handling of background and overview state. In
background state we want to keep the freeform task visibility state
matching the actualy visibility. And show the launcher views and resume
the activity.
In overview state we want to override the freeform visibility and show
launcher views.

Bug: 297590571
Test: open an app on desktop
      - swipe up for taskbar multiple times, observe that we remain on
        desktop
      - swipe up for taskbar and launch an app, observe it launches on
        desktop
      - swipe up to recents, observe that recents UI is shown and task
        remains running
      - swipe up to recents, launch desktop again from recents
      - swipe up to recents, launch another fullscreen app from recents
      - swipe up from a fullscreen, launch desktop from recents
Change-Id: Id5cef7111da6929c8435ef9d221db1abd8361b15
parent eb143041
Loading
Loading
Loading
Loading
+55 −12
Original line number Original line Diff line number Diff line
@@ -15,8 +15,10 @@
 */
 */
package com.android.launcher3.statehandlers;
package com.android.launcher3.statehandlers;


import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;


import android.os.Debug;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.util.Log;
import android.util.Log;
import android.view.View;
import android.view.View;
@@ -46,6 +48,7 @@ public class DesktopVisibilityController {


    private boolean mFreeformTasksVisible;
    private boolean mFreeformTasksVisible;
    private boolean mInOverviewState;
    private boolean mInOverviewState;
    private boolean mBackgroundStateEnabled;
    private boolean mGestureInProgress;
    private boolean mGestureInProgress;


    @Nullable
    @Nullable
@@ -113,7 +116,11 @@ public class DesktopVisibilityController {
     * Whether freeform windows are visible in desktop mode.
     * Whether freeform windows are visible in desktop mode.
     */
     */
    public boolean areFreeformTasksVisible() {
    public boolean areFreeformTasksVisible() {
        return mFreeformTasksVisible;
        if (DEBUG) {
            Log.d(TAG, "areFreeformTasksVisible: freeformVisible=" + mFreeformTasksVisible
                    + " overview=" + mInOverviewState);
        }
        return mFreeformTasksVisible && !mInOverviewState;
    }
    }


    /**
    /**
@@ -121,7 +128,8 @@ public class DesktopVisibilityController {
     */
     */
    public void setFreeformTasksVisible(boolean freeformTasksVisible) {
    public void setFreeformTasksVisible(boolean freeformTasksVisible) {
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "setFreeformTasksVisible: visible=" + freeformTasksVisible);
            Log.d(TAG, "setFreeformTasksVisible: visible=" + freeformTasksVisible
                    + " currentValue=" + mFreeformTasksVisible);
        }
        }
        if (!isDesktopModeSupported()) {
        if (!isDesktopModeSupported()) {
            return;
            return;
@@ -146,11 +154,21 @@ public class DesktopVisibilityController {
    }
    }


    /**
    /**
     * Sets whether the overview is visible and updates launcher visibility based on that.
     * Process launcher state change and update launcher view visibility based on desktop state
     */
     */
    public void setOverviewStateEnabled(boolean overviewStateEnabled) {
    public void onLauncherStateChanged(LauncherState state) {
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "setOverviewStateEnabled: enabled=" + overviewStateEnabled);
            Log.d(TAG, "onLauncherStateChanged: newState=" + state);
        }
        setBackgroundStateEnabled(state == BACKGROUND_APP);
        // Desktop visibility tracks overview and background state separately
        setOverviewStateEnabled(state != BACKGROUND_APP && state.overviewUi);
    }

    private void setOverviewStateEnabled(boolean overviewStateEnabled) {
        if (DEBUG) {
            Log.d(TAG, "setOverviewStateEnabled: enabled=" + overviewStateEnabled
                    + " currentValue=" + mInOverviewState);
        }
        }
        if (!isDesktopModeSupported()) {
        if (!isDesktopModeSupported()) {
            return;
            return;
@@ -160,7 +178,7 @@ public class DesktopVisibilityController {
            if (mInOverviewState) {
            if (mInOverviewState) {
                setLauncherViewsVisibility(View.VISIBLE);
                setLauncherViewsVisibility(View.VISIBLE);
                markLauncherResumed();
                markLauncherResumed();
            } else if (mFreeformTasksVisible && !mGestureInProgress) {
            } else if (areFreeformTasksVisible() && !mGestureInProgress) {
                // Switching out of overview state and gesture finished.
                // Switching out of overview state and gesture finished.
                // If freeform tasks are still visible, hide launcher again.
                // If freeform tasks are still visible, hide launcher again.
                setLauncherViewsVisibility(View.INVISIBLE);
                setLauncherViewsVisibility(View.INVISIBLE);
@@ -169,6 +187,27 @@ public class DesktopVisibilityController {
        }
        }
    }
    }


    private void setBackgroundStateEnabled(boolean backgroundStateEnabled) {
        if (DEBUG) {
            Log.d(TAG, "setBackgroundStateEnabled: enabled=" + backgroundStateEnabled
                    + " currentValue=" + mBackgroundStateEnabled);
        }
        if (!isDesktopModeSupported()) {
            return;
        }
        if (backgroundStateEnabled != mBackgroundStateEnabled) {
            mBackgroundStateEnabled = backgroundStateEnabled;
            if (mBackgroundStateEnabled) {
                setLauncherViewsVisibility(View.VISIBLE);
                markLauncherResumed();
            } else if (areFreeformTasksVisible() && !mGestureInProgress) {
                // Switching out of background state. If freeform tasks are visible, pause launcher.
                setLauncherViewsVisibility(View.INVISIBLE);
                markLauncherPaused();
            }
        }
    }

    /**
    /**
     * Whether recents gesture is currently in progress.
     * Whether recents gesture is currently in progress.
     */
     */
@@ -183,6 +222,9 @@ public class DesktopVisibilityController {
        if (!isDesktopModeSupported()) {
        if (!isDesktopModeSupported()) {
            return;
            return;
        }
        }
        if (DEBUG) {
            Log.d(TAG, "setRecentsGestureStart");
        }
        setRecentsGestureInProgress(true);
        setRecentsGestureInProgress(true);
    }
    }


@@ -194,6 +236,9 @@ public class DesktopVisibilityController {
        if (!isDesktopModeSupported()) {
        if (!isDesktopModeSupported()) {
            return;
            return;
        }
        }
        if (DEBUG) {
            Log.d(TAG, "setRecentsGestureEnd: endTarget=" + endTarget);
        }
        setRecentsGestureInProgress(false);
        setRecentsGestureInProgress(false);


        if (endTarget == null) {
        if (endTarget == null) {
@@ -203,9 +248,6 @@ public class DesktopVisibilityController {
    }
    }


    private void setRecentsGestureInProgress(boolean gestureInProgress) {
    private void setRecentsGestureInProgress(boolean gestureInProgress) {
        if (DEBUG) {
            Log.d(TAG, "setGestureInProgress: inProgress=" + gestureInProgress);
        }
        if (gestureInProgress != mGestureInProgress) {
        if (gestureInProgress != mGestureInProgress) {
            mGestureInProgress = gestureInProgress;
            mGestureInProgress = gestureInProgress;
        }
        }
@@ -222,7 +264,8 @@ public class DesktopVisibilityController {


    private void setLauncherViewsVisibility(int visibility) {
    private void setLauncherViewsVisibility(int visibility) {
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "setLauncherViewsVisibility: visibility=" + visibility);
            Log.d(TAG, "setLauncherViewsVisibility: visibility=" + visibility + " "
                    + Debug.getCaller());
        }
        }
        View workspaceView = mLauncher.getWorkspace();
        View workspaceView = mLauncher.getWorkspace();
        if (workspaceView != null) {
        if (workspaceView != null) {
@@ -236,7 +279,7 @@ public class DesktopVisibilityController {


    private void markLauncherPaused() {
    private void markLauncherPaused() {
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "markLauncherPaused");
            Log.d(TAG, "markLauncherPaused " + Debug.getCaller());
        }
        }
        StatefulActivity<LauncherState> activity =
        StatefulActivity<LauncherState> activity =
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
@@ -247,7 +290,7 @@ public class DesktopVisibilityController {


    private void markLauncherResumed() {
    private void markLauncherResumed() {
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "markLauncherResumed");
            Log.d(TAG, "markLauncherResumed " + Debug.getCaller());
        }
        }
        StatefulActivity<LauncherState> activity =
        StatefulActivity<LauncherState> activity =
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
                QuickstepLauncher.ACTIVITY_TRACKER.getCreatedActivity();
+4 −19
Original line number Original line Diff line number Diff line
@@ -137,16 +137,16 @@ public class LauncherRecentsView extends RecentsView<QuickstepLauncher, Launcher
    @Override
    @Override
    public void onStateTransitionStart(LauncherState toState) {
    public void onStateTransitionStart(LauncherState toState) {
        setOverviewStateEnabled(toState.overviewUi);
        setOverviewStateEnabled(toState.overviewUi);
        if (toState.overviewUi) {

            // If overview is enabled, we want to update at the start
            updateOverviewStateForDesktop(true);
        }
        setOverviewGridEnabled(toState.displayOverviewTasksAsGrid(mActivity.getDeviceProfile()));
        setOverviewGridEnabled(toState.displayOverviewTasksAsGrid(mActivity.getDeviceProfile()));
        setOverviewFullscreenEnabled(toState.getOverviewFullscreenProgress() == 1);
        setOverviewFullscreenEnabled(toState.getOverviewFullscreenProgress() == 1);
        if (toState == OVERVIEW_MODAL_TASK) {
        if (toState == OVERVIEW_MODAL_TASK) {
            setOverviewSelectEnabled(true);
            setOverviewSelectEnabled(true);
        }
        }
        setFreezeViewVisibility(true);
        setFreezeViewVisibility(true);
        if (mActivity.getDesktopVisibilityController() != null) {
            mActivity.getDesktopVisibilityController().onLauncherStateChanged(toState);
        }
    }
    }


    @Override
    @Override
@@ -167,11 +167,6 @@ public class LauncherRecentsView extends RecentsView<QuickstepLauncher, Launcher
            runActionOnRemoteHandles(remoteTargetHandle ->
            runActionOnRemoteHandles(remoteTargetHandle ->
                    remoteTargetHandle.getTaskViewSimulator().setDrawsBelowRecents(true));
                    remoteTargetHandle.getTaskViewSimulator().setDrawsBelowRecents(true));
        }
        }

        if (!finalState.overviewUi) {
            // If overview is disabled, we want to update at the end
            updateOverviewStateForDesktop(false);
        }
    }
    }


    @Override
    @Override
@@ -183,9 +178,6 @@ public class LauncherRecentsView extends RecentsView<QuickstepLauncher, Launcher
                    & CLEAR_ALL_BUTTON) != 0;
                    & CLEAR_ALL_BUTTON) != 0;
            setDisallowScrollToClearAll(!hasClearAllButton);
            setDisallowScrollToClearAll(!hasClearAllButton);
        }
        }
        if (mActivity.getDesktopVisibilityController() != null) {
            mActivity.getDesktopVisibilityController().setOverviewStateEnabled(enabled);
        }
    }
    }


    @Override
    @Override
@@ -282,11 +274,4 @@ public class LauncherRecentsView extends RecentsView<QuickstepLauncher, Launcher
                    null /* transition */);
                    null /* transition */);
        }
        }
    }
    }

    private void updateOverviewStateForDesktop(boolean enabled) {
        DesktopVisibilityController controller = mActivity.getDesktopVisibilityController();
        if (controller != null) {
            controller.setOverviewStateEnabled(enabled);
        }
    }
}
}