Loading libs/WindowManager/Shell/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ java_library { srcs: [ "src/com/android/wm/shell/desktopmode/education/data/proto/**/*.proto", "src/com/android/wm/shell/desktopmode/persistence/*.proto", "src/com/android/wm/shell/desktopmode/data/persistence/*.proto", ], proto: { type: "lite", Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +3 −3 Original line number Diff line number Diff line Loading @@ -138,6 +138,9 @@ import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler import com.android.wm.shell.desktopmode.VisualIndicatorUpdateScheduler; import com.android.wm.shell.desktopmode.WindowDecorCaptionRepository; import com.android.wm.shell.desktopmode.compatui.SystemModalsTransitionHandler; import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer; import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializerImpl; import com.android.wm.shell.desktopmode.data.persistence.DesktopPersistentRepository; import com.android.wm.shell.desktopmode.desktopfirst.DesktopDisplayModeController; import com.android.wm.shell.desktopmode.desktopfirst.DesktopFirstListenerManager; import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider; Loading @@ -150,9 +153,6 @@ import com.android.wm.shell.desktopmode.education.data.AppToWebEducationDatastor import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer; import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver; import com.android.wm.shell.desktopmode.multidesks.RootTaskDesksOrganizer; import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository; import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer; import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializerImpl; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.draganddrop.GlobalDragListener; import com.android.wm.shell.freeform.FreeformComponents; Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayEventHandler.kt +1 −1 Original line number Diff line number Diff line Loading @@ -32,13 +32,13 @@ import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.RootTaskDisplayAreaOrganizer.RootTaskDisplayAreaListener import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayController.OnDisplaysChangedListener import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.desktopfirst.DesktopDisplayModeController import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver import com.android.wm.shell.desktopmode.multidesks.OnDeskRemovedListener import com.android.wm.shell.desktopmode.multidesks.PreserveDisplayRequestHandler import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.desktopmode.DesktopState import com.android.wm.shell.sysui.ShellController Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt +3 −81 Original line number Diff line number Diff line Loading @@ -26,21 +26,19 @@ import android.util.SparseArray import android.view.Display.INVALID_DISPLAY import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import android.window.WindowContainerToken import androidx.core.util.forEach import androidx.core.util.valueIterator import com.android.internal.annotations.VisibleForTesting import com.android.internal.protolog.ProtoLog import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository import com.android.wm.shell.desktopmode.data.Desk import com.android.wm.shell.desktopmode.data.TopTransparentFullscreenTaskData import com.android.wm.shell.desktopmode.data.persistence.DesktopPersistentRepository import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopConfig import java.io.PrintWriter import java.util.concurrent.Executor import java.util.function.Consumer import kotlin.collections.component1 import kotlin.collections.component2 import kotlin.collections.forEach import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch Loading @@ -58,85 +56,9 @@ class DesktopRepository( var activeDeskId: Int? = null } /** Specific [TaskInfo] data related to top transparent fullscreen task handling. */ data class TopTransparentFullscreenTaskData(val taskId: Int, val token: WindowContainerToken) /** Tiling data preserved after a display got disconnected. */ data class PreservedTiledAppData(val leftTiledTask: Int?, val rightTiledTask: Int?) /** * Task data tracked per desk. * * @property activeTasks task ids of active tasks currently or previously visible in the desk. * Tasks become inactive when task closes or when the desk becomes inactive. * @property visibleTasks task ids for active freeform tasks that are currently visible. There * might be other active tasks in a desk that are not visible. * @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 desk's task that is in full-immersive mode. * @property topTransparentFullscreenTaskId the task id of any current top transparent * fullscreen task launched on top of the desk. Cleared when the transparent task is closed or * sent to back. (top is at index 0). * @property leftTiledTaskId task id of the task tiled on the left. * @property rightTiledTaskId task id of the task tiled on the right. */ private data class Desk( val deskId: Int, var displayId: Int, // TODO: b/421928445 - Refactor these and boundsByTaskId into a new data class. val activeTasks: ArraySet<Int> = ArraySet(), val visibleTasks: ArraySet<Int> = ArraySet(), val minimizedTasks: ArraySet<Int> = ArraySet(), // 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, var topTransparentFullscreenTaskData: TopTransparentFullscreenTaskData? = null, var leftTiledTaskId: Int? = null, var rightTiledTaskId: Int? = null, ) { // TODO: b/417907552 - Add these variables to persistent repository. // The display's unique id that will remain the same across reboots. var uniqueDisplayId: String? = null // Bounds of tasks in this desk mapped to their respective task ids. Used for reconnect. var boundsByTaskId: MutableMap<Int, Rect> = mutableMapOf() fun deepCopy(): Desk = Desk( deskId = deskId, displayId = displayId, activeTasks = ArraySet(activeTasks), visibleTasks = ArraySet(visibleTasks), minimizedTasks = ArraySet(minimizedTasks), closingTasks = ArraySet(closingTasks), freeformTasksInZOrder = ArrayList(freeformTasksInZOrder), fullImmersiveTaskId = fullImmersiveTaskId, topTransparentFullscreenTaskData = topTransparentFullscreenTaskData, leftTiledTaskId = leftTiledTaskId, rightTiledTaskId = rightTiledTaskId, ) .also { it.uniqueDisplayId = uniqueDisplayId it.boundsByTaskId = boundsByTaskId.toMutableMap() } // TODO: b/362720497 - remove when multi-desktops is enabled where instances aren't // reusable. fun clear() { activeTasks.clear() visibleTasks.clear() minimizedTasks.clear() closingTasks.clear() freeformTasksInZOrder.clear() fullImmersiveTaskId = null topTransparentFullscreenTaskData = null leftTiledTaskId = null rightTiledTaskId = null boundsByTaskId.clear() } } private val deskChangeListeners = ArrayMap<DeskChangeListener, Executor>() private val activeTasksListeners = ArraySet<ActiveTasksListener>() private val visibleTasksListeners = ArrayMap<VisibleTasksListener, Executor>() Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +2 −2 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.Companion import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.DragToDesktopStateListener import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer.DeskRecreationFactory import com.android.wm.shell.desktopmode.desktopfirst.DesktopFirstListenerManager import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider Loading @@ -133,8 +135,6 @@ import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver import com.android.wm.shell.desktopmode.multidesks.OnDeskRemovedListener import com.android.wm.shell.desktopmode.multidesks.PreserveDisplayRequestHandler import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer.DeskRecreationFactory import com.android.wm.shell.draganddrop.DragAndDropController import com.android.wm.shell.freeform.FreeformTaskTransitionStarter import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE Loading Loading
libs/WindowManager/Shell/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ java_library { srcs: [ "src/com/android/wm/shell/desktopmode/education/data/proto/**/*.proto", "src/com/android/wm/shell/desktopmode/persistence/*.proto", "src/com/android/wm/shell/desktopmode/data/persistence/*.proto", ], proto: { type: "lite", Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +3 −3 Original line number Diff line number Diff line Loading @@ -138,6 +138,9 @@ import com.android.wm.shell.desktopmode.ToggleResizeDesktopTaskTransitionHandler import com.android.wm.shell.desktopmode.VisualIndicatorUpdateScheduler; import com.android.wm.shell.desktopmode.WindowDecorCaptionRepository; import com.android.wm.shell.desktopmode.compatui.SystemModalsTransitionHandler; import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer; import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializerImpl; import com.android.wm.shell.desktopmode.data.persistence.DesktopPersistentRepository; import com.android.wm.shell.desktopmode.desktopfirst.DesktopDisplayModeController; import com.android.wm.shell.desktopmode.desktopfirst.DesktopFirstListenerManager; import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider; Loading @@ -150,9 +153,6 @@ import com.android.wm.shell.desktopmode.education.data.AppToWebEducationDatastor import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer; import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver; import com.android.wm.shell.desktopmode.multidesks.RootTaskDesksOrganizer; import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository; import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer; import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializerImpl; import com.android.wm.shell.draganddrop.DragAndDropController; import com.android.wm.shell.draganddrop.GlobalDragListener; import com.android.wm.shell.freeform.FreeformComponents; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayEventHandler.kt +1 −1 Original line number Diff line number Diff line Loading @@ -32,13 +32,13 @@ import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.RootTaskDisplayAreaOrganizer.RootTaskDisplayAreaListener import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayController.OnDisplaysChangedListener import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.desktopfirst.DesktopDisplayModeController import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver import com.android.wm.shell.desktopmode.multidesks.OnDeskRemovedListener import com.android.wm.shell.desktopmode.multidesks.PreserveDisplayRequestHandler import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.desktopmode.DesktopState import com.android.wm.shell.sysui.ShellController Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt +3 −81 Original line number Diff line number Diff line Loading @@ -26,21 +26,19 @@ import android.util.SparseArray import android.view.Display.INVALID_DISPLAY import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import android.window.WindowContainerToken import androidx.core.util.forEach import androidx.core.util.valueIterator import com.android.internal.annotations.VisibleForTesting import com.android.internal.protolog.ProtoLog import com.android.wm.shell.desktopmode.persistence.DesktopPersistentRepository import com.android.wm.shell.desktopmode.data.Desk import com.android.wm.shell.desktopmode.data.TopTransparentFullscreenTaskData import com.android.wm.shell.desktopmode.data.persistence.DesktopPersistentRepository import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopConfig import java.io.PrintWriter import java.util.concurrent.Executor import java.util.function.Consumer import kotlin.collections.component1 import kotlin.collections.component2 import kotlin.collections.forEach import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch Loading @@ -58,85 +56,9 @@ class DesktopRepository( var activeDeskId: Int? = null } /** Specific [TaskInfo] data related to top transparent fullscreen task handling. */ data class TopTransparentFullscreenTaskData(val taskId: Int, val token: WindowContainerToken) /** Tiling data preserved after a display got disconnected. */ data class PreservedTiledAppData(val leftTiledTask: Int?, val rightTiledTask: Int?) /** * Task data tracked per desk. * * @property activeTasks task ids of active tasks currently or previously visible in the desk. * Tasks become inactive when task closes or when the desk becomes inactive. * @property visibleTasks task ids for active freeform tasks that are currently visible. There * might be other active tasks in a desk that are not visible. * @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 desk's task that is in full-immersive mode. * @property topTransparentFullscreenTaskId the task id of any current top transparent * fullscreen task launched on top of the desk. Cleared when the transparent task is closed or * sent to back. (top is at index 0). * @property leftTiledTaskId task id of the task tiled on the left. * @property rightTiledTaskId task id of the task tiled on the right. */ private data class Desk( val deskId: Int, var displayId: Int, // TODO: b/421928445 - Refactor these and boundsByTaskId into a new data class. val activeTasks: ArraySet<Int> = ArraySet(), val visibleTasks: ArraySet<Int> = ArraySet(), val minimizedTasks: ArraySet<Int> = ArraySet(), // 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, var topTransparentFullscreenTaskData: TopTransparentFullscreenTaskData? = null, var leftTiledTaskId: Int? = null, var rightTiledTaskId: Int? = null, ) { // TODO: b/417907552 - Add these variables to persistent repository. // The display's unique id that will remain the same across reboots. var uniqueDisplayId: String? = null // Bounds of tasks in this desk mapped to their respective task ids. Used for reconnect. var boundsByTaskId: MutableMap<Int, Rect> = mutableMapOf() fun deepCopy(): Desk = Desk( deskId = deskId, displayId = displayId, activeTasks = ArraySet(activeTasks), visibleTasks = ArraySet(visibleTasks), minimizedTasks = ArraySet(minimizedTasks), closingTasks = ArraySet(closingTasks), freeformTasksInZOrder = ArrayList(freeformTasksInZOrder), fullImmersiveTaskId = fullImmersiveTaskId, topTransparentFullscreenTaskData = topTransparentFullscreenTaskData, leftTiledTaskId = leftTiledTaskId, rightTiledTaskId = rightTiledTaskId, ) .also { it.uniqueDisplayId = uniqueDisplayId it.boundsByTaskId = boundsByTaskId.toMutableMap() } // TODO: b/362720497 - remove when multi-desktops is enabled where instances aren't // reusable. fun clear() { activeTasks.clear() visibleTasks.clear() minimizedTasks.clear() closingTasks.clear() freeformTasksInZOrder.clear() fullImmersiveTaskId = null topTransparentFullscreenTaskData = null leftTiledTaskId = null rightTiledTaskId = null boundsByTaskId.clear() } } private val deskChangeListeners = ArrayMap<DeskChangeListener, Executor>() private val activeTasksListeners = ArraySet<ActiveTasksListener>() private val visibleTasksListeners = ArrayMap<VisibleTasksListener, Executor>() Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +2 −2 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.Companion import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.DragToDesktopStateListener import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.data.DesktopRepositoryInitializer.DeskRecreationFactory import com.android.wm.shell.desktopmode.desktopfirst.DesktopFirstListenerManager import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider Loading @@ -133,8 +135,6 @@ import com.android.wm.shell.desktopmode.multidesks.DesksOrganizer import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver import com.android.wm.shell.desktopmode.multidesks.OnDeskRemovedListener import com.android.wm.shell.desktopmode.multidesks.PreserveDisplayRequestHandler import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer import com.android.wm.shell.desktopmode.persistence.DesktopRepositoryInitializer.DeskRecreationFactory import com.android.wm.shell.draganddrop.DragAndDropController import com.android.wm.shell.freeform.FreeformTaskTransitionStarter import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE Loading