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

Commit d21cb393 authored by Maryam Dehaini's avatar Maryam Dehaini Committed by Android (Google) Code Review
Browse files

Merge "Do not add window decor for desks" into main

parents 799c9074 1660690e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,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
@@ -1280,6 +1280,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
@@ -515,6 +515,7 @@ public abstract class WMShellModule {
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener,
            FocusTransitionObserver focusTransitionObserver,
            DesksOrganizer desksOrganizer,
            Optional<DesksTransitionObserver> desksTransitionObserver,
            DesktopState desktopState,
            Optional<DesktopImeHandler> desktopImeHandler,
@@ -526,6 +527,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);