1 package com.android.systemui.media
2 
3 import android.app.smartspace.SmartspaceTarget
4 import android.util.Log
5 import com.android.systemui.plugins.BcSmartspaceDataPlugin
6 import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
7 import javax.inject.Inject
8 
9 private const val TAG = "SsMediaDataProvider"
10 
11 /** Provides SmartspaceTargets of media types for SystemUI media control. */
12 class SmartspaceMediaDataProvider @Inject constructor() : BcSmartspaceDataPlugin {
13 
14     private val smartspaceMediaTargetListeners: MutableList<SmartspaceTargetListener> =
15         mutableListOf()
16     private var smartspaceMediaTargets: List<SmartspaceTarget> = listOf()
17 
18     override fun registerListener(smartspaceTargetListener: SmartspaceTargetListener) {
19         smartspaceMediaTargetListeners.add(smartspaceTargetListener)
20     }
21 
22     override fun unregisterListener(smartspaceTargetListener: SmartspaceTargetListener?) {
23         smartspaceMediaTargetListeners.remove(smartspaceTargetListener)
24     }
25 
26     /** Updates Smartspace data and propagates it to any listeners.  */
27     override fun onTargetsAvailable(targets: List<SmartspaceTarget>) {
28         // Filter out non-media targets.
29         val mediaTargets = mutableListOf<SmartspaceTarget>()
30         for (target in targets) {
31             val smartspaceTarget = target
32             if (smartspaceTarget.featureType == SmartspaceTarget.FEATURE_MEDIA) {
33                 mediaTargets.add(smartspaceTarget)
34             }
35         }
36 
37         if (!mediaTargets.isEmpty()) {
38             Log.d(TAG, "Forwarding Smartspace media updates $mediaTargets")
39         }
40 
41         smartspaceMediaTargets = mediaTargets
42         smartspaceMediaTargetListeners.forEach {
43             it.onSmartspaceTargetsUpdated(smartspaceMediaTargets)
44         }
45     }
46 }
47