Loading packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +120 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } Loading Loading @@ -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 || Loading packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt +28 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, ) { Loading @@ -96,6 +100,8 @@ class MediaSmartspaceLogger @Inject constructor() { cardinality, isRecommendationCard, isSsReactivated, interactedSubcardRank, interactedSubcardCardinality, rank = rank, isSwipeToDismiss = isSwipeToDismiss, ) Loading Loading @@ -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 } } } } Loading
packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +120 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } Loading Loading @@ -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 || Loading
packages/SystemUI/src/com/android/systemui/media/controls/util/MediaSmartspaceLogger.kt +28 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, ) { Loading @@ -96,6 +100,8 @@ class MediaSmartspaceLogger @Inject constructor() { cardinality, isRecommendationCard, isSsReactivated, interactedSubcardRank, interactedSubcardCardinality, rank = rank, isSwipeToDismiss = isSwipeToDismiss, ) Loading Loading @@ -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 } } } }