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

Commit c1a39ae2 authored by Hawkwood Glazier's avatar Hawkwood Glazier Committed by Android (Google) Code Review
Browse files

Merge "Revert "Prevent default blueprint changes from triggering refreshes"" into main

parents 4058c394 8f8f6a41
Loading
Loading
Loading
Loading
+25 −5
Original line number Diff line number Diff line
@@ -59,6 +59,20 @@ constructor(
    val refreshTransition = MutableSharedFlow<Config>(extraBufferCapacity = 1)
    private var targetTransitionConfig: Config? = null

    /**
     * Emits the blueprint value to the collectors.
     *
     * @param blueprintId
     * @return whether the transition has succeeded.
     */
    fun applyBlueprint(index: Int): Boolean {
        ArrayList(blueprintIdMap.values)[index]?.let {
            applyBlueprint(it)
            return true
        }
        return false
    }

    /**
     * Emits the blueprint value to the collectors.
     *
@@ -67,21 +81,27 @@ constructor(
     */
    fun applyBlueprint(blueprintId: String?): Boolean {
        val blueprint = blueprintIdMap[blueprintId]
        if (blueprint == null) {
        return if (blueprint != null) {
            applyBlueprint(blueprint)
            true
        } else {
            Log.e(
                TAG,
                "Could not find blueprint with id: $blueprintId. " +
                    "Perhaps it was not added to KeyguardBlueprintModule?"
            )
            return false
            false
        }
    }

    /** Emits the blueprint value to the collectors. */
    fun applyBlueprint(blueprint: KeyguardBlueprint?) {
        if (blueprint == this.blueprint.value) {
            return true
            refreshBlueprint()
            return
        }

        this.blueprint.value = blueprint
        return true
        blueprint?.let { this.blueprint.value = it }
    }

    /**
+3 −8
Original line number Diff line number Diff line
@@ -82,17 +82,12 @@ constructor(
    }

    /**
     * Transitions to a blueprint, or refreshes it if already applied.
     * Transitions to a blueprint.
     *
     * @param blueprintId
     * @return whether the transition has succeeded.
     */
    fun transitionOrRefreshBlueprint(blueprintId: String): Boolean {
        if (blueprintId == blueprint.value.id) {
            refreshBlueprint()
            return true
        }

    fun transitionToBlueprint(blueprintId: String): Boolean {
        return keyguardBlueprintRepository.applyBlueprint(blueprintId)
    }

@@ -102,7 +97,7 @@ constructor(
     * @param blueprintId
     * @return whether the transition has succeeded.
     */
    fun transitionToBlueprint(blueprintId: String): Boolean {
    fun transitionToBlueprint(blueprintId: Int): Boolean {
        return keyguardBlueprintRepository.applyBlueprint(blueprintId)
    }

+9 −8
Original line number Diff line number Diff line
@@ -46,16 +46,17 @@ constructor(
                return
            }

            when {
                arg.isDigitsOnly() -> pw.println("Invalid argument! Use string ids.")
                keyguardBlueprintInteractor.transitionOrRefreshBlueprint(arg) ->
            if (
                arg.isDigitsOnly() && keyguardBlueprintInteractor.transitionToBlueprint(arg.toInt())
            ) {
                pw.println("Transition succeeded!")
            } else if (keyguardBlueprintInteractor.transitionToBlueprint(arg)) {
                pw.println("Transition succeeded!")
                else -> {
            } else {
                pw.println("Invalid argument! To see available blueprint ids, run:")
                pw.println("$ adb shell cmd statusbar blueprint help")
            }
        }
        }

        override fun help(pw: PrintWriter) {
            pw.println("Usage: $ adb shell cmd statusbar blueprint <blueprintId>")
+36 −22
Original line number Diff line number Diff line
@@ -19,20 +19,24 @@

package com.android.systemui.keyguard.data.repository

import android.os.fakeExecutorHandler
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.ConfigurationRepository
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint.Companion.DEFAULT
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.android.systemui.util.ThreadAssert
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -46,32 +50,31 @@ import org.mockito.MockitoAnnotations
class KeyguardBlueprintRepositoryTest : SysuiTestCase() {
    private lateinit var underTest: KeyguardBlueprintRepository
    @Mock lateinit var configurationRepository: ConfigurationRepository
    @Mock lateinit var defaultLockscreenBlueprint: DefaultKeyguardBlueprint
    @Mock lateinit var threadAssert: ThreadAssert

    private val testScope = TestScope(StandardTestDispatcher())
    private val kosmos: Kosmos = testKosmos()

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        underTest = kosmos.keyguardBlueprintRepository
    }

    @Test
    fun testApplyBlueprint_DefaultLayout() {
        testScope.runTest {
            val blueprint by collectLastValue(underTest.blueprint)
            underTest.applyBlueprint(DefaultKeyguardBlueprint.DEFAULT)
            assertThat(blueprint).isEqualTo(kosmos.defaultKeyguardBlueprint)
        with(kosmos) {
            whenever(defaultLockscreenBlueprint.id).thenReturn(DEFAULT)
            underTest =
                KeyguardBlueprintRepository(
                    setOf(defaultLockscreenBlueprint),
                    fakeExecutorHandler,
                    threadAssert,
                )
        }
    }

    @Test
    fun testApplyBlueprint_SplitShadeLayout() {
    fun testApplyBlueprint_DefaultLayout() {
        testScope.runTest {
            val blueprint by collectLastValue(underTest.blueprint)
            underTest.applyBlueprint(SplitShadeKeyguardBlueprint.ID)
            assertThat(blueprint).isEqualTo(kosmos.splitShadeBlueprint)
            underTest.applyBlueprint(defaultLockscreenBlueprint)
            assertThat(blueprint).isEqualTo(defaultLockscreenBlueprint)
        }
    }

@@ -80,22 +83,33 @@ class KeyguardBlueprintRepositoryTest : SysuiTestCase() {
        testScope.runTest {
            val blueprint by collectLastValue(underTest.blueprint)
            underTest.refreshBlueprint()
            assertThat(blueprint).isEqualTo(kosmos.defaultKeyguardBlueprint)
            assertThat(blueprint).isEqualTo(defaultLockscreenBlueprint)
        }
    }

    @Test
    fun testTransitionToDefaultLayout_validId() {
        assertThat(underTest.applyBlueprint(DefaultKeyguardBlueprint.DEFAULT)).isTrue()
    fun testTransitionToLayout_validId() {
        assertThat(underTest.applyBlueprint(DEFAULT)).isTrue()
    }

    @Test
    fun testTransitionToSplitShadeLayout_validId() {
        assertThat(underTest.applyBlueprint(SplitShadeKeyguardBlueprint.ID)).isTrue()
    fun testTransitionToLayout_invalidId() {
        assertThat(underTest.applyBlueprint("abc")).isFalse()
    }

    @Test
    fun testTransitionToLayout_invalidId() {
        assertThat(underTest.applyBlueprint("abc")).isFalse()
    fun testTransitionToSameBlueprint_refreshesBlueprint() =
        with(kosmos) {
            testScope.runTest {
                val transition by collectLastValue(underTest.refreshTransition)
                fakeExecutor.runAllReady()
                runCurrent()

                underTest.applyBlueprint(defaultLockscreenBlueprint)
                fakeExecutor.runAllReady()
                runCurrent()

                assertThat(transition).isNotNull()
            }
        }
}
+9 −3
Original line number Diff line number Diff line
@@ -66,19 +66,25 @@ class KeyguardBlueprintCommandListenerTest : SysuiTestCase() {
    fun testHelp() {
        command().execute(pw, listOf("help"))
        verify(pw, atLeastOnce()).println(anyString())
        verify(keyguardBlueprintInteractor, never()).transitionOrRefreshBlueprint(anyString())
        verify(keyguardBlueprintInteractor, never()).transitionToBlueprint(anyString())
    }

    @Test
    fun testBlank() {
        command().execute(pw, listOf())
        verify(pw, atLeastOnce()).println(anyString())
        verify(keyguardBlueprintInteractor, never()).transitionOrRefreshBlueprint(anyString())
        verify(keyguardBlueprintInteractor, never()).transitionToBlueprint(anyString())
    }

    @Test
    fun testValidArg() {
        command().execute(pw, listOf("fake"))
        verify(keyguardBlueprintInteractor).transitionOrRefreshBlueprint("fake")
        verify(keyguardBlueprintInteractor).transitionToBlueprint("fake")
    }

    @Test
    fun testValidArg_Int() {
        command().execute(pw, listOf("1"))
        verify(keyguardBlueprintInteractor).transitionToBlueprint(1)
    }
}