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

Commit 4e60e3ed authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes Ib75f3892,I71f9dc62 into main

* changes:
  [SB][Call] Update call chip click to show notification instead of app.
  [SB][Call] Small re-organization of CallChipViewModel code
parents 9977f026 209ff099
Loading
Loading
Loading
Loading
+266 −7
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.plugins.activityStarter
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.chips.StatusBarChipsReturnAnimations
import com.android.systemui.statusbar.chips.notification.domain.interactor.statusBarNotificationChipsInteractor
import com.android.systemui.statusbar.chips.ui.model.ColorsModel
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.view.ChipBackgroundContainer
@@ -606,7 +607,9 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

    @Test
    @DisableChipsModernization
    fun chip_inCall_nullIntent_nullClickListener() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_nullIntent_chipsModFlagOff_promotedUiFlagOff_nullClickListener() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -617,7 +620,9 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

    @Test
    @DisableChipsModernization
    fun chip_inCall_positiveStartTime_validIntent_clickListenerLaunchesIntent() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_positiveStartTime_validIntent_chipsModFlagOff_promotedUiFlagOff_clickListenerLaunchesIntent() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -635,7 +640,9 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

    @Test
    @DisableChipsModernization
    fun chip_inCall_zeroStartTime_validIntent_clickListenerLaunchesIntent() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_zeroStartTime_validIntent_chipsModFlagOff_promotedUiFlagOff_clickListenerLaunchesIntent() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -652,9 +659,79 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(pendingIntent, null)
        }

    @Test
    @DisableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_nullIntent_chipsModFlagOff_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            addOngoingCallState(key = "fakeCallKey", contentIntent = null)

            val clickListener = (latest as OngoingActivityChipModel.Active).onClickListenerLegacy
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @DisableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_positiveStartTime_validIntent_chipsModFlagOff_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            val pendingIntent = mock<PendingIntent>()
            addOngoingCallState(
                key = "fakeCallKey",
                startTimeMs = 1000,
                contentIntent = pendingIntent,
            )
            val clickListener = (latest as OngoingActivityChipModel.Active).onClickListenerLegacy
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @DisableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_zeroStartTime_validIntent_chipsModFlagOff_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            val pendingIntent = mock<PendingIntent>()
            addOngoingCallState(key = "fakeCallKey", startTimeMs = 0, contentIntent = pendingIntent)
            val clickListener = (latest as OngoingActivityChipModel.Active).onClickListenerLegacy

            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @EnableChipsModernization
    fun chip_inCall_nullIntent_noneClickBehavior() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_nullIntent_chipsModFlagOn_promotedUiFlagOff_noneClickBehavior() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -666,7 +743,9 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

    @Test
    @EnableChipsModernization
    fun chip_inCall_positiveStartTime_validIntent_clickBehaviorLaunchesIntent() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_positiveStartTime_validIntent_chipsModFlagOn_promotedUiFlagOff_clickBehaviorLaunchesIntent() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -687,7 +766,9 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

    @Test
    @EnableChipsModernization
    fun chip_inCall_zeroStartTime_validIntent_clickBehaviorLaunchesIntent() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    @EnableFlags(FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_zeroStartTime_validIntent_chipsModFlagOn_promotedUiFlagOff_clickBehaviorLaunchesIntent() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

@@ -706,10 +787,90 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(pendingIntent, null)
        }

    @Test
    @EnableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_nullIntent_chipsModFlagOn_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            addOngoingCallState(key = "fakeCallKey", startTimeMs = 1000, contentIntent = null)

            val clickBehavior = (latest as OngoingActivityChipModel.Active).clickBehavior
            assertThat(clickBehavior)
                .isInstanceOf(
                    OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification::class.java
                )

            (clickBehavior as OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification)
                .onClick()

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @EnableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_positiveStartTime_validIntent_chipsModFlagOn_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            val pendingIntent = mock<PendingIntent>()
            addOngoingCallState(
                key = "fakeCallKey",
                startTimeMs = 1000,
                contentIntent = pendingIntent,
            )

            val clickBehavior = (latest as OngoingActivityChipModel.Active).clickBehavior
            assertThat(clickBehavior)
                .isInstanceOf(
                    OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification::class.java
                )
            (clickBehavior as OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification)
                .onClick()

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @EnableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME, FLAG_OPT_IN_RICH_ONGOING)
    fun chip_inCall_zeroStartTime_validIntent_chipsModFlagOn_promotedUiFlagOn_clickingChipNotifiesInteractor() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)
            val latestChipTapKey by
                collectLastValue(
                    statusBarNotificationChipsInteractor.promotedNotificationChipTapEvent
                )

            val pendingIntent = mock<PendingIntent>()
            addOngoingCallState(key = "fakeCallKey", startTimeMs = 0, contentIntent = pendingIntent)

            val clickBehavior = (latest as OngoingActivityChipModel.Active).clickBehavior
            assertThat(clickBehavior)
                .isInstanceOf(
                    OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification::class.java
                )
            (clickBehavior as OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification)
                .onClick()

            assertThat(latestChipTapKey).isEqualTo("fakeCallKey")
        }

    @Test
    @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME)
    @EnableChipsModernization
    fun chipWithReturnAnimation_updatesCorrectly_withStateAndTransitionState() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chipWithReturnAnimation_promotedUiFlagOff_updatesCorrectly_withStateAndTransitionState() =
        kosmos.runTest {
            val pendingIntent = mock<PendingIntent>()
            val intent = mock<Intent>()
@@ -789,6 +950,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
                (latest as OngoingActivityChipModel.Active).clickBehavior
                    as OngoingActivityChipModel.ClickBehavior.ExpandAction
            clickBehavior.onClick(expandable)

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat(latest!!.transitionManager!!.controllerFactory).isEqualTo(factory)
@@ -844,6 +1006,103 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat(latest!!.transitionManager!!.controllerFactory).isNull()
        }

    // When PromotedNotificationUi flag is on, then we don't have any custom launch animation, we
    // only have the return animation.
    @Test
    @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, PromotedNotificationUi.FLAG_NAME)
    @EnableChipsModernization
    fun chipWithReturnAnimation_promotedUiFlagOn_updatesCorrectly_withStateAndTransitionState() =
        kosmos.runTest {
            val pendingIntent = mock<PendingIntent>()
            val intent = mock<Intent>()
            whenever(pendingIntent.intent).thenReturn(intent)
            val component = mock<ComponentName>()
            whenever(intent.component).thenReturn(component)

            val expandable = mock<Expandable>()
            val activityController = mock<ActivityTransitionAnimator.Controller>()
            whenever(
                    expandable.activityTransitionController(
                        anyOrNull(),
                        anyOrNull(),
                        any(),
                        anyOrNull(),
                        any(),
                    )
                )
                .thenReturn(activityController)

            val latest by collectLastValue(underTest.chip)

            // Start off with no call.
            removeOngoingCallState(key = NOTIFICATION_KEY)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)
            assertThat(latest!!.transitionManager!!.controllerFactory).isNull()

            // Call starts [NoCall -> InCall(isAppVisible=true), NoTransition].
            addOngoingCallState(
                key = NOTIFICATION_KEY,
                startTimeMs = 345,
                contentIntent = pendingIntent,
                uid = NOTIFICATION_UID,
                isAppVisible = true,
            )
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue()
            assertThat(latest!!.transitionManager!!.hideChipForTransition).isFalse()
            val factory = latest!!.transitionManager!!.controllerFactory
            assertThat(factory!!.component).isEqualTo(component)

            // Request a return transition [InCall(isAppVisible=true), NoTransition ->
            // ReturnRequested].
            factory.onCompose(expandable)
            var controller = factory.createController(forLaunch = false)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat(latest!!.transitionManager!!.controllerFactory).isEqualTo(factory)
            assertThat(latest!!.transitionManager!!.hideChipForTransition).isTrue()

            // Start the return transition [InCall(isAppVisible=true), ReturnRequested ->
            // Returning].
            controller.onTransitionAnimationStart(isExpandingFullyAbove = false)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat(latest!!.transitionManager!!.controllerFactory).isEqualTo(factory)
            assertThat(latest!!.transitionManager!!.hideChipForTransition).isFalse()

            // End the return transition [InCall(isAppVisible=true), Returning -> NoTransition].
            controller.onTransitionAnimationEnd(isExpandingFullyAbove = false)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat(latest!!.transitionManager!!.controllerFactory).isEqualTo(factory)
            assertThat(latest!!.transitionManager!!.hideChipForTransition).isFalse()

            // Settle the return transition [InCall(isAppVisible=true) ->
            // InCall(isAppVisible=false), NoTransition].
            kosmos.activityManagerRepository.fake.setIsAppVisible(NOTIFICATION_UID, false)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat(latest!!.transitionManager!!.controllerFactory).isEqualTo(factory)
            assertThat(latest!!.transitionManager!!.hideChipForTransition).isFalse()

            // End the call.
            removeOngoingCallState(key = NOTIFICATION_KEY)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)
            assertThat(latest!!.transitionManager!!.controllerFactory).isNull()

            // End the call with the app hidden [InCall(isAppVisible=false) -> NoCall,
            // NoTransition].
            addOngoingCallState(
                key = NOTIFICATION_KEY,
                startTimeMs = 345,
                contentIntent = pendingIntent,
                isAppVisible = false,
            )
            removeOngoingCallState(key = NOTIFICATION_KEY)
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)
            assertThat(latest!!.transitionManager!!.controllerFactory).isNull()
        }

    @Test
    @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME)
    @EnableChipsModernization
