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

Commit 3f4f355a authored by cecilia's avatar cecilia
Browse files

Initial data pipeline for Smartspace media recommendations data in media carousel.

Test: Tested manually on local builds
Bug: 182813345
Change-Id: I650e2970de3ae94e3ac3cc77f591500c340802ce
parent c8472887
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ android_library {
        "res",
    ],
    static_libs: [
        "bcsmartspace",
        "WindowManager-Shell",
        "SystemUIPluginLib",
        "SystemUISharedLib",
+3 −0
Original line number Diff line number Diff line
@@ -275,6 +275,9 @@
    <!-- Permission to make accessibility service access Bubbles -->
    <uses-permission android:name="android.permission.ADD_TRUSTED_DISPLAY" />

    <!-- Permission for Smartspace. -->
    <uses-permission android:name="android.permission.MANAGE_SMARTSPACE"/>


    <protected-broadcast android:name="com.android.settingslib.action.REGISTER_SLICE_RECEIVER" />
    <protected-broadcast android:name="com.android.settingslib.action.UNREGISTER_SLICE_RECEIVER" />
+14 −0
Original line number Diff line number Diff line
package com.android.systemui.media

import android.animation.ArgbEvaluator
import android.app.smartspace.SmartspaceTarget
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
@@ -201,9 +202,18 @@ class MediaCarouselController @Inject constructor(
                }
            }

            override fun onSmartspaceMediaDataLoaded(key: String, data: SmartspaceTarget) {
                Log.d(TAG, "My Smartspace media update is here")
                addOrUpdateSmartspaceMediaRecommendations(key, data)
            }

            override fun onMediaDataRemoved(key: String) {
                removePlayer(key)
            }

            override fun onSmartspaceMediaDataRemoved(key: String) {
                Log.d(TAG, "My Smartspace media removal request is received")
            }
        })
        mediaFrame.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
            // The pageIndicator is not laid out yet when we get the current state update,
@@ -291,6 +301,10 @@ class MediaCarouselController @Inject constructor(
        }
    }

    private fun addOrUpdateSmartspaceMediaRecommendations(key: String, data: SmartspaceTarget) {
        // TODO(b/182813345): Add Smartspace media recommendation view.
    }

    private fun removePlayer(key: String, dismissMediaData: Boolean = true) {
        val removed = MediaPlayerData.removeMediaPlayer(key)
        removed?.apply {
+9 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.media

import android.app.smartspace.SmartspaceTarget
import javax.inject.Inject

/**
@@ -37,10 +38,18 @@ class MediaDataCombineLatest @Inject constructor() : MediaDataManager.Listener,
        }
    }

    override fun onSmartspaceMediaDataLoaded(key: String, data: SmartspaceTarget) {
        listeners.toSet().forEach { it.onSmartspaceMediaDataLoaded(key, data) }
    }

    override fun onMediaDataRemoved(key: String) {
        remove(key)
    }

    override fun onSmartspaceMediaDataRemoved(key: String) {
        listeners.toSet().forEach { it.onSmartspaceMediaDataRemoved(key) }
    }

    override fun onMediaDeviceChanged(
        key: String,
        oldKey: String?,
+9 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.media

import android.app.smartspace.SmartspaceTarget
import android.util.Log
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.broadcast.BroadcastDispatcher
@@ -82,6 +83,10 @@ class MediaDataFilter @Inject constructor(
        }
    }

    override fun onSmartspaceMediaDataLoaded(key: String, data: SmartspaceTarget) {
        listeners.forEach { it.onSmartspaceMediaDataLoaded(key, data) }
    }

    override fun onMediaDataRemoved(key: String) {
        allEntries.remove(key)
        userEntries.remove(key)?.let {
@@ -92,6 +97,10 @@ class MediaDataFilter @Inject constructor(
        }
    }

    override fun onSmartspaceMediaDataRemoved(key: String) {
        listeners.forEach { it.onSmartspaceMediaDataRemoved(key) }
    }

    @VisibleForTesting
    internal fun handleUserSwitched(id: Int) {
        // If the user changes, remove all current MediaData objects and inform listeners
Loading