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

Commit 1660690e authored by Maryam Dehaini's avatar Maryam Dehaini
Browse files

Do not add window decor for desks

Window decorations should not be added to desk tasks. Skips the call to
view model for desk tasks.

Bug: 414449402
Flag: com.android.window.flags.enable_no_window_decoration_for_desks
Test: Rotate tablet during drag to desktop
Change-Id: I141c51c6eab8b4f6d1033e323c6db33b9610c2c7
parent 316fe079
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -153,6 +153,8 @@ public enum DesktopExperienceFlags {
            Flags.FLAG_NESTED_TASKS_WITH_INDEPENDENT_BOUNDS_BUGFIX),
    ENABLE_NON_DEFAULT_DISPLAY_SPLIT(Flags::enableNonDefaultDisplaySplit, true,
            Flags.FLAG_ENABLE_NON_DEFAULT_DISPLAY_SPLIT),
    ENABLE_NO_WINDOW_DECORATION_FOR_DESKS(Flags::enableNoWindowDecorationForDesks, false,
        Flags.FLAG_ENABLE_NO_WINDOW_DECORATION_FOR_DESKS),
    ENABLE_PERSISTING_DISPLAY_SIZE_FOR_CONNECTED_DISPLAYS(
            Flags::enablePersistingDisplaySizeForConnectedDisplays, true,
            Flags.FLAG_ENABLE_PERSISTING_DISPLAY_SIZE_FOR_CONNECTED_DISPLAYS),
+10 −0
Original line number Diff line number Diff line
@@ -1270,6 +1270,16 @@ flag {
    }
}

