diff options
| author | 2024-06-25 01:52:20 +0000 | |
|---|---|---|
| committer | 2024-06-25 01:52:20 +0000 | |
| commit | b770541dbe86e7b82fb569243d742222af9f42bd (patch) | |
| tree | 59f0590f6c78535b0be773c6e171a9d03ac6a924 | |
| parent | 86e251eba60d6dc2cf7afe7ae536d12f4858c857 (diff) | |
| parent | f995fe63122725280216cab6e906960c0fcfae46 (diff) | |
Merge "Set up environment for media smartspace user events" into main
2 files changed, 148 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt index a2d7fb152e5c..e8a23347c3c3 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt @@ -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 || diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt index 01fbf4af7626..d1184b615c95 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt @@ -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 + } + } } } |