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

Commit 363e8453 authored by Darrell Shi's avatar Darrell Shi
Browse files

Create smartspace session when precondition is met

This change makes sure a smartspace session is created when precondition
is met if when any listener is added the precondition was not ready.

Test: atest CommunalSmartspaceControllerTest
Fix: 359092303
Flag: com.android.systemui.communal_hub
Change-Id: I8833ba6f05418f053228774772909f0bfca034e7
parent ab7548ec
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.graphics.drawable.Drawable
import android.os.Handler
import android.testing.TestableLooper
import android.view.View
import android.widget.FrameLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -46,6 +45,8 @@ import org.mockito.Mockito
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.never

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -67,12 +68,9 @@ class CommunalSmartspaceControllerTest : SysuiTestCase() {

    @Mock private lateinit var session: SmartspaceSession

    private lateinit var controller: CommunalSmartspaceController
    private val preconditionListenerCaptor = argumentCaptor<SmartspacePrecondition.Listener>()

    // TODO(b/272811280): Remove usage of real view
    private val fakeParent by lazy {
        FrameLayout(context)
    }
    private lateinit var controller: CommunalSmartspaceController

    /**
     * A class which implements SmartspaceView and extends View. This is mocked to provide the right
@@ -155,6 +153,26 @@ class CommunalSmartspaceControllerTest : SysuiTestCase() {
        verify(session).close()
    }

    /** Ensures smartspace session begins when precondition is met if there is any listener. */
    @Test
    fun testConnectOnPreconditionMet() {
        // Precondition not met
        `when`(precondition.conditionsMet()).thenReturn(false)
        controller.addListener(listener)

        // Verify session not created because precondition not met
        verify(smartspaceManager, never()).createSmartspaceSession(any())

        // Precondition met
        `when`(precondition.conditionsMet()).thenReturn(true)
        verify(precondition).addListener(preconditionListenerCaptor.capture())
        val preconditionListener = preconditionListenerCaptor.firstValue
        preconditionListener.onCriteriaChanged()

        // Verify session created
        verify(smartspaceManager).createSmartspaceSession(any())
    }

    /**
     * Ensures session is closed and weather plugin unregisters the notifier when weather smartspace
     * view is detached.
+6 −0
Original line number Diff line number Diff line
@@ -65,6 +65,12 @@ constructor(
    var preconditionListener =
        object : SmartspacePrecondition.Listener {
            override fun onCriteriaChanged() {
                if (session == null && hasActiveSessionListeners()) {
                    Log.d(TAG, "Precondition criteria changed. Attempting to connect session.")
                    connectSession()
                    return
                }

                reloadSmartspace()
            }
        }