flag {
    name: "enable_no_window_decoration_for_desks"
    namespace: "lse_desktop_experience"
    description: "Stops the creation of a window decoration for desk tasks."
    bug: "414449402"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "enable_window_repositioning_api"
    namespace: "lse_desktop_experience"
+2 −0
Original line number Diff line number Diff line
@@ -514,6 +514,7 @@ public abstract class WMShellModule {
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener,
            FocusTransitionObserver focusTransitionObserver,
            DesksOrganizer desksOrganizer,
            Optional<DesksTransitionObserver> desksTransitionObserver,
            DesktopState desktopState,
            Optional<DesktopImeHandler> desktopImeHandler,
@@ -525,6 +526,7 @@ public abstract class WMShellModule {
                windowDecorViewModel,
                taskChangeListener,
                focusTransitionObserver,
                desksOrganizer,
                desksTransitionObserver,
                desktopState,
                desktopImeHandler,
+12 −5
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.wm.shell.desktopmode.DesktopBackNavTransitionObserver;
import com.android.wm.shell.desktopmode.DesktopImeHandler;
import com.android.wm.shell.desktopmode.DesktopImmersiveController;
import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer;
import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.sysui.ShellInit;
@@ -58,6 +59,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
    private final WindowDecorViewModel mWindowDecorViewModel;
    private final Optional<TaskChangeListener> mTaskChangeListener;
    private final FocusTransitionObserver mFocusTransitionObserver;
    private final DesksOrganizer mDesksOrganizer;
    private final Optional<DesksTransitionObserver> mDesksTransitionObserver;
    private final Optional<DesktopImeHandler> mDesktopImeHandler;
    private final Optional<DesktopBackNavTransitionObserver> mDesktopBackNavTransitionObserver;
@@ -75,6 +77,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener,
            FocusTransitionObserver focusTransitionObserver,
            DesksOrganizer desksOrganizer,
            Optional<DesksTransitionObserver> desksTransitionObserver,
            DesktopState desktopState,
            Optional<DesktopImeHandler> desktopImeHandler,
@@ -84,6 +87,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
        mWindowDecorViewModel = windowDecorViewModel;
        mTaskChangeListener = taskChangeListener;
        mFocusTransitionObserver = focusTransitionObserver;
        mDesksOrganizer = desksOrganizer;
        mDesksTransitionObserver = desksTransitionObserver;
        mDesktopImeHandler = desktopImeHandler;
        mDesktopBackNavTransitionObserver = desktopBackNavTransitionObserver;
@@ -178,7 +182,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
        }
    }

    private static boolean shouldSkipChange(
    private boolean shouldSkipChange(
            @NonNull TransitionInfo info,
            TransitionInfo.Change change,
            ArrayList<WindowContainerToken> taskParents) {
@@ -186,6 +190,12 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
            return true;
        }

        // Skip desk changes so that window decorations are not added to desk root tasks
        if (DesktopExperienceFlags.ENABLE_NO_WINDOW_DECORATION_FOR_DESKS.isTrue()
                && mDesksOrganizer.isDeskChange(change)) {
            return true;
        }

        final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
        if (taskInfo == null || taskInfo.taskId == -1) {
            return true;
@@ -199,10 +209,7 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
            // between tasks (hierarchically).
            taskParents.add(change.getParent());
        }
        if (taskParents.contains(change.getContainer())) {
            return true;
        }
        return false;
        return taskParents.contains(change.getContainer());
    }

    private void onOpenTransitionReady(
+41 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.view.WindowManager.TRANSIT_TO_FRONT;

import static com.android.wm.shell.transition.Transitions.TRANSIT_START_RECENTS_TRANSITION;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -49,6 +50,7 @@ import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.desktopmode.DesktopBackNavTransitionObserver;
import com.android.wm.shell.desktopmode.DesktopImeHandler;
import com.android.wm.shell.desktopmode.DesktopImmersiveController;
import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer;
import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver;
import com.android.wm.shell.shared.desktopmode.FakeDesktopState;
import com.android.wm.shell.sysui.ShellInit;
@@ -77,6 +79,7 @@ public class FreeformTaskTransitionObserverTest extends ShellTestCase {
    @Mock private WindowDecorViewModel mWindowDecorViewModel;
    @Mock private TaskChangeListener mTaskChangeListener;
    @Mock private FocusTransitionObserver mFocusTransitionObserver;
    @Mock private DesksOrganizer mDesksOrganizer;
    @Mock private DesksTransitionObserver mDesksTransitionObserver;
    @Mock private DesktopImeHandler mDesktopImeHandler;
    @Mock private DesktopBackNavTransitionObserver mDesktopBackNavTransitionObserver;
@@ -93,6 +96,7 @@ public class FreeformTaskTransitionObserverTest extends ShellTestCase {

        PackageManager pm = mock(PackageManager.class);
        doReturn(true).when(pm).hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT);
        doReturn(false).when(mDesksOrganizer).isDeskChange(any());
        final Context context = mock(Context.class);
        doReturn(pm).when(context).getPackageManager();

@@ -104,6 +108,7 @@ public class FreeformTaskTransitionObserverTest extends ShellTestCase {
                        mWindowDecorViewModel,
                        Optional.of(mTaskChangeListener),
                        mFocusTransitionObserver,
                        mDesksOrganizer,
                        Optional.of(mDesksTransitionObserver),
                        mDesktopState,
                        Optional.of(mDesktopImeHandler),
@@ -143,6 +148,42 @@ public class FreeformTaskTransitionObserverTest extends ShellTestCase {
                .onTaskOpening(change.getTaskInfo(), change.getLeash(), startT, finishT);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_NO_WINDOW_DECORATION_FOR_DESKS)
    public void desksChange_windowDecorNotCreatedForDesksTask() {
        final TransitionInfo.Change change = createChange(TRANSIT_OPEN, 1, WINDOWING_MODE_FREEFORM);
        final TransitionInfo info =
                new TransitionInfoBuilder(TRANSIT_OPEN, 0).addChange(change).build();
        doReturn(true).when(mDesksOrganizer).isDeskChange(change);

        final IBinder transition = mock(IBinder.class);
        final SurfaceControl.Transaction startT = mock(SurfaceControl.Transaction.class);
        final SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
        mTransitionObserver.onTransitionReady(transition, info, startT, finishT);
        mTransitionObserver.onTransitionStarting(transition);

        verify(mWindowDecorViewModel, never())
                .onTaskOpening(change.getTaskInfo(), change.getLeash(), startT, finishT);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_NO_WINDOW_DECORATION_FOR_DESKS)
    public void desksChange_listenerNotNotifiedOfTaskChange() {
        final TransitionInfo.Change change =
                createChange(TRANSIT_CHANGE, /* taskId= */ 1, WINDOWING_MODE_FREEFORM);
        final TransitionInfo info =
                new TransitionInfoBuilder(TRANSIT_CHANGE, /* flags= */ 0).addChange(change).build();
        doReturn(true).when(mDesksOrganizer).isDeskChange(change);

        final IBinder transition = mock(IBinder.class);
        final SurfaceControl.Transaction startT = mock(SurfaceControl.Transaction.class);
        final SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
        mTransitionObserver.onTransitionReady(transition, info, startT, finishT);
        mTransitionObserver.onTransitionStarting(transition);

        verify(mTaskChangeListener, never()).onTaskChanging(change.getTaskInfo());
    }

    @Test
    public void openTransition_notifiesOnTaskOpening() {
        final TransitionInfo.Change change = createChange(TRANSIT_OPEN, 1, WINDOWING_MODE_FREEFORM);