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

Commit c9d743c5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add immersive state to desktop repository" into main

parents 3f8571f3 cb28f1a1
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2024 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="960"
    android:viewportHeight="960"
    android:tint="?attr/colorControlNormal">
    <path
        android:fillColor="@android:color/white"
        android:pathData="M240,840L240,720L120,720L120,640L320,640L320,840L240,840ZM640,840L640,640L840,640L840,720L720,720L720,840L640,840ZM120,320L120,240L240,240L240,120L320,120L320,320L120,320ZM640,320L640,120L720,120L720,240L840,240L840,320L640,320Z"/>
</vector>
+2 −0
Original line number Diff line number Diff line
@@ -240,6 +240,7 @@ public abstract class WMShellModule {
            IWindowManager windowManager,
            ShellCommandHandler shellCommandHandler,
            ShellTaskOrganizer taskOrganizer,
            @DynamicOverride DesktopModeTaskRepository desktopRepository,
            DisplayController displayController,
            ShellController shellController,
            DisplayInsetsController displayInsetsController,
@@ -266,6 +267,7 @@ public abstract class WMShellModule {
                    shellCommandHandler,
                    windowManager,
                    taskOrganizer,
                    desktopRepository,
                    displayController,
                    shellController,
                    displayInsetsController,
+21 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ class DesktopModeTaskRepository (
     * @property minimizedTasks task ids for active freeform tasks that are currently minimized.
     * @property closingTasks task ids for tasks that are going to close, but are currently visible.
     * @property freeformTasksInZOrder list of current freeform task ids ordered from top to bottom
     * @property fullImmersiveTaskId the task id of the desktop task that is in full-immersive mode.
     * (top is at index 0).
     */
    private data class DesktopTaskData(
@@ -69,13 +70,15 @@ class DesktopModeTaskRepository (
        // TODO(b/332682201): Remove when the repository state is updated via TransitionObserver
        val closingTasks: ArraySet<Int> = ArraySet(),
        val freeformTasksInZOrder: ArrayList<Int> = ArrayList(),
        var fullImmersiveTaskId: Int? = null,
    ) {
        fun deepCopy(): DesktopTaskData = DesktopTaskData(
            activeTasks = ArraySet(activeTasks),
            visibleTasks = ArraySet(visibleTasks),
            minimizedTasks = ArraySet(minimizedTasks),
            closingTasks = ArraySet(closingTasks),
            freeformTasksInZOrder = ArrayList(freeformTasksInZOrder)
            freeformTasksInZOrder = ArrayList(freeformTasksInZOrder),
            fullImmersiveTaskId = fullImmersiveTaskId
        )
    }

@@ -300,6 +303,23 @@ class DesktopModeTaskRepository (
        }
    }

    /** Set whether the given task is the full-immersive task in this display. */
    fun setTaskInFullImmersiveState(displayId: Int, taskId: Int, immersive: Boolean) {
        val desktopData = desktopTaskDataByDisplayId.getOrCreate(displayId)
        if (immersive) {
            desktopData.fullImmersiveTaskId = taskId
        } else {
            if (desktopData.fullImmersiveTaskId == taskId) {
                desktopData.fullImmersiveTaskId = null
            }
        }
    }

    /* Whether the task is in full-immersive state. */
    fun isTaskInFullImmersiveState(taskId: Int): Boolean {
        return desktopTaskDataSequence().any { taskId == it.fullImmersiveTaskId }
    }

    private fun notifyVisibleTaskListeners(displayId: Int, visibleTasksCount: Int) {
        visibleTasksListeners.forEach { (listener, executor) ->
            executor.execute { listener.onTasksVisibilityChanged(displayId, visibleTasksCount) }
+7 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ import com.android.wm.shell.common.MultiInstanceHelper;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.desktopmode.DesktopActivityOrientationChangeHandler;
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository;
import com.android.wm.shell.desktopmode.DesktopModeVisualIndicator;
import com.android.wm.shell.desktopmode.DesktopTasksController;
import com.android.wm.shell.desktopmode.DesktopTasksController.SnapPosition;
@@ -154,6 +155,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
    private final ActivityTaskManager mActivityTaskManager;
    private final ShellCommandHandler mShellCommandHandler;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final DesktopModeTaskRepository mDesktopRepository;
    private final ShellController mShellController;
    private final Context mContext;
    private final @ShellMainThread Handler mMainHandler;
@@ -225,6 +227,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            ShellCommandHandler shellCommandHandler,
            IWindowManager windowManager,
            ShellTaskOrganizer taskOrganizer,
            DesktopModeTaskRepository desktopRepository,
            DisplayController displayController,
            ShellController shellController,
            DisplayInsetsController displayInsetsController,
@@ -250,6 +253,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                shellCommandHandler,
                windowManager,
                taskOrganizer,
                desktopRepository,
                displayController,
                shellController,
                displayInsetsController,
@@ -284,6 +288,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            ShellCommandHandler shellCommandHandler,
            IWindowManager windowManager,
            ShellTaskOrganizer taskOrganizer,
            DesktopModeTaskRepository desktopRepository,
            DisplayController displayController,
            ShellController shellController,
            DisplayInsetsController displayInsetsController,
@@ -312,6 +317,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
        mBgExecutor = bgExecutor;
        mActivityTaskManager = mContext.getSystemService(ActivityTaskManager.class);
        mTaskOrganizer = taskOrganizer;
        mDesktopRepository = desktopRepository;
        mShellController = shellController;
        mDisplayController = displayController;
        mDisplayInsetsController = displayInsetsController;
@@ -1414,6 +1420,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                        mContext.createContextAsUser(UserHandle.of(taskInfo.userId), 0 /* flags */),
                        mDisplayController,
                        mSplitScreenController,
                        mDesktopRepository,
                        mTaskOrganizer,
                        taskInfo,
                        taskSurface,
+21 −7
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ import com.android.wm.shell.common.MultiInstanceHelper;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.desktopmode.CaptionState;
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository;
import com.android.wm.shell.desktopmode.WindowDecorCaptionHandleRepository;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
@@ -189,12 +190,14 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
    private final Runnable mCapturedLinkExpiredRunnable = this::onCapturedLinkExpired;
    private final MultiInstanceHelper mMultiInstanceHelper;
    private final WindowDecorCaptionHandleRepository mWindowDecorCaptionHandleRepository;
    private final DesktopModeTaskRepository mDesktopRepository;

    DesktopModeWindowDecoration(
            Context context,
            @NonNull Context userContext,
            DisplayController displayController,
            SplitScreenController splitScreenController,
            DesktopModeTaskRepository desktopRepository,
            ShellTaskOrganizer taskOrganizer,
            ActivityManager.RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
@@ -208,8 +211,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
            AssistContentRequester assistContentRequester,
            MultiInstanceHelper multiInstanceHelper,
            WindowDecorCaptionHandleRepository windowDecorCaptionHandleRepository) {
        this (context, userContext, displayController, splitScreenController, taskOrganizer,
                taskInfo, taskSurface, handler, bgExecutor, choreographer, syncQueue,
        this (context, userContext, displayController, splitScreenController, desktopRepository,
                taskOrganizer, taskInfo, taskSurface, handler, bgExecutor, choreographer, syncQueue,
                appHeaderViewHolderFactory, rootTaskDisplayAreaOrganizer, genericLinksParser,
                assistContentRequester,
                SurfaceControl.Builder::new, SurfaceControl.Transaction::new,
@@ -226,6 +229,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
            @NonNull Context userContext,
            DisplayController displayController,
            SplitScreenController splitScreenController,
            DesktopModeTaskRepository desktopRepository,
            ShellTaskOrganizer taskOrganizer,
            ActivityManager.RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
@@ -265,6 +269,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        mMultiInstanceHelper = multiInstanceHelper;
        mWindowManagerWrapper = windowManagerWrapper;
        mWindowDecorCaptionHandleRepository = windowDecorCaptionHandleRepository;
        mDesktopRepository = desktopRepository;
    }

    /**
@@ -481,11 +486,18 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        if (canEnterDesktopMode(mContext) && Flags.enableDesktopWindowingAppHandleEducation()) {
            notifyCaptionStateChanged();
        }
        mWindowDecorViewHolder.bindData(mTaskInfo,
                position,
                mResult.mCaptionWidth,
                mResult.mCaptionHeight,
                isCaptionVisible());

        if (isAppHandle(mWindowDecorViewHolder)) {
            mWindowDecorViewHolder.bindData(new AppHandleViewHolder.HandleData(
                    mTaskInfo, position, mResult.mCaptionWidth, mResult.mCaptionHeight,
                    isCaptionVisible()
            ));
        } else {
            mWindowDecorViewHolder.bindData(new AppHeaderViewHolder.HeaderData(
                    mTaskInfo, TaskInfoKt.getRequestingImmersive(mTaskInfo),
                    mDesktopRepository.isTaskInFullImmersiveState(mTaskInfo.taskId)
            ));
        }
        Trace.endSection();

        if (!mTaskInfo.isFocused) {
@@ -1540,6 +1552,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                @NonNull Context userContext,
                DisplayController displayController,
                SplitScreenController splitScreenController,
                DesktopModeTaskRepository desktopRepository,
                ShellTaskOrganizer taskOrganizer,
                ActivityManager.RunningTaskInfo taskInfo,
                SurfaceControl taskSurface,
@@ -1558,6 +1571,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                    userContext,
                    displayController,
                    splitScreenController,
                    desktopRepository,
                    taskOrganizer,
                    taskInfo,
                    taskSurface,
Loading