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

Commit 5c134240 authored by Liran Binyamin's avatar Liran Binyamin Committed by Android (Google) Code Review
Browse files

Merge changes Iece811e5,I360dd023 into main

* changes:
  Track bubble app sessions
  Wire BubbleSessionTracker
parents a450e642 55445a4b
Loading
Loading
Loading
Loading
+48 −18
Original line number Diff line number Diff line
@@ -33,12 +33,15 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.internal.logging.InstanceIdSequence
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.internal.protolog.ProtoLog
import com.android.internal.statusbar.IStatusBarService
import com.android.wm.shell.Flags
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.bubbles.Bubbles.SysuiProxy
import com.android.wm.shell.bubbles.logging.BubbleSessionTracker
import com.android.wm.shell.bubbles.logging.BubbleSessionTrackerImpl
import com.android.wm.shell.bubbles.storage.BubblePersistentRepository
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayImeController
@@ -94,6 +97,7 @@ class BubbleControllerBubbleBarTest {
    private lateinit var bubbleData: BubbleData
    private lateinit var mainExecutor: TestShellExecutor
    private lateinit var bgExecutor: TestShellExecutor
    private lateinit var sessionTracker: BubbleSessionTracker

    @Before
    fun setUp() {
@@ -106,6 +110,9 @@ class BubbleControllerBubbleBarTest {
        uiEventLoggerFake = UiEventLoggerFake()
        val bubbleLogger = BubbleLogger(uiEventLoggerFake)

        val instanceIdSequence = InstanceIdSequence(/* instanceIdMax= */ 10)
        sessionTracker = BubbleSessionTrackerImpl(instanceIdSequence, bubbleLogger)

        val deviceConfig =
            DeviceConfig(
                windowBounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
@@ -264,11 +271,15 @@ class BubbleControllerBubbleBarTest {
        }
        // Log bubble dismissed via drag and there's a switch event
        assertThat(bubbleData.selectedBubbleKey).isEqualTo("key1")
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(2)
        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE.id)
        assertThat(uiEventLoggerFake.eventId(1))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED.id)
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(4)
        assertThat(uiEventLoggerFake.logs.map { it.eventId })
            .containsExactly(
                BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE.id,
                BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_SWITCHED_FROM.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_SWITCHED_TO.id
            )
            .inOrder()
    }

    @Test
@@ -343,28 +354,41 @@ class BubbleControllerBubbleBarTest {

        expandAndSelectBubble("key")

        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1)
        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_EXPANDED.id)
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(2)
        assertThat(uiEventLoggerFake.logs.map { it.eventId })
            .containsExactly(
                BubbleLogger.Event.BUBBLE_BAR_EXPANDED.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_STARTED.id
            )
            .inOrder()
        uiEventLoggerFake.logs.clear()

        getInstrumentation().runOnMainSync {
            bubbleController.collapseStack()
        }

        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1)
        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_COLLAPSED.id)
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(2)
        assertThat(uiEventLoggerFake.logs.map { it.eventId })
            .containsExactly(
                BubbleLogger.Event.BUBBLE_BAR_COLLAPSED.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_ENDED.id
            )
            .inOrder()
    }

    @Test
    fun testEventLogging_bubbleBar_autoExpandingBubble() {
        addBubble("key", autoExpand = true)

        // 2 events: add bubble + expand
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(2)
        assertThat(uiEventLoggerFake.eventId(1))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_EXPANDED.id)
        // 3 events: add bubble + expand + session started
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(3)
        assertThat(uiEventLoggerFake.logs.map { it.eventId })
            .containsExactly(
                BubbleLogger.Event.BUBBLE_BAR_BUBBLE_POSTED.id,
                BubbleLogger.Event.BUBBLE_BAR_EXPANDED.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_STARTED.id
            )
            .inOrder()
    }

    @Test
@@ -378,9 +402,14 @@ class BubbleControllerBubbleBarTest {
        // Select the next bubble
        expandAndSelectBubble("key1")

        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1)
        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED.id)
        assertThat(uiEventLoggerFake.numLogs()).isEqualTo(3)
        assertThat(uiEventLoggerFake.logs.map { it.eventId })
            .containsExactly(
                BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_SWITCHED_FROM.id,
                BubbleLogger.Event.BUBBLE_BAR_SESSION_SWITCHED_TO.id
            )
            .inOrder()
    }

    @Test
@@ -544,6 +573,7 @@ class BubbleControllerBubbleBarTest {
            { Optional.empty() },
            Optional.empty(),
            { false },
            sessionTracker,
        )
    }

