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

Commit df0c5d49 authored by Sergey Pinkevich's avatar Sergey Pinkevich
Browse files

Update stylus shortcut condition

Bug: 325545460
Flag: NONE Change the existing functionality, no new functionality is introduced
Test: packages/SystemUI/tests/src/com/android/systemui/notetask/quickaffordance/NoteTaskQuickAffordanceConfigTest.kt

Change-Id: I29f3325824dcea24930ec7b9716d4b697678e4dd
parent 6affc109
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -96,12 +96,27 @@ constructor(
                logDebug { "lockScreenState:isConfigSelected=$isConfigSelected" }
                logDebug { "lockScreenState:isDefaultNotesAppSet=$isDefaultNotesAppSet" }

                val isCustomLockScreenShortcutEnabled =
                    context.resources.getBoolean(R.bool.custom_lockscreen_shortcuts_enabled)
                val isShortcutSelectedOrDefaultEnabled =
                    if (isCustomLockScreenShortcutEnabled) {
                        isConfigSelected
                    } else {
                        isStylusEverUsed
                    }
                logDebug {
                    "lockScreenState:isCustomLockScreenShortcutEnabled=" +
                        isCustomLockScreenShortcutEnabled
                }
                logDebug {
                    "lockScreenState:isShortcutSelectedOrDefaultEnabled=" +
                        isShortcutSelectedOrDefaultEnabled
                }
                if (
                    isEnabled &&
                        isUserUnlocked &&
                        isDefaultNotesAppSet &&
                        isConfigSelected &&
                        isStylusEverUsed
                        isShortcutSelectedOrDefaultEnabled
                ) {
                    val contentDescription = ContentDescription.Resource(pickerNameResourceId)
                    val icon = Icon.Resource(pickerIconResourceId, contentDescription)
+220 −71
Original line number Diff line number Diff line
@@ -57,7 +57,9 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.anyString
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoSession
import org.mockito.quality.Strictness

@@ -75,6 +77,9 @@ internal class NoteTaskQuickAffordanceConfigTest : SysuiTestCase() {

    private lateinit var mockitoSession: MockitoSession

    private val spiedContext = spy(context)
    private val spiedResources = spy(spiedContext.resources)

    @Before
    fun setUp() {
        mockitoSession =
@@ -100,6 +105,8 @@ internal class NoteTaskQuickAffordanceConfigTest : SysuiTestCase() {
                )
            )
            .thenReturn(listOf("com.google.test.notes"))

        `when`(spiedContext.resources).thenReturn(spiedResources)
    }

    @After
@@ -109,7 +116,7 @@ internal class NoteTaskQuickAffordanceConfigTest : SysuiTestCase() {

    private fun createUnderTest(isEnabled: Boolean = true): KeyguardQuickAffordanceConfig =
        NoteTaskQuickAffordanceConfig(
            context = context,
            context = spiedContext,
            controller = controller,
            stylusManager = stylusManager,
            userManager = userManager,
@@ -132,126 +139,262 @@ internal class NoteTaskQuickAffordanceConfigTest : SysuiTestCase() {
        )

    // region lockScreenState
    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_isSelected_shouldEmitVisible() = runTest {
    fun lockScreenState_stylusUnused_userLocked_customizationDisabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
        TestConfig().setStylusEverUsed(true).setUserUnlocked(true).setConfigSelections(underTest)
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

        assertThat(actual).isEqualTo(createLockScreenStateVisible())
            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_isSelected_noDefaultNotesAppSet_shouldEmitHidden() =
    fun lockScreenState_stylusUnused_userLocked_customizationDisabled_notesLockScreenShortcutSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(true)
                .setStylusEverUsed(false)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections(underTest)
            whenever(
                    roleManager.getRoleHoldersAsUser(
                        eq(RoleManager.ROLE_NOTES),
                        any(UserHandle::class.java)
                    )
                )
                .thenReturn(emptyList())

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUnused_userUnlocked_isSelected_shouldEmitHidden() = runTest {
    fun lockScreenState_stylusUnused_userLocked_customizationEnabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
        TestConfig().setStylusEverUsed(false).setUserUnlocked(true).setConfigSelections(underTest)
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userLocked_isSelected_shouldEmitHidden() = runTest {
    fun lockScreenState_stylusUnused_userLocked_customizationEnabled_notesLockScreenShortcutSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
        TestConfig().setStylusEverUsed(true).setUserUnlocked(false).setConfigSelections(underTest)
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_noSelected_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(true).setUserUnlocked(true).setConfigSelections()

    fun lockScreenState_stylusUnused_userUnlocked_customizationDisabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUnused_userUnlocked_noSelected_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(false).setUserUnlocked(true).setConfigSelections()
    fun lockScreenState_stylusUnused_userUnlocked_customizationDisabled_notesLockScreenShortcutSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUnused_userUnlocked_customizationEnabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userLocked_noSelected_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(true).setUserUnlocked(false).setConfigSelections()
    fun lockScreenState_stylusUnused_userUnlocked_customizationEnabled_notesLockScreenShortcutSelected_shouldEmitVisible() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(false)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(createLockScreenStateVisible())
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userLocked_customizationDisabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_customSelections_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(true).setUserUnlocked(true).setConfigSelections(mock())

    fun lockScreenState_stylusUsed_userLocked_customizationDisabled_notesLockScreenShortcutSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUnused_userUnlocked_customSelections_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(false).setUserUnlocked(true).setConfigSelections(mock())
    fun lockScreenState_stylusUsed_userLocked_customizationEnabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userLocked_customizationEnabled_notesLockScreenShortcutSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(false)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userLocked_customSelections_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(true).setUserUnlocked(false).setConfigSelections(mock())
    fun lockScreenState_stylusUsed_userUnlocked_customizationDisabled_notesLockScreenShortcutNotSelected_shouldEmitVisible() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections()

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(createLockScreenStateVisible())
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_customizationDisabled_notesLockScreenShortcutSelected_shouldEmitVisible() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(false)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

        assertThat(actual).isEqualTo(LockScreenState.Hidden)
            assertThat(actual).isEqualTo(createLockScreenStateVisible())
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_isNotEnabled_shouldEmitHidden() = runTest {
        TestConfig().setStylusEverUsed(true).setUserUnlocked(true).setConfigSelections()
    fun lockScreenState_stylusUsed_userUnlocked_customizationEnabled_notesLockScreenShortcutNotSelected_shouldEmitHidden() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections()

        val underTest = createUnderTest(isEnabled = false)
            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(LockScreenState.Hidden)
        }

    @Suppress("ktlint:standard:max-line-length")
    @Test
    fun lockScreenState_stylusUsed_userUnlocked_customizationEnabled_notesLockScreenShortcutSelected_shouldEmitVisible() =
        runTest {
            val underTest = createUnderTest()
            TestConfig()
                .setStylusEverUsed(true)
                .setUserUnlocked(true)
                .setLockScreenCustomizationEnabled(true)
                .setConfigSelections(underTest)

            val actual by collectLastValue(underTest.lockScreenState)

            assertThat(actual).isEqualTo(createLockScreenStateVisible())
        }

    // endregion

    @Test
@@ -294,18 +437,24 @@ internal class NoteTaskQuickAffordanceConfigTest : SysuiTestCase() {
            .isEqualTo(ACTION_MANAGE_NOTES_ROLE_FROM_QUICK_AFFORDANCE)
        assertThat(disabled.actionIntent?.`package`).isEqualTo(context.packageName)
    }

    // endregion

    private inner class TestConfig {

        fun setStylusEverUsed(value: Boolean) = also {
            whenever(InputSettings.isStylusEverUsed(mContext)).thenReturn(value)
            whenever(InputSettings.isStylusEverUsed(spiedContext)).thenReturn(value)
        }

        fun setUserUnlocked(value: Boolean) = also {
            whenever(userManager.isUserUnlocked).thenReturn(value)
        }

        fun setLockScreenCustomizationEnabled(value: Boolean) = also {
            `when`(spiedResources.getBoolean(R.bool.custom_lockscreen_shortcuts_enabled))
                .thenReturn(value)
        }

        fun setConfigSelections(vararg values: KeyguardQuickAffordanceConfig) = also {
            val slotKey = "bottom-right"
            val configSnapshots = values.toList()