Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +4 −4 Original line number Diff line number Diff line Loading @@ -516,8 +516,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private void createResizeVeilIfNeeded() { if (mResizeVeil != null) return; loadAppInfoIfNeeded(); mResizeVeil = new ResizeVeil(mContext, mDisplayController, mResizeVeilBitmap, mTaskInfo, mTaskSurface, mSurfaceControlTransactionSupplier); mResizeVeil = new ResizeVeil(mContext, mDisplayController, mResizeVeilBitmap, mTaskSurface, mSurfaceControlTransactionSupplier, mTaskInfo); } /** Loading @@ -525,7 +525,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ public void showResizeVeil(Rect taskBounds) { createResizeVeilIfNeeded(); mResizeVeil.showVeil(mTaskSurface, taskBounds); mResizeVeil.showVeil(mTaskSurface, taskBounds, mTaskInfo); } /** Loading @@ -533,7 +533,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ public void showResizeVeil(SurfaceControl.Transaction tx, Rect taskBounds) { createResizeVeilIfNeeded(); mResizeVeil.showVeil(tx, mTaskSurface, taskBounds, false /* fadeIn */); mResizeVeil.showVeil(tx, mTaskSurface, taskBounds, mTaskInfo, false /* fadeIn */); } /** Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt +26 −26 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.app.ActivityManager.RunningTaskInfo import android.content.Context import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.Color import android.graphics.PixelFormat Loading @@ -36,10 +35,15 @@ import android.view.WindowManager import android.view.WindowlessWindowManager import android.widget.ImageView import android.window.TaskConstants import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.ui.graphics.toArgb import com.android.wm.shell.R import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayController.OnDisplaysChangedListener import com.android.wm.shell.windowdecor.WindowDecoration.SurfaceControlViewHostFactory import com.android.wm.shell.windowdecor.common.DecorThemeUtil import com.android.wm.shell.windowdecor.common.Theme import java.util.function.Supplier /** Loading @@ -49,14 +53,18 @@ class ResizeVeil @JvmOverloads constructor( private val context: Context, private val displayController: DisplayController, private val appIcon: Bitmap, private val taskInfo: RunningTaskInfo, private var parentSurface: SurfaceControl, private val surfaceControlTransactionSupplier: Supplier<SurfaceControl.Transaction>, private val surfaceControlBuilderFactory: SurfaceControlBuilderFactory = object : SurfaceControlBuilderFactory {}, private val surfaceControlViewHostFactory: SurfaceControlViewHostFactory = object : SurfaceControlViewHostFactory {} object : SurfaceControlViewHostFactory {}, taskInfo: RunningTaskInfo, ) { private val decorThemeUtil = DecorThemeUtil(context) private val lightColors = dynamicLightColorScheme(context) private val darkColors = dynamicDarkColorScheme(context) private val surfaceSession = SurfaceSession() private lateinit var iconView: ImageView private var iconSize = 0 Loading Loading @@ -86,18 +94,7 @@ class ResizeVeil @JvmOverloads constructor( return } displayController.removeDisplayWindowListener(this) setupResizeVeil() } } private val backgroundColorId: Int get() { val configuration = context.resources.configuration return if (configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) { R.color.desktop_mode_resize_veil_dark } else { R.color.desktop_mode_resize_veil_light setupResizeVeil(taskInfo) } } Loading @@ -108,14 +105,14 @@ class ResizeVeil @JvmOverloads constructor( get() = viewHost != null init { setupResizeVeil() setupResizeVeil(taskInfo) } /** * Create the veil in its default invisible state. */ private fun setupResizeVeil() { if (!obtainDisplayOrRegisterListener()) { private fun setupResizeVeil(taskInfo: RunningTaskInfo) { if (!obtainDisplayOrRegisterListener(taskInfo.displayId)) { // Display may not be available yet, skip this until then. return } Loading Loading @@ -162,8 +159,8 @@ class ResizeVeil @JvmOverloads constructor( Trace.endSection() } private fun obtainDisplayOrRegisterListener(): Boolean { display = displayController.getDisplay(taskInfo.displayId) private fun obtainDisplayOrRegisterListener(displayId: Int): Boolean { display = displayController.getDisplay(displayId) if (display == null) { displayController.addDisplayWindowListener(onDisplaysChangedListener) return false Loading @@ -184,7 +181,8 @@ class ResizeVeil @JvmOverloads constructor( t: SurfaceControl.Transaction, parent: SurfaceControl, taskBounds: Rect, fadeIn: Boolean taskInfo: RunningTaskInfo, fadeIn: Boolean, ) { if (!isReady || isVisible) { t.apply() Loading @@ -202,13 +200,15 @@ class ResizeVeil @JvmOverloads constructor( parentSurface = parent } val backgroundColor = when (decorThemeUtil.getAppTheme(taskInfo)) { Theme.LIGHT -> lightColors.surfaceContainer Theme.DARK -> darkColors.surfaceContainer } t.show(veil) .setLayer(veil, VEIL_CONTAINER_LAYER) .setLayer(icon, VEIL_ICON_LAYER) .setLayer(background, VEIL_BACKGROUND_LAYER) .setColor(background, Color.valueOf(context.getColor(backgroundColorId)).components) .setColor(background, Color.valueOf(backgroundColor.toArgb()).components) relayout(taskBounds, t) if (fadeIn) { cancelAnimation() Loading Loading @@ -270,12 +270,12 @@ class ResizeVeil @JvmOverloads constructor( /** * Animate veil's alpha to 1, fading it in. */ fun showVeil(parentSurface: SurfaceControl, taskBounds: Rect) { fun showVeil(parentSurface: SurfaceControl, taskBounds: Rect, taskInfo: RunningTaskInfo) { if (!isReady || isVisible) { return } val t = surfaceControlTransactionSupplier.get() showVeil(t, parentSurface, taskBounds, true /* fadeIn */) showVeil(t, parentSurface, taskBounds, taskInfo, true /* fadeIn */) } /** Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/ResizeVeilTest.kt +13 −7 Original line number Diff line number Diff line Loading @@ -150,7 +150,7 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil() { val veil = createResizeVeil() veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction).show(mockResizeVeilSurface) verify(mockTransaction).show(mockBackgroundSurface) Loading @@ -162,7 +162,7 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil_displayUnavailable_doesNotShow() { val veil = createResizeVeil(withDisplayAvailable = false) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction, never()).show(mockResizeVeilSurface) verify(mockTransaction, never()).show(mockBackgroundSurface) Loading @@ -174,8 +174,8 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil_alreadyVisible_doesNotShowAgain() { val veil = createResizeVeil() veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction, times(1)).show(mockResizeVeilSurface) verify(mockTransaction, times(1)).show(mockBackgroundSurface) Loading @@ -188,7 +188,13 @@ class ResizeVeilTest : ShellTestCase() { val veil = createResizeVeil(parent = mock()) val newParent = mock<SurfaceControl>() veil.showVeil(mockTransaction, newParent, Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil( mockTransaction, newParent, Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */ ) verify(mockTransaction).reparent(mockResizeVeilSurface, newParent) } Loading @@ -212,11 +218,11 @@ class ResizeVeilTest : ShellTestCase() { context, mockDisplayController, mockAppIcon, taskInfo, parent, { mockTransaction }, mockSurfaceControlBuilderFactory, mockSurfaceControlViewHostFactory mockSurfaceControlViewHostFactory, taskInfo ) } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +4 −4 Original line number Diff line number Diff line Loading @@ -516,8 +516,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private void createResizeVeilIfNeeded() { if (mResizeVeil != null) return; loadAppInfoIfNeeded(); mResizeVeil = new ResizeVeil(mContext, mDisplayController, mResizeVeilBitmap, mTaskInfo, mTaskSurface, mSurfaceControlTransactionSupplier); mResizeVeil = new ResizeVeil(mContext, mDisplayController, mResizeVeilBitmap, mTaskSurface, mSurfaceControlTransactionSupplier, mTaskInfo); } /** Loading @@ -525,7 +525,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ public void showResizeVeil(Rect taskBounds) { createResizeVeilIfNeeded(); mResizeVeil.showVeil(mTaskSurface, taskBounds); mResizeVeil.showVeil(mTaskSurface, taskBounds, mTaskInfo); } /** Loading @@ -533,7 +533,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin */ public void showResizeVeil(SurfaceControl.Transaction tx, Rect taskBounds) { createResizeVeilIfNeeded(); mResizeVeil.showVeil(tx, mTaskSurface, taskBounds, false /* fadeIn */); mResizeVeil.showVeil(tx, mTaskSurface, taskBounds, mTaskInfo, false /* fadeIn */); } /** Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/ResizeVeil.kt +26 −26 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.animation.AnimatorListenerAdapter import android.animation.ValueAnimator import android.app.ActivityManager.RunningTaskInfo import android.content.Context import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.Color import android.graphics.PixelFormat Loading @@ -36,10 +35,15 @@ import android.view.WindowManager import android.view.WindowlessWindowManager import android.widget.ImageView import android.window.TaskConstants import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.ui.graphics.toArgb import com.android.wm.shell.R import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayController.OnDisplaysChangedListener import com.android.wm.shell.windowdecor.WindowDecoration.SurfaceControlViewHostFactory import com.android.wm.shell.windowdecor.common.DecorThemeUtil import com.android.wm.shell.windowdecor.common.Theme import java.util.function.Supplier /** Loading @@ -49,14 +53,18 @@ class ResizeVeil @JvmOverloads constructor( private val context: Context, private val displayController: DisplayController, private val appIcon: Bitmap, private val taskInfo: RunningTaskInfo, private var parentSurface: SurfaceControl, private val surfaceControlTransactionSupplier: Supplier<SurfaceControl.Transaction>, private val surfaceControlBuilderFactory: SurfaceControlBuilderFactory = object : SurfaceControlBuilderFactory {}, private val surfaceControlViewHostFactory: SurfaceControlViewHostFactory = object : SurfaceControlViewHostFactory {} object : SurfaceControlViewHostFactory {}, taskInfo: RunningTaskInfo, ) { private val decorThemeUtil = DecorThemeUtil(context) private val lightColors = dynamicLightColorScheme(context) private val darkColors = dynamicDarkColorScheme(context) private val surfaceSession = SurfaceSession() private lateinit var iconView: ImageView private var iconSize = 0 Loading Loading @@ -86,18 +94,7 @@ class ResizeVeil @JvmOverloads constructor( return } displayController.removeDisplayWindowListener(this) setupResizeVeil() } } private val backgroundColorId: Int get() { val configuration = context.resources.configuration return if (configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) { R.color.desktop_mode_resize_veil_dark } else { R.color.desktop_mode_resize_veil_light setupResizeVeil(taskInfo) } } Loading @@ -108,14 +105,14 @@ class ResizeVeil @JvmOverloads constructor( get() = viewHost != null init { setupResizeVeil() setupResizeVeil(taskInfo) } /** * Create the veil in its default invisible state. */ private fun setupResizeVeil() { if (!obtainDisplayOrRegisterListener()) { private fun setupResizeVeil(taskInfo: RunningTaskInfo) { if (!obtainDisplayOrRegisterListener(taskInfo.displayId)) { // Display may not be available yet, skip this until then. return } Loading Loading @@ -162,8 +159,8 @@ class ResizeVeil @JvmOverloads constructor( Trace.endSection() } private fun obtainDisplayOrRegisterListener(): Boolean { display = displayController.getDisplay(taskInfo.displayId) private fun obtainDisplayOrRegisterListener(displayId: Int): Boolean { display = displayController.getDisplay(displayId) if (display == null) { displayController.addDisplayWindowListener(onDisplaysChangedListener) return false Loading @@ -184,7 +181,8 @@ class ResizeVeil @JvmOverloads constructor( t: SurfaceControl.Transaction, parent: SurfaceControl, taskBounds: Rect, fadeIn: Boolean taskInfo: RunningTaskInfo, fadeIn: Boolean, ) { if (!isReady || isVisible) { t.apply() Loading @@ -202,13 +200,15 @@ class ResizeVeil @JvmOverloads constructor( parentSurface = parent } val backgroundColor = when (decorThemeUtil.getAppTheme(taskInfo)) { Theme.LIGHT -> lightColors.surfaceContainer Theme.DARK -> darkColors.surfaceContainer } t.show(veil) .setLayer(veil, VEIL_CONTAINER_LAYER) .setLayer(icon, VEIL_ICON_LAYER) .setLayer(background, VEIL_BACKGROUND_LAYER) .setColor(background, Color.valueOf(context.getColor(backgroundColorId)).components) .setColor(background, Color.valueOf(backgroundColor.toArgb()).components) relayout(taskBounds, t) if (fadeIn) { cancelAnimation() Loading Loading @@ -270,12 +270,12 @@ class ResizeVeil @JvmOverloads constructor( /** * Animate veil's alpha to 1, fading it in. */ fun showVeil(parentSurface: SurfaceControl, taskBounds: Rect) { fun showVeil(parentSurface: SurfaceControl, taskBounds: Rect, taskInfo: RunningTaskInfo) { if (!isReady || isVisible) { return } val t = surfaceControlTransactionSupplier.get() showVeil(t, parentSurface, taskBounds, true /* fadeIn */) showVeil(t, parentSurface, taskBounds, taskInfo, true /* fadeIn */) } /** Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/ResizeVeilTest.kt +13 −7 Original line number Diff line number Diff line Loading @@ -150,7 +150,7 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil() { val veil = createResizeVeil() veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction).show(mockResizeVeilSurface) verify(mockTransaction).show(mockBackgroundSurface) Loading @@ -162,7 +162,7 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil_displayUnavailable_doesNotShow() { val veil = createResizeVeil(withDisplayAvailable = false) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction, never()).show(mockResizeVeilSurface) verify(mockTransaction, never()).show(mockBackgroundSurface) Loading @@ -174,8 +174,8 @@ class ResizeVeilTest : ShellTestCase() { fun showVeil_alreadyVisible_doesNotShowAgain() { val veil = createResizeVeil() veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) veil.showVeil(mockTransaction, mock(), Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */) verify(mockTransaction, times(1)).show(mockResizeVeilSurface) verify(mockTransaction, times(1)).show(mockBackgroundSurface) Loading @@ -188,7 +188,13 @@ class ResizeVeilTest : ShellTestCase() { val veil = createResizeVeil(parent = mock()) val newParent = mock<SurfaceControl>() veil.showVeil(mockTransaction, newParent, Rect(0, 0, 100, 100), false /* fadeIn */) veil.showVeil( mockTransaction, newParent, Rect(0, 0, 100, 100), taskInfo, false /* fadeIn */ ) verify(mockTransaction).reparent(mockResizeVeilSurface, newParent) } Loading @@ -212,11 +218,11 @@ class ResizeVeilTest : ShellTestCase() { context, mockDisplayController, mockAppIcon, taskInfo, parent, { mockTransaction }, mockSurfaceControlBuilderFactory, mockSurfaceControlViewHostFactory mockSurfaceControlViewHostFactory, taskInfo ) } }