Loading core/java/android/window/DesktopExperienceFlags.java +2 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ public enum DesktopExperienceFlags { ENABLE_CAMERA_COMPAT_EXTERNAL_DISPLAY_ROTATION_BUGFIX( Flags::enableCameraCompatExternalDisplayRotationBugfix, false, Flags.FLAG_ENABLE_CAMERA_COMPAT_EXTERNAL_DISPLAY_ROTATION_BUGFIX), ENABLE_CLEAR_REUSABLE_SCVH_ON_RELEASE(Flags::clearReusableScvhOnRelease, false, Flags.FLAG_CLEAR_REUSABLE_SCVH_ON_RELEASE), ENABLE_CONNECTED_DISPLAYS_DND(Flags::enableConnectedDisplaysDnd, true, Flags.FLAG_ENABLE_CONNECTED_DISPLAYS_DND), ENABLE_CONNECTED_DISPLAYS_PIP(Flags::enableConnectedDisplaysPip, true, Loading core/java/android/window/flags/lse_desktop_experience.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,16 @@ flag { } } flag { name: "clear_reusable_scvh_on_release" namespace: "lse_desktop_experience" description: "Resets the views of reusable SCVHs when released" bug: "432324168" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "close_task_keyboard_shortcut" namespace: "lse_desktop_experience" Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/caption/CaptionController.kt +19 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import com.android.wm.shell.windowdecor.WindowDecoration2.SurfaceControlViewHost import com.android.wm.shell.windowdecor.WindowDecorationInsets import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHost import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHostSupplier import com.android.wm.shell.windowdecor.extension.identityHashCode import com.android.wm.shell.windowdecor.extension.isRtl import com.android.wm.shell.windowdecor.extension.isTransparentCaptionBarAppearance import com.android.wm.shell.windowdecor.viewholder.WindowDecorationViewHolder Loading Loading @@ -213,6 +214,7 @@ abstract class CaptionController<T>( protected open fun getCaptionTopPadding(): Int = 0 /** Updates the caption's view hierarchy. */ @OptIn(ExperimentalStdlibApi::class) private fun updateViewHierarchy( params: RelayoutParams, viewHost: WindowDecorViewHost, Loading @@ -228,11 +230,15 @@ abstract class CaptionController<T>( ) { val taskId = taskInfo.taskId logD( "updateViewHierarchy of taskId=%d size=%dx%d touchableRegion=%s", "updateViewHierarchy of taskId=%d size=%dx%d touchableRegion=%s " + "view=%s viewParent=%s viewHost=%s", taskId, captionWidth, captionHeight, touchableRegion, view.identityHashCode.toHexString(), view.parent.identityHashCode.toHexString(), viewHost, ) val lp = WindowManager.LayoutParams( Loading Loading @@ -480,7 +486,12 @@ abstract class CaptionController<T>( * view holder. */ private fun getOrCreateViewHolder(): WindowDecorationViewHolder<*> { val viewHolder = windowDecorationViewHolder ?: createCaptionView() val currentViewHolder = windowDecorationViewHolder if (currentViewHolder != null) { return currentViewHolder } val viewHolder = createCaptionView() logD("getOrCreateViewHolder() created new caption view: %s", viewHolder) windowDecorationViewHolder = viewHolder return viewHolder } Loading @@ -501,7 +512,12 @@ abstract class CaptionController<T>( traceTag = Trace.TRACE_TAG_WINDOW_MANAGER, name = "CaptionController#getOrCreateViewHost", ) { val viewHost = captionViewHost ?: windowDecorViewHostSupplier.acquire(context, display) val currentViewHost = captionViewHost if (currentViewHost != null) { return currentViewHost } val viewHost = windowDecorViewHostSupplier.acquire(context, display) logD("getOrCreateViewHost() acquired viewHost: %s", viewHost) captionViewHost = viewHost return viewHost } Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/viewhost/DefaultWindowDecorViewHost.kt +4 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,10 @@ class DefaultWindowDecorViewHost( Trace.endSection() } override fun reset() { // No-op. } override fun release(t: SurfaceControl.Transaction) { clearCurrentUpdateJob() viewHostAdapter.release(t) Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/viewhost/PooledWindowDecorViewHostSupplier.kt +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.Trace import android.util.Pools import android.view.Display import android.view.SurfaceControl import android.window.DesktopExperienceFlags import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.sysui.ShellInit import kotlinx.coroutines.CoroutineScope Loading Loading @@ -84,6 +85,9 @@ class PooledWindowDecorViewHostSupplier( } override fun release(viewHost: WindowDecorViewHost, t: SurfaceControl.Transaction) { if (DesktopExperienceFlags.ENABLE_CLEAR_REUSABLE_SCVH_ON_RELEASE.isTrue) { viewHost.reset() } val pooled = pool.release(viewHost) if (!pooled) { viewHost.release(t) Loading Loading
core/java/android/window/DesktopExperienceFlags.java +2 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ public enum DesktopExperienceFlags { ENABLE_CAMERA_COMPAT_EXTERNAL_DISPLAY_ROTATION_BUGFIX( Flags::enableCameraCompatExternalDisplayRotationBugfix, false, Flags.FLAG_ENABLE_CAMERA_COMPAT_EXTERNAL_DISPLAY_ROTATION_BUGFIX), ENABLE_CLEAR_REUSABLE_SCVH_ON_RELEASE(Flags::clearReusableScvhOnRelease, false, Flags.FLAG_CLEAR_REUSABLE_SCVH_ON_RELEASE), ENABLE_CONNECTED_DISPLAYS_DND(Flags::enableConnectedDisplaysDnd, true, Flags.FLAG_ENABLE_CONNECTED_DISPLAYS_DND), ENABLE_CONNECTED_DISPLAYS_PIP(Flags::enableConnectedDisplaysPip, true, Loading
core/java/android/window/flags/lse_desktop_experience.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,16 @@ flag { } } flag { name: "clear_reusable_scvh_on_release" namespace: "lse_desktop_experience" description: "Resets the views of reusable SCVHs when released" bug: "432324168" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "close_task_keyboard_shortcut" namespace: "lse_desktop_experience" Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/caption/CaptionController.kt +19 −3 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import com.android.wm.shell.windowdecor.WindowDecoration2.SurfaceControlViewHost import com.android.wm.shell.windowdecor.WindowDecorationInsets import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHost import com.android.wm.shell.windowdecor.common.viewhost.WindowDecorViewHostSupplier import com.android.wm.shell.windowdecor.extension.identityHashCode import com.android.wm.shell.windowdecor.extension.isRtl import com.android.wm.shell.windowdecor.extension.isTransparentCaptionBarAppearance import com.android.wm.shell.windowdecor.viewholder.WindowDecorationViewHolder Loading Loading @@ -213,6 +214,7 @@ abstract class CaptionController<T>( protected open fun getCaptionTopPadding(): Int = 0 /** Updates the caption's view hierarchy. */ @OptIn(ExperimentalStdlibApi::class) private fun updateViewHierarchy( params: RelayoutParams, viewHost: WindowDecorViewHost, Loading @@ -228,11 +230,15 @@ abstract class CaptionController<T>( ) { val taskId = taskInfo.taskId logD( "updateViewHierarchy of taskId=%d size=%dx%d touchableRegion=%s", "updateViewHierarchy of taskId=%d size=%dx%d touchableRegion=%s " + "view=%s viewParent=%s viewHost=%s", taskId, captionWidth, captionHeight, touchableRegion, view.identityHashCode.toHexString(), view.parent.identityHashCode.toHexString(), viewHost, ) val lp = WindowManager.LayoutParams( Loading Loading @@ -480,7 +486,12 @@ abstract class CaptionController<T>( * view holder. */ private fun getOrCreateViewHolder(): WindowDecorationViewHolder<*> { val viewHolder = windowDecorationViewHolder ?: createCaptionView() val currentViewHolder = windowDecorationViewHolder if (currentViewHolder != null) { return currentViewHolder } val viewHolder = createCaptionView() logD("getOrCreateViewHolder() created new caption view: %s", viewHolder) windowDecorationViewHolder = viewHolder return viewHolder } Loading @@ -501,7 +512,12 @@ abstract class CaptionController<T>( traceTag = Trace.TRACE_TAG_WINDOW_MANAGER, name = "CaptionController#getOrCreateViewHost", ) { val viewHost = captionViewHost ?: windowDecorViewHostSupplier.acquire(context, display) val currentViewHost = captionViewHost if (currentViewHost != null) { return currentViewHost } val viewHost = windowDecorViewHostSupplier.acquire(context, display) logD("getOrCreateViewHost() acquired viewHost: %s", viewHost) captionViewHost = viewHost return viewHost } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/viewhost/DefaultWindowDecorViewHost.kt +4 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,10 @@ class DefaultWindowDecorViewHost( Trace.endSection() } override fun reset() { // No-op. } override fun release(t: SurfaceControl.Transaction) { clearCurrentUpdateJob() viewHostAdapter.release(t) Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/common/viewhost/PooledWindowDecorViewHostSupplier.kt +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.os.Trace import android.util.Pools import android.view.Display import android.view.SurfaceControl import android.window.DesktopExperienceFlags import com.android.wm.shell.shared.annotations.ShellMainThread import com.android.wm.shell.sysui.ShellInit import kotlinx.coroutines.CoroutineScope Loading Loading @@ -84,6 +85,9 @@ class PooledWindowDecorViewHostSupplier( } override fun release(viewHost: WindowDecorViewHost, t: SurfaceControl.Transaction) { if (DesktopExperienceFlags.ENABLE_CLEAR_REUSABLE_SCVH_ON_RELEASE.isTrue) { viewHost.reset() } val pooled = pool.release(viewHost) if (!pooled) { viewHost.release(t) Loading