Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DesktopModeCompatPolicy.kt→libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeCompatPolicy.kt +20 −12 Original line number Diff line number Diff line Loading @@ -14,20 +14,18 @@ * limitations under the License. */ package com.android.wm.shell.compatui package com.android.wm.shell.shared.desktopmode import android.app.ActivityManager.RunningTaskInfo import android.app.TaskInfo import android.content.Context import android.window.DesktopModeFlags import com.android.internal.R import com.android.wm.shell.dagger.WMSingleton import javax.inject.Inject /** * Class to decide whether to apply app compat policies in desktop mode. */ // TODO(b/347289970): Consider replacing with API @WMSingleton class DesktopModeCompatPolicy @Inject constructor(context: Context) { class DesktopModeCompatPolicy(context: Context) { private val systemUiPackage: String = context.resources.getString(R.string.config_systemUi) Loading @@ -37,16 +35,26 @@ class DesktopModeCompatPolicy @Inject constructor(context: Context) { * not being displayed, regardless of its configuration, we will not exempt it as to remain in * the desktop windowing environment. */ fun isTopActivityExemptFromDesktopWindowing(task: RunningTaskInfo) = (isSystemUiTask(task) || isTransparentTask(task)) && !task.isTopActivityNoDisplay fun isTopActivityExemptFromDesktopWindowing(task: TaskInfo) = isTopActivityExemptFromDesktopWindowing(task.baseActivity?.packageName, task.numActivities, task.isTopActivityNoDisplay, task.isActivityStackTransparent) fun isTopActivityExemptFromDesktopWindowing(packageName: String?, numActivities: Int, isTopActivityNoDisplay: Boolean, isActivityStackTransparent: Boolean) = DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue && ((isSystemUiTask(packageName) || isTransparentTask(isActivityStackTransparent, numActivities)) && !isTopActivityNoDisplay) /** * Returns true if all activities in a tasks stack are transparent. If there are no activities * will return false. */ fun isTransparentTask(task: RunningTaskInfo): Boolean = task.isActivityStackTransparent && task.numActivities > 0 fun isTransparentTask(task: TaskInfo): Boolean = isTransparentTask(task.isActivityStackTransparent, task.numActivities) private fun isTransparentTask(isActivityStackTransparent: Boolean, numActivities: Int) = isActivityStackTransparent && numActivities > 0 private fun isSystemUiTask(task: RunningTaskInfo): Boolean = task.baseActivity?.packageName == systemUiPackage private fun isSystemUiTask(packageName: String?) = packageName == systemUiPackage } libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ import com.android.wm.shell.shared.TransactionPool; import com.android.wm.shell.shared.annotations.ShellAnimationThread; import com.android.wm.shell.shared.annotations.ShellMainThread; import com.android.wm.shell.shared.annotations.ShellSplashscreenThread; import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.splitscreen.SplitScreen; import com.android.wm.shell.splitscreen.SplitScreenController; Loading Loading @@ -256,6 +257,12 @@ public abstract class WMShellBaseModule { mainExecutor); } @WMSingleton @Provides static DesktopModeCompatPolicy provideDesktopModeCompatPolicy(Context context) { return new DesktopModeCompatPolicy(context); } @WMSingleton @Provides static Optional<CompatUIHandler> provideCompatUIController( Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.common.UserProfileContexts; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.compatui.DesktopModeCompatPolicy; import com.android.wm.shell.compatui.letterbox.LetterboxCommandHandler; import com.android.wm.shell.compatui.letterbox.LetterboxTransitionObserver; import com.android.wm.shell.dagger.back.ShellBackAnimationModule; Loading Loading @@ -133,6 +132,7 @@ import com.android.wm.shell.shared.TransactionPool; import com.android.wm.shell.shared.annotations.ShellAnimationThread; import com.android.wm.shell.shared.annotations.ShellBackgroundThread; import com.android.wm.shell.shared.annotations.ShellMainThread; import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.sysui.ShellCommandHandler; Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +3 −7 Original line number Diff line number Diff line Loading @@ -86,7 +86,6 @@ import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.common.SingleInstanceRemoteListener import com.android.wm.shell.common.SyncTransactionQueue import com.android.wm.shell.common.UserProfileContexts import com.android.wm.shell.compatui.DesktopModeCompatPolicy import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.MinimizeReason import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger Loading Loading @@ -115,6 +114,7 @@ import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_ST import com.android.wm.shell.shared.TransitionUtil import com.android.wm.shell.shared.annotations.ExternalThread import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.DESKTOP_DENSITY_OVERRIDE import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useDesktopOverrideDensity Loading Loading @@ -516,10 +516,7 @@ class DesktopTasksController( remoteTransition: RemoteTransition? = null, callback: IMoveToDesktopCallback? = null, ) { if ( DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task) ) { if (desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task)) { logW("Cannot enter desktop for taskId %d, ineligible top activity found", task.taskId) return } Loading Loading @@ -1821,7 +1818,6 @@ class DesktopTasksController( taskRepository.isActiveTask(triggerTask.taskId)) private fun isIncompatibleTask(task: RunningTaskInfo) = DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task) private fun shouldHandleTaskClosing(request: TransitionRequestInfo): Boolean = Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import androidx.core.animation.addListener import com.android.app.animation.Interpolators import com.android.internal.protolog.ProtoLog import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.compatui.DesktopModeCompatPolicy import com.android.wm.shell.desktopmode.DesktopUserRepositories import com.android.wm.shell.desktopmode.DesktopWallpaperActivity import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE Loading @@ -37,6 +36,7 @@ import com.android.wm.shell.shared.TransitionUtil.isClosingMode import com.android.wm.shell.shared.TransitionUtil.isClosingType import com.android.wm.shell.shared.TransitionUtil.isOpeningMode import com.android.wm.shell.shared.TransitionUtil.isOpeningType import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.android.wm.shell.transition.Transitions.TransitionHandler Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/DesktopModeCompatPolicy.kt→libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeCompatPolicy.kt +20 −12 Original line number Diff line number Diff line Loading @@ -14,20 +14,18 @@ * limitations under the License. */ package com.android.wm.shell.compatui package com.android.wm.shell.shared.desktopmode import android.app.ActivityManager.RunningTaskInfo import android.app.TaskInfo import android.content.Context import android.window.DesktopModeFlags import com.android.internal.R import com.android.wm.shell.dagger.WMSingleton import javax.inject.Inject /** * Class to decide whether to apply app compat policies in desktop mode. */ // TODO(b/347289970): Consider replacing with API @WMSingleton class DesktopModeCompatPolicy @Inject constructor(context: Context) { class DesktopModeCompatPolicy(context: Context) { private val systemUiPackage: String = context.resources.getString(R.string.config_systemUi) Loading @@ -37,16 +35,26 @@ class DesktopModeCompatPolicy @Inject constructor(context: Context) { * not being displayed, regardless of its configuration, we will not exempt it as to remain in * the desktop windowing environment. */ fun isTopActivityExemptFromDesktopWindowing(task: RunningTaskInfo) = (isSystemUiTask(task) || isTransparentTask(task)) && !task.isTopActivityNoDisplay fun isTopActivityExemptFromDesktopWindowing(task: TaskInfo) = isTopActivityExemptFromDesktopWindowing(task.baseActivity?.packageName, task.numActivities, task.isTopActivityNoDisplay, task.isActivityStackTransparent) fun isTopActivityExemptFromDesktopWindowing(packageName: String?, numActivities: Int, isTopActivityNoDisplay: Boolean, isActivityStackTransparent: Boolean) = DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue && ((isSystemUiTask(packageName) || isTransparentTask(isActivityStackTransparent, numActivities)) && !isTopActivityNoDisplay) /** * Returns true if all activities in a tasks stack are transparent. If there are no activities * will return false. */ fun isTransparentTask(task: RunningTaskInfo): Boolean = task.isActivityStackTransparent && task.numActivities > 0 fun isTransparentTask(task: TaskInfo): Boolean = isTransparentTask(task.isActivityStackTransparent, task.numActivities) private fun isTransparentTask(isActivityStackTransparent: Boolean, numActivities: Int) = isActivityStackTransparent && numActivities > 0 private fun isSystemUiTask(task: RunningTaskInfo): Boolean = task.baseActivity?.packageName == systemUiPackage private fun isSystemUiTask(packageName: String?) = packageName == systemUiPackage }
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +7 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ import com.android.wm.shell.shared.TransactionPool; import com.android.wm.shell.shared.annotations.ShellAnimationThread; import com.android.wm.shell.shared.annotations.ShellMainThread; import com.android.wm.shell.shared.annotations.ShellSplashscreenThread; import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.splitscreen.SplitScreen; import com.android.wm.shell.splitscreen.SplitScreenController; Loading Loading @@ -256,6 +257,12 @@ public abstract class WMShellBaseModule { mainExecutor); } @WMSingleton @Provides static DesktopModeCompatPolicy provideDesktopModeCompatPolicy(Context context) { return new DesktopModeCompatPolicy(context); } @WMSingleton @Provides static Optional<CompatUIHandler> provideCompatUIController( Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.common.UserProfileContexts; import com.android.wm.shell.common.split.SplitState; import com.android.wm.shell.compatui.DesktopModeCompatPolicy; import com.android.wm.shell.compatui.letterbox.LetterboxCommandHandler; import com.android.wm.shell.compatui.letterbox.LetterboxTransitionObserver; import com.android.wm.shell.dagger.back.ShellBackAnimationModule; Loading Loading @@ -133,6 +132,7 @@ import com.android.wm.shell.shared.TransactionPool; import com.android.wm.shell.shared.annotations.ShellAnimationThread; import com.android.wm.shell.shared.annotations.ShellBackgroundThread; import com.android.wm.shell.shared.annotations.ShellMainThread; import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.sysui.ShellCommandHandler; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +3 −7 Original line number Diff line number Diff line Loading @@ -86,7 +86,6 @@ import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.common.SingleInstanceRemoteListener import com.android.wm.shell.common.SyncTransactionQueue import com.android.wm.shell.common.UserProfileContexts import com.android.wm.shell.compatui.DesktopModeCompatPolicy import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.MinimizeReason import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger Loading Loading @@ -115,6 +114,7 @@ import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_ST import com.android.wm.shell.shared.TransitionUtil import com.android.wm.shell.shared.annotations.ExternalThread import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.DESKTOP_DENSITY_OVERRIDE import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useDesktopOverrideDensity Loading Loading @@ -516,10 +516,7 @@ class DesktopTasksController( remoteTransition: RemoteTransition? = null, callback: IMoveToDesktopCallback? = null, ) { if ( DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task) ) { if (desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task)) { logW("Cannot enter desktop for taskId %d, ineligible top activity found", task.taskId) return } Loading Loading @@ -1821,7 +1818,6 @@ class DesktopTasksController( taskRepository.isActiveTask(triggerTask.taskId)) private fun isIncompatibleTask(task: RunningTaskInfo) = DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task) private fun shouldHandleTaskClosing(request: TransitionRequestInfo): Boolean = Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/compatui/SystemModalsTransitionHandler.kt +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import androidx.core.animation.addListener import com.android.app.animation.Interpolators import com.android.internal.protolog.ProtoLog import com.android.wm.shell.common.ShellExecutor import com.android.wm.shell.compatui.DesktopModeCompatPolicy import com.android.wm.shell.desktopmode.DesktopUserRepositories import com.android.wm.shell.desktopmode.DesktopWallpaperActivity import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE Loading @@ -37,6 +36,7 @@ import com.android.wm.shell.shared.TransitionUtil.isClosingMode import com.android.wm.shell.shared.TransitionUtil.isClosingType import com.android.wm.shell.shared.TransitionUtil.isOpeningMode import com.android.wm.shell.shared.TransitionUtil.isOpeningType import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import com.android.wm.shell.transition.Transitions.TransitionHandler Loading