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

Commit 1ec1a000 authored by Gustav Sennton's avatar Gustav Sennton
Browse files

Exclude Wallpaper activity from system modal transition handling

Test: manual
Bug: 391619968
Flag: com.android.window.flags.enable_desktop_system_dialogs_transitions
Change-Id: I8b0aef2543412327bf076b297241c46943a6e4e8
parent 82da37e4
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.wm.shell.desktopmode.compatui

import android.animation.ValueAnimator
import android.app.ActivityManager.RunningTaskInfo
import android.content.Context
import android.os.IBinder
import android.view.Display.DEFAULT_DISPLAY
@@ -30,6 +31,7 @@ import com.android.internal.protolog.ProtoLog
import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.compatui.isTopActivityExemptFromDesktopWindowing
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
import com.android.wm.shell.shared.TransitionUtil.isClosingMode
import com.android.wm.shell.shared.TransitionUtil.isClosingType
@@ -128,7 +130,7 @@ class SystemModalsTransitionHandler(
                return@find false
            }
            val taskInfo = change.taskInfo ?: return@find false
            return@find isTopActivityExemptFromDesktopWindowing(context, taskInfo)
            return@find isSystemModal(context, taskInfo)
        }

    private fun getClosingSystemModal(info: TransitionInfo): TransitionInfo.Change? =
@@ -137,10 +139,14 @@ class SystemModalsTransitionHandler(
                return@find false
            }
            val taskInfo = change.taskInfo ?: return@find false
            return@find isTopActivityExemptFromDesktopWindowing(context, taskInfo) ||
            return@find isSystemModal(context, taskInfo) ||
                showingSystemModalsIds.contains(taskInfo.taskId)
        }

    private fun isSystemModal(context: Context, taskInfo: RunningTaskInfo): Boolean =
        !DesktopWallpaperActivity.isWallpaperTask(taskInfo) &&
            isTopActivityExemptFromDesktopWindowing(context, taskInfo)

    private fun createAlphaAnimator(
        transaction: SurfaceControl.Transaction,
        leash: SurfaceControl,
+8 −4
Original line number Diff line number Diff line
@@ -73,10 +73,14 @@ object DesktopTestHelpers {
            .setLastActiveTime(100)
            .build()

    /**
     * Create a new System Modal task builder, i.e. a builder for a task with only transparent
     * activities.
     */
    fun createSystemModalTaskBuilder(displayId: Int = DEFAULT_DISPLAY): TestRunningTaskInfoBuilder =
        createFullscreenTaskBuilder(displayId).setActivityStackTransparent(true).setNumActivities(1)

    /** Create a new System Modal task, i.e. a task with only transparent activities. */
    fun createSystemModalTask(displayId: Int = DEFAULT_DISPLAY): RunningTaskInfo =
        createFullscreenTaskBuilder(displayId)
            .setActivityStackTransparent(true)
            .setNumActivities(1)
            .build()
        createSystemModalTaskBuilder(displayId).build()
}
+16 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.wm.shell.desktopmode.compatui

import android.content.Intent
import android.os.Binder
import android.testing.AndroidTestingRunner
import android.view.SurfaceControl
@@ -29,7 +30,9 @@ import com.android.wm.shell.desktopmode.DesktopRepository
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createFullscreenTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createFullscreenTaskBuilder
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createSystemModalTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createSystemModalTaskBuilder
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DesktopWallpaperActivity
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.TransitionInfoBuilder
import com.android.wm.shell.transition.Transitions
@@ -115,6 +118,19 @@ class SystemModalsTransitionHandlerTest : ShellTestCase() {
        assertThat(transitionHandler.startAnimation(Binder(), info, startT, finishT) {}).isFalse()
    }

    @Test
    fun startAnimation_launchingWallpaperTask_doesNotAnimate() {
        val wallpaperTask =
            createSystemModalTaskBuilder().setBaseIntent(createWallpaperIntent()).build()
        val info =
            TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_OPEN, wallpaperTask).build()

        assertThat(transitionHandler.startAnimation(Binder(), info, startT, finishT) {}).isFalse()
    }

    private fun createWallpaperIntent() =
        Intent().apply { setComponent(DesktopWallpaperActivity.wallpaperActivityComponent) }

    @Test
    fun startAnimation_launchingFullscreenTask_doesNotAnimate() {
        val info =