+87 −69
Original line number Diff line number Diff line
@@ -38,12 +38,14 @@ import com.android.systemui.statusbar.chips.StatusBarChipLogTags.pad
import com.android.systemui.statusbar.chips.StatusBarChipsLog
import com.android.systemui.statusbar.chips.StatusBarChipsReturnAnimations
import com.android.systemui.statusbar.chips.call.domain.interactor.CallChipInteractor
import com.android.systemui.statusbar.chips.notification.domain.interactor.StatusBarNotificationChipsInteractor
import com.android.systemui.statusbar.chips.ui.model.ColorsModel
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.view.ChipBackgroundContainer
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipViewModel
import com.android.systemui.statusbar.chips.uievents.StatusBarChipsUiEventLogger
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallModel
import com.android.systemui.util.time.SystemClock
@@ -58,6 +60,7 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch

/** View model for the ongoing phone call chip shown in the status bar. */
@SysUISingleton
@@ -67,6 +70,7 @@ constructor(
    @Main private val context: Context,
    @Application private val scope: CoroutineScope,
    interactor: CallChipInteractor,
    private val notifChipsInteractor: StatusBarNotificationChipsInteractor,
    systemClock: SystemClock,
    private val activityStarter: ActivityStarter,
    @StatusBarChipsLog private val logBuffer: LogBuffer,
@@ -210,53 +214,51 @@ constructor(
        val instanceId = state.notificationInstanceId

        // This block mimics OngoingCallController#updateChip.
        val content =
            if (state.startTimeMs <= 0L) {
                // If the start time is invalid, don't show a timer and show just an icon.
                // See b/192379214.
            return OngoingActivityChipModel.Active(
                key = key,
                icon = icon,
                content = OngoingActivityChipModel.Content.IconOnly,
                colors = colors,
                onClickListenerLegacy = getOnClickListener(intent, instanceId),
                clickBehavior = getClickBehavior(intent, instanceId),
                isHidden = isHidden,
                transitionManager = getTransitionManager(state, transitionState),
                instanceId = instanceId,
            )
                OngoingActivityChipModel.Content.IconOnly
            } else {
                val startTimeInElapsedRealtime =
                state.startTimeMs - systemClock.currentTimeMillis() + systemClock.elapsedRealtime()
                    state.startTimeMs - systemClock.currentTimeMillis() +
                        systemClock.elapsedRealtime()
                OngoingActivityChipModel.Content.Timer(startTimeMs = startTimeInElapsedRealtime)
            }

        return OngoingActivityChipModel.Active(
            key = key,
            icon = icon,
            content = content,
            colors = colors,
                content =
                    OngoingActivityChipModel.Content.Timer(
                        startTimeMs = startTimeInElapsedRealtime
                    ),
                onClickListenerLegacy = getOnClickListener(intent, instanceId),
                clickBehavior = getClickBehavior(intent, instanceId),
            onClickListenerLegacy = getOnClickListener(intent, instanceId, state.notificationKey),
            clickBehavior = getClickBehavior(intent, instanceId, state.notificationKey),
            isHidden = isHidden,
            transitionManager = getTransitionManager(state, transitionState),
            instanceId = instanceId,
        )
    }
    }

    private fun getOnClickListener(
        intent: PendingIntent?,
        instanceId: InstanceId?,
        notificationKey: String,
    ): View.OnClickListener? {
        if (intent == null) return null
        if (PromotedNotificationUi.isEnabled) {
            return View.OnClickListener { view ->
                StatusBarChipsModernization.assertInLegacyMode()
                logChipTapped(instanceId)
                onCallChipTappedWithPromotionEnabled(notificationKey)
            }
        }
        if (intent == null) {
            return null
        }
        return View.OnClickListener { view ->
            StatusBarChipsModernization.assertInLegacyMode()

            logger.i({ "Chip clicked" }) {}
            uiEventLogger.logChipTapToShow(instanceId)
            logChipTapped(instanceId)

            // TODO(b/414830065): Tapping the call chip should show the notification instead of
            // launching the activity.
            val backgroundView =
                view.requireViewById<ChipBackgroundContainer>(R.id.ongoing_activity_chip_background)
            // This mimics OngoingCallController#updateChipClickListener.
@@ -273,19 +275,24 @@ constructor(
    private fun getClickBehavior(
        intent: PendingIntent?,
        instanceId: InstanceId?,
    ): OngoingActivityChipModel.ClickBehavior =
        notificationKey: String,
    ): OngoingActivityChipModel.ClickBehavior {
        if (PromotedNotificationUi.isEnabled) {
            return OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification {
                StatusBarChipsModernization.unsafeAssertInNewMode()
                logChipTapped(instanceId)
                onCallChipTappedWithPromotionEnabled(notificationKey)
            }
        }
        if (intent == null) {
            OngoingActivityChipModel.ClickBehavior.None
        } else {
            OngoingActivityChipModel.ClickBehavior.ExpandAction(
            return OngoingActivityChipModel.ClickBehavior.None
        }
        return OngoingActivityChipModel.ClickBehavior.ExpandAction(
            onClick = { expandable ->
                StatusBarChipsModernization.unsafeAssertInNewMode()

                    logger.i({ "Chip clicked" }) {}
                    uiEventLogger.logChipTapToShow(instanceId)
                logChipTapped(instanceId)

                    // TODO(b/414830065): Tapping the call chip should show the notification instead
                    // of launching the activity.
                val animationController =
                    if (
                        !StatusBarChipsReturnAnimations.isEnabled ||
@@ -308,6 +315,17 @@ constructor(
        )
    }

    private fun logChipTapped(instanceId: InstanceId?) {
        logger.i({ "Chip clicked" }) {}
        uiEventLogger.logChipTapToShow(instanceId)
    }

    private fun onCallChipTappedWithPromotionEnabled(notificationKey: String) {
        // The notification pipeline needs everything to run on the main thread, so keep
        // this event on the main thread.
        scope.launch { notifChipsInteractor.onPromotedNotificationChipTapped(notificationKey) }
    }

    private fun getContentDescription(appName: String): ContentDescription {
        val ongoingCallDescription = context.getString(R.string.ongoing_call_content_description)
        return ContentDescription.Loaded(
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.plugins.activityStarter
import com.android.systemui.statusbar.chips.call.domain.interactor.callChipInteractor
import com.android.systemui.statusbar.chips.notification.domain.interactor.statusBarNotificationChipsInteractor
import com.android.systemui.statusbar.chips.statusBarChipsLogger
import com.android.systemui.statusbar.chips.uievents.statusBarChipsUiEventLogger
import com.android.systemui.util.time.fakeSystemClock
@@ -31,6 +32,7 @@ val Kosmos.callChipViewModel: CallChipViewModel by
            applicationContext,
            scope = applicationCoroutineScope,
            interactor = callChipInteractor,
            notifChipsInteractor = statusBarNotificationChipsInteractor,
            systemClock = fakeSystemClock,
            activityStarter = activityStarter,
            logBuffer = statusBarChipsLogger,