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

Commit 53770b50 authored by Jorge Gil's avatar Jorge Gil Committed by Android (Google) Code Review
Browse files

Merge "Use material3's dynamic color schemes in Resize Veil" into main

parents 876dbd79 48fd462b
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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);
    }

    /**
@@ -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);
    }

    /**
@@ -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 */);
    }

    /**
+26 −26
Original line number Diff line number Diff line
@@ -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
@@ -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

/**
@@ -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
@@ -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)
                }
            }

@@ -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
        }
@@ -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
@@ -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()
@@ -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()
@@ -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 */)
    }

    /**
+13 −7
Original line number Diff line number Diff line
@@ -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)
@@ -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)
@@ -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)
@@ -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)
    }
@@ -212,11 +218,11 @@ class ResizeVeilTest : ShellTestCase() {
            context,
            mockDisplayController,
            mockAppIcon,
            taskInfo,
            parent,
            { mockTransaction },
            mockSurfaceControlBuilderFactory,
            mockSurfaceControlViewHostFactory
            mockSurfaceControlViewHostFactory,
            taskInfo
        )
    }
}