+7 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import androidx.core.content.getSystemService
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.internal.logging.InstanceIdSequence
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.internal.protolog.ProtoLog
import com.android.internal.statusbar.IStatusBarService
@@ -61,6 +62,8 @@ import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.bubbles.Bubbles.BubbleExpandListener
import com.android.wm.shell.bubbles.Bubbles.DISMISS_USER_GESTURE
import com.android.wm.shell.bubbles.Bubbles.SysuiProxy
import com.android.wm.shell.bubbles.logging.BubbleSessionTracker
import com.android.wm.shell.bubbles.logging.BubbleSessionTrackerImpl
import com.android.wm.shell.bubbles.storage.BubblePersistentRepository
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayImeController
@@ -148,6 +151,7 @@ class BubbleControllerTest(flags: FlagsParameterization) {
    private lateinit var displayController: DisplayController
    private lateinit var imeListener: ImeListener
    private lateinit var bubbleTransitions: BubbleTransitions
    private lateinit var sessionTracker: BubbleSessionTracker

    private var isStayAwakeOnFold = false

@@ -172,6 +176,8 @@ class BubbleControllerTest(flags: FlagsParameterization) {
        ProtoLog.init()

        bubbleLogger = BubbleLogger(uiEventLoggerFake)
        val instanceIdSequence = InstanceIdSequence(/* instanceIdMax= */ 10)
        sessionTracker = BubbleSessionTrackerImpl(instanceIdSequence, bubbleLogger)
        eduController = BubbleEducationController(context)

        mainExecutor = TestShellExecutor()
@@ -993,6 +999,7 @@ class BubbleControllerTest(flags: FlagsParameterization) {
                { Optional.of(splitScreenController) },
                Optional.of(unfoldProgressProvider),
                { isStayAwakeOnFold },
                sessionTracker,
            )
        bubbleController.setInflateSynchronously(true)
        bubbleController.onInit()
+86 −10
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.android.internal.logging.InstanceIdSequence
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.internal.protolog.ProtoLog
import com.android.launcher3.icons.BubbleIconFactory
@@ -43,6 +44,8 @@ import com.android.wm.shell.bubbles.BubbleStackView.SurfaceSynchronizer
import com.android.wm.shell.bubbles.Bubbles.BubbleExpandListener
import com.android.wm.shell.bubbles.Bubbles.SysuiProxy
import com.android.wm.shell.bubbles.animation.AnimatableScaleMatrix
import com.android.wm.shell.bubbles.logging.BubbleSessionTracker
import com.android.wm.shell.bubbles.logging.BubbleSessionTrackerImpl
import com.android.wm.shell.common.FloatingContentCoordinator
import com.android.wm.shell.common.TestShellExecutor
import com.android.wm.shell.shared.animation.PhysicsAnimatorTestUtils
@@ -72,6 +75,7 @@ class BubbleStackViewTest {
    @get:Rule val animatorTestRule: AnimatorTestRule = AnimatorTestRule(this)

    private val context = ApplicationProvider.getApplicationContext<Context>()
    private val uiEventLoggerFake = UiEventLoggerFake()
    private lateinit var positioner: BubblePositioner
    private lateinit var bubbleLogger: BubbleLogger
    private lateinit var iconFactory: BubbleIconFactory
@@ -83,7 +87,8 @@ class BubbleStackViewTest {
    private lateinit var bubbleData: BubbleData
    private lateinit var bubbleStackViewManager: FakeBubbleStackViewManager
    private lateinit var surfaceSynchronizer: FakeSurfaceSynchronizer
    private var sysuiProxy = mock<SysuiProxy>()
    private lateinit var sessionTracker: BubbleSessionTracker
    private val sysuiProxy = mock<SysuiProxy>()

    @Before
    fun setUp() {
@@ -91,7 +96,7 @@ class BubbleStackViewTest {
        // Disable protolog tool when running the tests from studio
        ProtoLog.REQUIRE_PROTOLOGTOOL = false
        shellExecutor = TestShellExecutor()
        windowManager = context.getSystemService(WindowManager::class.java)
        windowManager = context.getSystemService(WindowManager::class.java)!!
        iconFactory =
            BubbleIconFactory(
                context,
@@ -103,7 +108,9 @@ class BubbleStackViewTest {
                )
            )
        positioner = BubblePositioner(context, windowManager)
        bubbleLogger = BubbleLogger(UiEventLoggerFake())
        bubbleLogger = BubbleLogger(uiEventLoggerFake)
        val instanceIdSequence = InstanceIdSequence(/* instanceIdMax= */ 10)
        sessionTracker = BubbleSessionTrackerImpl(instanceIdSequence, bubbleLogger)
        bubbleData =
            BubbleData(
                context,
@@ -126,7 +133,8 @@ class BubbleStackViewTest {
                surfaceSynchronizer,
                FloatingContentCoordinator(),
                { sysuiProxy },
                shellExecutor
                shellExecutor,
                sessionTracker,
            )

        context
@@ -191,6 +199,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -214,6 +223,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -247,6 +257,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -277,6 +288,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -305,6 +317,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -353,6 +366,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -398,6 +412,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -427,6 +442,7 @@ class BubbleStackViewTest {

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
        }

        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -682,7 +698,8 @@ class BubbleStackViewTest {
                        null,
                        FloatingContentCoordinator(),
                        { sysuiProxy },
                        shellExecutor
                        shellExecutor,
                        sessionTracker,
                )

        assertThat(bubbleData.overflowBubbles).isEmpty()
@@ -709,7 +726,8 @@ class BubbleStackViewTest {
                        null,
                        FloatingContentCoordinator(),
                        { sysuiProxy },
                        shellExecutor
                        shellExecutor,
                        sessionTracker,
                )
        val bubbleOverflow = bubbleData.overflow
        assertThat(bubbleStackView.getBubbleIndex(bubbleOverflow)).isGreaterThan(-1)
@@ -728,7 +746,8 @@ class BubbleStackViewTest {
                            null,
                            FloatingContentCoordinator(),
                            { sysuiProxy },
                            shellExecutor
                            shellExecutor,
                            sessionTracker,
                    )
        }
        assertThat(bubbleData.overflowBubbles).isEmpty()
@@ -1020,7 +1039,8 @@ class BubbleStackViewTest {
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble1)
            bubbleStackView.addBubble(bubble2)
            bubbleStackView.setExpanded(true)
            bubbleStackView.setSelectedBubble(bubble2)
            bubbleStackView.isExpanded = true
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -1061,6 +1081,7 @@ class BubbleStackViewTest {
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble1)
            bubbleStackView.addBubble(bubble2)
            bubbleStackView.setSelectedBubble(bubble2)
            bubbleStackView.setExpanded(true)
            shellExecutor.flushAll()
        }
@@ -1099,7 +1120,8 @@ class BubbleStackViewTest {
        val bubble = createAndInflateBubble()
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setExpanded(true)
            bubbleStackView.setSelectedBubble(bubble)
            bubbleStackView.isExpanded = true
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -1134,7 +1156,8 @@ class BubbleStackViewTest {
        val bubble = createAndInflateBubble()
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setExpanded(true)
            bubbleStackView.setSelectedBubble(bubble)
            bubbleStackView.isExpanded = true
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -1155,6 +1178,9 @@ class BubbleStackViewTest {
            // Add the same bubble back
            bubbleData.notificationEntryUpdated(bubble, false, true)
            bubbleStackView.addBubble(bubble)
            bubbleStackView.setSelectedBubble(bubble)
            // let the scrim animation finish
            animatorTestRule.advanceTimeBy(300)
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
@@ -1170,6 +1196,56 @@ class BubbleStackViewTest {
        assertThat(bubbleStackView.bubbleCount).isEqualTo(1)
    }

    @Test
    fun sessionEventsLogged() {
        val bubble1 = createAndInflateChatBubble("key1")
        val bubble2 = createAndInflateChatBubble("key2")
        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.addBubble(bubble1)
            bubbleStackView.addBubble(bubble2)
            bubbleStackView.setSelectedBubble(bubble2)
            bubbleStackView.isExpanded = true
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()

        val sessionStartEvent = uiEventLoggerFake.logs.single {
            it.eventId == BubbleLogger.Event.BUBBLE_SESSION_STARTED.id
        }

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.setSelectedBubble(bubble1)
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()

        val sessionSwitchedFromEvent = uiEventLoggerFake.logs.single {
            it.eventId == BubbleLogger.Event.BUBBLE_SESSION_SWITCHED_FROM.id
        }
        val sessionSwitchedToEvent = uiEventLoggerFake.logs.single {
            it.eventId == BubbleLogger.Event.BUBBLE_SESSION_SWITCHED_TO.id
        }

        InstrumentationRegistry.getInstrumentation().runOnMainSync {
            bubbleStackView.isExpanded = false
            shellExecutor.flushAll()
        }
        InstrumentationRegistry.getInstrumentation().waitForIdleSync()

        val sessionEndEvent = uiEventLoggerFake.logs.single {
            it.eventId == BubbleLogger.Event.BUBBLE_SESSION_ENDED.id
        }

        val sessionInstanceIds =
            setOf(
                sessionStartEvent.instanceId,
                sessionSwitchedFromEvent.instanceId,
                sessionSwitchedToEvent.instanceId,
                sessionEndEvent.instanceId
            )
        assertThat(sessionInstanceIds).hasSize(1)
    }

    private fun createAndInflateChatBubble(key: String): Bubble {
        val icon = Icon.createWithResource(context.resources, R.drawable.bubble_ic_overflow_button)
        val shortcutInfo = ShortcutInfo.Builder(context, "fakeId").setIcon(icon).build()
+7 −0
Original line number Diff line number Diff line
@@ -30,11 +30,14 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.R
import com.android.internal.logging.InstanceIdSequence
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.internal.protolog.ProtoLog
import com.android.internal.statusbar.IStatusBarService
import com.android.launcher3.icons.BubbleIconFactory
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.bubbles.logging.BubbleSessionTracker
import com.android.wm.shell.bubbles.logging.BubbleSessionTrackerImpl
import com.android.wm.shell.bubbles.storage.BubblePersistentRepository
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayImeController
@@ -78,6 +81,7 @@ class BubbleViewInfoTaskTest {
    private lateinit var bubbleLogger: BubbleLogger
    private lateinit var expandedViewManager: BubbleExpandedViewManager
    private lateinit var appInfoProvider: FakeBubbleAppInfoProvider
    private lateinit var sessionTracker: BubbleSessionTracker

    private val bubbleTaskViewFactory = BubbleTaskViewFactory {
        BubbleTaskView(mock<TaskView>(), directExecutor())
@@ -112,6 +116,8 @@ class BubbleViewInfoTaskTest {
            )
        bubblePositioner = BubblePositioner(context, windowManager)
        bubbleLogger = BubbleLogger(UiEventLoggerFake())
        val instanceIdSequence = InstanceIdSequence(/* instanceIdMax= */ 10)
        sessionTracker = BubbleSessionTrackerImpl(instanceIdSequence, bubbleLogger)
        val bubbleData =
            BubbleData(
                context,
@@ -171,6 +177,7 @@ class BubbleViewInfoTaskTest {
                { Optional.empty() },
                Optional.empty(),
                { false },
                sessionTracker,
            )

        // TODO: (b/371829099) - when optional overflow is no longer flagged we can enable this
+8 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.internal.logging.InstanceIdSequence
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.internal.protolog.ProtoLog
import com.android.internal.statusbar.IStatusBarService
@@ -56,6 +57,8 @@ import com.android.wm.shell.bubbles.FakeBubbleFactory
import com.android.wm.shell.bubbles.FakeBubbleTaskViewFactory
import com.android.wm.shell.bubbles.UiEventSubject.Companion.assertThat
import com.android.wm.shell.bubbles.animation.AnimatableScaleMatrix
import com.android.wm.shell.bubbles.logging.BubbleSessionTracker
import com.android.wm.shell.bubbles.logging.BubbleSessionTrackerImpl
import com.android.wm.shell.bubbles.storage.BubblePersistentRepository
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayImeController
@@ -113,6 +116,7 @@ class BubbleBarLayerViewTest {
    private lateinit var bubbleLogger: BubbleLogger
    private lateinit var testBubblesList: MutableList<Bubble>
    private lateinit var dragZoneFactory: DragZoneFactory
    private lateinit var sessionTracker: BubbleSessionTracker

    @Before
    fun setUp() {
@@ -123,6 +127,9 @@ class BubbleBarLayerViewTest {
        uiEventLoggerFake = UiEventLoggerFake()
        bubbleLogger = BubbleLogger(uiEventLoggerFake)

        val instanceIdSequence = InstanceIdSequence(/* instanceIdMax= */ 10)
        sessionTracker = BubbleSessionTrackerImpl(instanceIdSequence, bubbleLogger)

        mainExecutor = TestShellExecutor()
        bgExecutor = TestShellExecutor()

@@ -249,6 +256,7 @@ class BubbleBarLayerViewTest {
            { Optional.empty() },
            Optional.empty(),
            { false },
            sessionTracker,
        )
    }

Loading