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

Commit f995fe63 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Set up environment for media smartspace user events

Flag: com.android.systemui.scene_container
Bug: 330897926
Test: build.
Change-Id: I84aad4da83375ab4533d9b5937fbe47b98786496
parent 2257abae
Loading
Loading
Loading
Loading
+120 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel
import com.android.systemui.media.controls.util.MediaSmartspaceLogger
import com.android.systemui.media.controls.util.MediaSmartspaceLogger.Companion.SMARTSPACE_CARD_DISMISS_EVENT
import com.android.systemui.media.controls.util.SmallHash
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.time.SystemClock
@@ -362,6 +363,77 @@ constructor(
        return _smartspaceMediaData.value.isActive
    }

    /** Log user event on media card if smartspace logging is enabled. */
    fun logSmartspaceCardUserEvent(
        eventId: Int,
        location: Int,
        interactedSubCardRank: Int = 0,
        interactedSubCardCardinality: Int = 0,
        instanceId: InstanceId? = null,
        isRec: Boolean = false
    ) {
        _currentMedia.value.forEachIndexed { index, mediaCommonModel ->
            when (mediaCommonModel) {
                is MediaCommonModel.MediaControl -> {
                    if (mediaCommonModel.mediaLoadedModel.instanceId == instanceId) {
                        if (isSmartspaceLoggingEnabled(mediaCommonModel, index)) {
                            logSmartspaceMediaCardUserEvent(
                                instanceId,
                                index,
                                eventId,
                                location,
                                mediaCommonModel.mediaLoadedModel.isSsReactivated,
                                interactedSubCardRank,
                                interactedSubCardCardinality
                            )
                        }
                        return
                    }
                }
                is MediaCommonModel.MediaRecommendations -> {
                    if (isRec) {
                        if (isSmartspaceLoggingEnabled(mediaCommonModel, index)) {
                            logSmarspaceRecommendationCardUserEvent(
                                eventId,
                                location,
                                index,
                                interactedSubCardRank,
                                interactedSubCardCardinality
                            )
                        }
                        return
                    }
                }
            }
        }
    }

    /** Log media and recommendation cards dismissal if smartspace logging is enabled for each. */
    fun logSmartspaceCardsOnSwipeToDismiss(location: Int) {
        _currentMedia.value.forEachIndexed { index, mediaCommonModel ->
            if (isSmartspaceLoggingEnabled(mediaCommonModel, index)) {
                when (mediaCommonModel) {
                    is MediaCommonModel.MediaControl ->
                        logSmartspaceMediaCardUserEvent(
                            mediaCommonModel.mediaLoadedModel.instanceId,
                            index,
                            SMARTSPACE_CARD_DISMISS_EVENT,
                            location,
                            mediaCommonModel.mediaLoadedModel.isSsReactivated,
                            isSwipeToDismiss = true
                        )
                    is MediaCommonModel.MediaRecommendations ->
                        logSmarspaceRecommendationCardUserEvent(
                            SMARTSPACE_CARD_DISMISS_EVENT,
                            location,
                            index,
                            isSwipeToDismiss = true
                        )
                }
            }
        }
    }

    private fun canBeRemoved(data: MediaData): Boolean {
        return data.isPlaying?.let { !it } ?: data.isClearable && !data.active
    }
@@ -394,6 +466,54 @@ constructor(
        }
    }

    private fun logSmartspaceMediaCardUserEvent(
        instanceId: InstanceId,
        index: Int,
        eventId: Int,
        location: Int,
        isReactivated: Boolean,
        interactedSubCardRank: Int = 0,
        interactedSubCardCardinality: Int = 0,
        isSwipeToDismiss: Boolean = false
    ) {
        _selectedUserEntries.value[instanceId]?.let {
            smartspaceLogger.logSmartspaceCardUIEvent(
                eventId,
                it.smartspaceId,
                it.appUid,
                location,
                _currentMedia.value.size,
                isSsReactivated = isReactivated,
                interactedSubcardRank = interactedSubCardRank,
                interactedSubcardCardinality = interactedSubCardCardinality,
                rank = index,
                isSwipeToDismiss = isSwipeToDismiss,
            )
        }
    }

    private fun logSmarspaceRecommendationCardUserEvent(
        eventId: Int,
        location: Int,
        index: Int,
        interactedSubCardRank: Int = 0,
        interactedSubCardCardinality: Int = 0,
        isSwipeToDismiss: Boolean = false
    ) {
        smartspaceLogger.logSmartspaceCardUIEvent(
            eventId,
            SmallHash.hash(_smartspaceMediaData.value.targetId),
            _smartspaceMediaData.value.getUid(applicationContext),
            location,
            _currentMedia.value.size,
            isRecommendationCard = true,
            interactedSubcardRank = interactedSubCardRank,
            interactedSubcardCardinality = interactedSubCardCardinality,
            rank = index,
            isSwipeToDismiss = isSwipeToDismiss,
        )
    }

    private fun isSmartspaceLoggingEnabled(commonModel: MediaCommonModel, index: Int): Boolean {
        return sortedMedia.size > index &&
            (_smartspaceMediaData.value.expiryTimeMs != 0L ||
+28 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.media.controls.util

import android.util.Log
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shared.system.SysUiStatsLog
import javax.inject.Inject

@@ -85,6 +87,8 @@ class MediaSmartspaceLogger @Inject constructor() {
        cardinality: Int,
        isRecommendationCard: Boolean = false,
        isSsReactivated: Boolean = false,
        interactedSubcardRank: Int = 0,
        interactedSubcardCardinality: Int = 0,
        rank: Int = 0,
        isSwipeToDismiss: Boolean = false,
    ) {
@@ -96,6 +100,8 @@ class MediaSmartspaceLogger @Inject constructor() {
            cardinality,
            isRecommendationCard,
            isSsReactivated,
            interactedSubcardRank,
            interactedSubcardCardinality,
            rank = rank,
            isSwipeToDismiss = isSwipeToDismiss,
        )
@@ -187,5 +193,27 @@ class MediaSmartspaceLogger @Inject constructor() {
        const val SMARTSPACE_CARD_CLICK_EVENT = 760
        const val SMARTSPACE_CARD_DISMISS_EVENT = 761
        const val SMARTSPACE_CARD_SEEN_EVENT = 800

        /**
         * Get the location of media view given [currentEndLocation]
         *
         * @return location used for Smartspace logging
         */
        fun getSurface(location: Int): Int {
            SceneContainerFlag.isUnexpectedlyInLegacyMode()
            return when (location) {
                MediaHierarchyManager.LOCATION_QQS,
                MediaHierarchyManager.LOCATION_QS -> {
                    SysUiStatsLog.SMART_SPACE_CARD_REPORTED__DISPLAY_SURFACE__SHADE
                }
                MediaHierarchyManager.LOCATION_LOCKSCREEN -> {
                    SysUiStatsLog.SMART_SPACE_CARD_REPORTED__DISPLAY_SURFACE__LOCKSCREEN
                }
                MediaHierarchyManager.LOCATION_DREAM_OVERLAY -> {
                    SysUiStatsLog.SMART_SPACE_CARD_REPORTED__DISPLAY_SURFACE__DREAM_OVERLAY
                }
                else -> SysUiStatsLog.SMART_SPACE_CARD_REPORTED__DISPLAY_SURFACE__DEFAULT_SURFACE
            }
        }
    }
}