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

Commit 39b9c220 authored by Mark Renouf's avatar Mark Renouf
Browse files

Disable WorkProfilePolicy for multiwindow droidfood

When 'enable_desktop_windowing_mode' is enabled and the top
RootTaskInfo has 'WINDOWING_MODE_FREEFORM', then skip the
work profile policy handling behavior.

Flag: ACONFIG com.android.window.flags.enable_desktop_windowing_mode DEVELOPMENT
Test: atest WorkProfilePolicyTest
Bug: 330329080
Change-Id: I6d6dea8e49fac301f0355ae9777c5b1b66281e73
parent 8f0e54c7
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.screenshot.policy

import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
import android.app.WindowConfiguration.WINDOWING_MODE_PINNED
import android.os.UserHandle
import com.android.systemui.screenshot.data.model.DisplayContentModel
@@ -24,6 +25,7 @@ import com.android.systemui.screenshot.data.repository.ProfileTypeRepository
import com.android.systemui.screenshot.policy.CapturePolicy.PolicyResult
import com.android.systemui.screenshot.policy.CapturePolicy.PolicyResult.NotMatched
import com.android.systemui.screenshot.policy.CaptureType.IsolatedTask
import com.android.window.flags.Flags
import javax.inject.Inject
import kotlinx.coroutines.flow.first

@@ -44,6 +46,14 @@ constructor(
            return NotMatched(policy = NAME, reason = SHADE_EXPANDED)
        }

        if (Flags.enableDesktopWindowingMode()) {
            content.rootTasks.firstOrNull()?.also {
                if (it.windowingMode == WINDOWING_MODE_FREEFORM) {
                    return NotMatched(policy = NAME, reason = DESKTOP_MODE_ENABLED)
                }
            }
        }

        // Find the first non PiP rootTask with a top child task owned by a work user
        val (rootTask, childTask) =
            content.rootTasks
@@ -75,5 +85,8 @@ constructor(
        const val WORK_TASK_NOT_TOP =
            "The top-most non-PINNED task does not belong to a work profile user"
        const val WORK_TASK_IS_TOP = "The top-most non-PINNED task belongs to a work profile user"
        const val DESKTOP_MODE_ENABLED =
            "enable_desktop_windowing_mode is enabled and top " +
                "RootTask has WINDOWING_MODE_FREEFORM"
    }
}
+30 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package com.android.systemui.screenshot.policy

import android.content.ComponentName
import android.os.UserHandle
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.screenshot.data.model.DisplayContentScenarios.ActivityNames.FILES
import com.android.systemui.screenshot.data.model.DisplayContentScenarios.ActivityNames.YOUTUBE
@@ -35,14 +38,19 @@ import com.android.systemui.screenshot.policy.CapturePolicy.PolicyResult.NotMatc
import com.android.systemui.screenshot.policy.CaptureType.IsolatedTask
import com.android.systemui.screenshot.policy.TestUserIds.PERSONAL
import com.android.systemui.screenshot.policy.TestUserIds.WORK
import com.android.systemui.screenshot.policy.WorkProfilePolicy.Companion.DESKTOP_MODE_ENABLED
import com.android.systemui.screenshot.policy.WorkProfilePolicy.Companion.SHADE_EXPANDED
import com.android.systemui.screenshot.policy.WorkProfilePolicy.Companion.WORK_TASK_IS_TOP
import com.android.systemui.screenshot.policy.WorkProfilePolicy.Companion.WORK_TASK_NOT_TOP
import com.android.window.flags.Flags
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test

class WorkProfilePolicyTest {
    @JvmField @Rule val setFlagsRule = SetFlagsRule()

    private val kosmos = Kosmos()
    private val policy = WorkProfilePolicy(kosmos.profileTypeRepository)

@@ -170,6 +178,7 @@ class WorkProfilePolicyTest {
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    fun withWorkFocusedInFreeForm_matched() = runTest {
        val result =
            policy.check(
@@ -193,4 +202,25 @@ class WorkProfilePolicyTest {
                )
            )
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    fun withWorkFocusedInFreeForm_desktopModeEnabled_notMatched() = runTest {
        val result =
            policy.check(
                freeFormApps(
                    TaskSpec(taskId = 1002, name = YOUTUBE, userId = PERSONAL),
                    TaskSpec(taskId = 1003, name = FILES, userId = WORK),
                    focusedTaskId = 1003
                )
            )

        assertThat(result)
            .isEqualTo(
                NotMatched(
                    WorkProfilePolicy.NAME,
                    DESKTOP_MODE_ENABLED,
                )
            )
    }
}