diff options
author | Kyunglyul Hyun <klhyun@google.com> | 2020-10-15 06:20:45 +0000 |
---|---|---|
committer | Kyunglyul Hyun <klhyun@google.com> | 2020-12-21 00:34:16 +0000 |
commit | 56bc77955355f5e2db824c6cab977cc245283d97 (patch) | |
tree | 9b34fcc85fbb871ce3578a97eadfc16f91dc744c /packages/SystemUI/src | |
parent | 6592972285d7d4e5b3e2b33b208301b71cc2b18e (diff) |
MediaRouterService binds services when necessary
MediaRouterService maintained bindings to provider services
once those are established.
With this CL, it only binds services when there is a non-empty
discovery preference set by a foreground app or an app is casting.
This change may break output switcher, which enables transfer media
of background apps.
To alleviate that MediaRouter2Manager#startScan and #stopScan are added
so that system UI can force the service bind to the services and find
remote devices to cast.
Bug: 169575701
Bug: 172920557
Test: manually and CTS
Change-Id: I4a47fdb1c9fe05a04d26950485833c9cbfb91a69
(cherry picked from commit 9f889ca4e62044900004cb7ce4e85415d2b019e2)
(cherry picked from commit 602b168f99b00c037191234a85190d845680aa64)
Diffstat (limited to 'packages/SystemUI/src')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java | 12 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java index eb86128a82a5..4f8519289a07 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java @@ -24,6 +24,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.media.MediaMetadata; import android.media.MediaRoute2Info; +import android.media.MediaRouter2Manager; import android.media.RoutingSessionInfo; import android.media.session.MediaController; import android.media.session.MediaSessionManager; @@ -76,6 +77,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>(); private final boolean mAboveStatusbar; private final NotificationEntryManager mNotificationEntryManager; + private final MediaRouter2Manager mRouterManager; @VisibleForTesting final List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>(); @@ -92,7 +94,8 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { public MediaOutputController(@NonNull Context context, String packageName, boolean aboveStatusbar, MediaSessionManager mediaSessionManager, LocalBluetoothManager lbm, ShadeController shadeController, ActivityStarter starter, - NotificationEntryManager notificationEntryManager, UiEventLogger uiEventLogger) { + NotificationEntryManager notificationEntryManager, UiEventLogger uiEventLogger, + MediaRouter2Manager routerManager) { mContext = context; mPackageName = packageName; mMediaSessionManager = mediaSessionManager; @@ -104,6 +107,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName); mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName); mUiEventLogger = uiEventLogger; + mRouterManager = routerManager; } void start(@NonNull Callback cb) { @@ -134,6 +138,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { mLocalMediaManager.stopScan(); mLocalMediaManager.registerCallback(this); mLocalMediaManager.startScan(); + if (mRouterManager != null) { + mRouterManager.startScan(); + } } void stop() { @@ -144,6 +151,9 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback { mLocalMediaManager.unregisterCallback(this); mLocalMediaManager.stopScan(); } + if (mRouterManager != null) { + mRouterManager.stopScan(); + } mMediaDevices.clear(); } diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt index 0f340a5cedaa..e1a504c3e084 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt @@ -18,6 +18,7 @@ package com.android.systemui.media.dialog import android.content.Context import android.media.session.MediaSessionManager +import android.media.MediaRouter2Manager import com.android.internal.logging.UiEventLogger import com.android.settingslib.bluetooth.LocalBluetoothManager import com.android.systemui.plugins.ActivityStarter @@ -35,7 +36,8 @@ class MediaOutputDialogFactory @Inject constructor( private val shadeController: ShadeController, private val starter: ActivityStarter, private val notificationEntryManager: NotificationEntryManager, - private val uiEventLogger: UiEventLogger + private val uiEventLogger: UiEventLogger, + private val routerManager: MediaRouter2Manager ) { companion object { var mediaOutputDialog: MediaOutputDialog? = null @@ -46,7 +48,7 @@ class MediaOutputDialogFactory @Inject constructor( mediaOutputDialog?.dismiss() mediaOutputDialog = MediaOutputController(context, packageName, aboveStatusBar, mediaSessionManager, lbm, shadeController, starter, notificationEntryManager, - uiEventLogger).run { + uiEventLogger, routerManager).run { MediaOutputDialog(context, aboveStatusBar, this, uiEventLogger) } } |