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

Commit a400a5f8 authored by Massimo Carli's avatar Massimo Carli Committed by Android (Google) Code Review
Browse files

Merge "[82/n] Improving Skip Logic" into main

parents e5d3663e 4833c7b3
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -67,15 +67,8 @@ fun Change.asLetterboxLifecycleEventType() = when {

/**
 * Logic to skip a [Change] if not related to Letterboxing. We always skip changes about closing.
 * We skip the changes for tasks which are not leaves. The isLeaf information for changes with
 * activity target is always false but those changes cannot be skipped.
 *
 * No leaf task    -> isChangeForALeafTask()==false  isActivityChange()==false     Skip
 * leaf task       -> isChangeForALeafTask()==true   isActivityChange()==false     No Skip
 * Activity change -> isChangeForALeafTask()==false  isActivityChange()==true      No Skip
 */
fun Change.shouldSkipForLetterbox(): Boolean =
    isClosingType(mode) || !(isChangeForALeafTask() || isActivityChange())
fun Change.shouldSkipForLetterbox(): Boolean = isClosingType(mode)

/**
 * Returns [true] if the [Change] is about an [Activity] and so it contains a
@@ -88,6 +81,9 @@ fun Change.isActivityChange(): Boolean = activityTransitionInfo != null
 */
fun Change.isTranslucent() = hasFlags(FLAG_TRANSLUCENT)

/** Returns [true] if the Task hosts Activities */
/**
 * Returns [true] if the Task hosts Activities. This is true if the Change has Activity as target
 * or if task is a leaf task.
 */
fun Change.isChangeForALeafTask(): Boolean =
    taskInfo?.appCompatTaskInfo?.isLeafTask() ?: false
    taskInfo?.appCompatTaskInfo?.isLeafTask ?: isActivityChange()
+23 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.testing.AndroidTestingRunner
import android.view.WindowManager
import android.window.TransitionInfo.FLAG_TRANSLUCENT
import androidx.test.filters.SmallTest
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventType.CLOSE
import com.android.wm.shell.compatui.letterbox.lifecycle.LetterboxLifecycleEventType.OPEN
import com.android.wm.shell.util.testLetterboxLifecycleEvent
@@ -37,7 +38,7 @@ import org.junit.runner.RunWith
 */
@RunWith(AndroidTestingRunner::class)
@SmallTest
class LetterboxLifecycleEventTest {
class LetterboxLifecycleEventTest : ShellTestCase() {

    @Test
    fun `asLetterboxLifecycleEventType returns the right type for OPEN modes`() {
@@ -135,19 +136,38 @@ class LetterboxLifecycleEventTest {
        }
    }

    @Test
    fun `isChangeForALeafTask returns true if the Change has Activity target`() {
        testLetterboxLifecycleEvent {
            inputChange {
            }
            useChange { change ->
                assertFalse(change.isChangeForALeafTask())
            }

            inputChange {
                activityTransitionInfo {
                }
            }
            useChange { change ->
                assertTrue(change.isChangeForALeafTask())
            }
        }
    }

    @Test
    fun `isTranslucent returns true if the FLAG_TRANSLUCENT flag is present in Change`() {
        testLetterboxLifecycleEvent {
            inputChange { }
            useChange { change ->
                assert(!change.isTranslucent())
                assertFalse(change.isTranslucent())
            }

            inputChange {
                flags = FLAG_TRANSLUCENT
            }
            useChange { change ->
                assert(!change.isTranslucent())
                assertTrue(change.isTranslucent())
            }
        }
    }
+1 −48
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.util.testLetterboxLifecycleEventFactory
import java.util.function.Consumer
import kotlin.test.assertFalse
import kotlin.test.assertNull
import kotlin.test.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
@@ -49,62 +48,16 @@ class SkipLetterboxLifecycleEventFactoryTest : ShellTestCase() {
                validateCanHandle { canHandle ->
                    assertTrue(canHandle)
                }
                validateCreateLifecycleEvent { event ->
                    assertNull(event)
                }
            }
        }
    }

    @Test
    fun `Factory is active when Change is for a Task which is NOT a leaf`() {
        runTestScenario { r ->
            testLetterboxLifecycleEventFactory(r.getLetterboxLifecycleEventFactory()) {
                inputChange {
                    mode = TRANSIT_OPEN
                    runningTaskInfo { ti ->
                        ti.appCompatTaskInfo.setIsLeafTask(false)
                    }
                }
                validateCanHandle { canHandle ->
                    assertTrue(canHandle)
                }
                validateCreateLifecycleEvent { event ->
                    assertNull(event)
                }
            }
        }
    }

    @Test
    fun `Factory is active when Change is not closing for a Task which is NOT a leaf`() {
    fun `Factory is NOT active when Change is NOT a Closing one`() {
        runTestScenario { r ->
            testLetterboxLifecycleEventFactory(r.getLetterboxLifecycleEventFactory()) {
                inputChange {
                    mode = TRANSIT_OPEN
                    runningTaskInfo { ti ->
                        ti.appCompatTaskInfo.setIsLeafTask(false)
                    }
                }
                validateCanHandle { canHandle ->
                    assertTrue(canHandle)
                }
                validateCreateLifecycleEvent { event ->
                    assertNull(event)
                }
            }
        }
    }

    @Test
    fun `Factory is NOT active when Change is not closing for an Activity Transition`() {
        runTestScenario { r ->
            testLetterboxLifecycleEventFactory(r.getLetterboxLifecycleEventFactory()) {
                inputChange {
                    mode = TRANSIT_OPEN
                    activityTransitionInfo {
                        this.taskId = 10
                    }
                }
                validateCanHandle { canHandle ->
                    assertFalse(canHandle)