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

Commit ac36e4d0 authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Don't start recents multiple times when entering split-screen

ActivityStack.setWindowingMode() takes care of starting the recents
activity when split-screen is activated so we don't need to do this
all over the place anymore.

Change-Id: I62153c4125744e9da533b6293e91c0658868bd1b
Fixes: 68952186
Test: ActivityManagerSplitScreenTests#testLaunchToSideAndBringToFront
parent 25c3c34c
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -23,14 +23,12 @@ import static android.view.View.MeasureSpec;
import static com.android.systemui.statusbar.phone.StatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS;

import android.app.ActivityManager;
import android.app.ActivityManager.TaskSnapshot;
import android.app.ActivityOptions;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.GraphicBuffer;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
@@ -89,7 +87,6 @@ import com.android.systemui.shared.recents.view.AppTransitionAnimationSpecsFutur
import com.android.systemui.shared.recents.view.RecentsTransition;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.stackdivider.DividerView;
import com.android.systemui.statusbar.phone.NavigationBarGestureHelper;
import com.android.systemui.statusbar.phone.StatusBar;

import java.util.ArrayList;
@@ -657,13 +654,6 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
        // the resize mode already.
        if (ssp.setTaskWindowingModeSplitScreenPrimary(taskId, stackCreateMode, initialBounds)) {
            EventBus.getDefault().send(new DockedTopTaskEvent(dragMode, initialBounds));
            showRecents(
                    false /* triggeredFromAltTab */,
                    dragMode == NavigationBarGestureHelper.DRAG_MODE_RECENTS,
                    false /* animate */,
                    true /* launchedWhileDockingTask*/,
                    false /* fromHome */,
                    DividerView.INVALID_RECENTS_GROW_TARGET);
        }
    }

+4 −8
Original line number Diff line number Diff line
@@ -501,9 +501,11 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
            windowingMode = WINDOWING_MODE_FULLSCREEN;
        }

        final boolean alreadyInSplitScreenMode = display.hasSplitScreenPrimaryStack();

        // Take any required action due to us not supporting the preferred windowing mode.
        if (windowingMode != preferredWindowingMode && isActivityTypeStandardOrUndefined()) {
            if (display.hasSplitScreenPrimaryStack()
            if (alreadyInSplitScreenMode
                    && (preferredWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
                    || preferredWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)) {
                // Looks like we can't launch in split screen mode, go ahead an dismiss split-screen
@@ -577,7 +579,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
                resize(mTmpRect2, null /* tempTaskBounds */, null /* tempTaskInsetBounds */);
            }
        } finally {
            if (mDisplayId == DEFAULT_DISPLAY
            if (!alreadyInSplitScreenMode && mDisplayId == DEFAULT_DISPLAY
                    && windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
                // Make sure recents stack exist when creating a dock stack as it normally needs to
                // be on the other side of the docked stack and we make visibility decisions based
@@ -1678,12 +1680,6 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        return true;
    }

    /** Returns true if the stack is currently considered visible. */
    boolean isVisible() {
        return mWindowContainerController != null && mWindowContainerController.isVisible()
                && !mForceHidden;
    }

    boolean isTopStackOnDisplay() {
        return getDisplay().isTopStack(this);
    }
+3 −15
Original line number Diff line number Diff line
@@ -606,21 +606,9 @@ class ActivityStarter {
            return;
        }

        if (startedActivityStack.inSplitScreenPrimaryWindowingMode()) {
            final ActivityStack homeStack = mSupervisor.mHomeStack;
            final boolean homeStackVisible = homeStack != null && homeStack.isVisible();
            if (homeStackVisible) {
                // We launch an activity while being in home stack, which means either launcher or
                // recents into docked stack. We don't want the launched activity to be alone in a
                // docked stack, so we want to immediately launch recents too.
                if (DEBUG_RECENTS) Slog.d(TAG, "Scheduling recents launch.");
                mService.mWindowManager.showRecentApps(true /* fromHome */);
            }
            return;
        }

        boolean clearedTask = (mLaunchFlags & (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))
                == (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK) && (mReuseTask != null);
        final int clearTaskFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK;
        boolean clearedTask = (mLaunchFlags & clearTaskFlags) == clearTaskFlags
                && mReuseTask != null;
        if (startedActivityStack.inPinnedWindowingMode()
                && (result == START_TASK_TO_FRONT || result == START_DELIVERED_TO_TOP
                || clearedTask)) {
+0 −6
Original line number Diff line number Diff line
@@ -87,12 +87,6 @@ public class StackWindowController
        }
    }

    public boolean isVisible() {
        synchronized (mWindowMap) {
            return mContainer != null && mContainer.isVisible();
        }
    }

    public void reparent(int displayId, Rect outStackBounds, boolean onTop) {
        synchronized (mWindowMap) {
            if (mContainer == null) {