Merge "Remove controls when apps are stopped or removed" into rvc-dev am: a56a27a943

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11839914

Change-Id: I8505bf198de0113e1d286ebd02f6d59b368683fb
This commit is contained in:
Beth Thibodeau
2020-06-12 19:51:43 +00:00
committed by Automerger Merge Worker

View File

@@ -109,6 +109,24 @@ class MediaDataManager @Inject constructor(
}
}
private val appChangeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
Intent.ACTION_PACKAGES_SUSPENDED -> {
val packages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST)
packages?.forEach {
removeAllForPackage(it)
}
}
Intent.ACTION_PACKAGE_REMOVED, Intent.ACTION_PACKAGE_RESTARTED -> {
intent.data?.encodedSchemeSpecificPart?.let {
removeAllForPackage(it)
}
}
}
}
}
init {
mediaTimeoutListener.timeoutCallback = { token: String, timedOut: Boolean ->
setTimedOut(token, timedOut) }
@@ -129,6 +147,17 @@ class MediaDataManager @Inject constructor(
val userFilter = IntentFilter(Intent.ACTION_USER_SWITCHED)
broadcastDispatcher.registerReceiver(userChangeReceiver, userFilter, null, UserHandle.ALL)
val suspendFilter = IntentFilter(Intent.ACTION_PACKAGES_SUSPENDED)
broadcastDispatcher.registerReceiver(appChangeReceiver, suspendFilter, null, UserHandle.ALL)
val uninstallFilter = IntentFilter().apply {
addAction(Intent.ACTION_PACKAGE_REMOVED)
addAction(Intent.ACTION_PACKAGE_RESTARTED)
addDataScheme("package")
}
// BroadcastDispatcher does not allow filters with data schemes
context.registerReceiver(appChangeReceiver, uninstallFilter)
}
fun onNotificationAdded(key: String, sbn: StatusBarNotification) {
@@ -160,6 +189,18 @@ class MediaDataManager @Inject constructor(
mediaEntries.clear()
}
private fun removeAllForPackage(packageName: String) {
Assert.isMainThread()
val listenersCopy = listeners.toSet()
val toRemove = mediaEntries.filter { it.value.packageName == packageName }
toRemove.forEach {
mediaEntries.remove(it.key)
listenersCopy.forEach { listener ->
listener.onMediaDataRemoved(it.key)
}
}
}
private fun addResumptionControls(
desc: MediaDescription,
action: Runnable,