Loading media/java/android/media/MediaRouter.java +29 −18 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public class MediaRouter { private static final String TAG = "MediaRouter"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG_RESTORE_ROUTE = true; static class Static implements DisplayManager.DisplayListener { final String mPackageName; Loading Loading @@ -261,8 +262,8 @@ public class MediaRouter { if (audioRoutesChanged) { Log.v(TAG, "Audio routes updated: " + newRoutes + ", a2dp=" + isBluetoothA2dpOn()); if (mSelectedRoute == null || mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == mBluetoothA2dpRoute) { if (mSelectedRoute == null || mSelectedRoute.isDefault() || mSelectedRoute.isBluetooth()) { if (forceUseDefaultRoute || mBluetoothA2dpRoute == null) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo, false); } else { Loading Loading @@ -665,13 +666,17 @@ public class MediaRouter { // Skip restoring route if the selected route is not a system audio route, // MediaRouter is initializing, or mClient was changed. if (Client.this != mClient || mSelectedRoute == null || (mSelectedRoute != mDefaultAudioVideo && mSelectedRoute != mBluetoothA2dpRoute)) { || (!mSelectedRoute.isDefault() && !mSelectedRoute.isBluetooth())) { return; } if (DEBUG) { if (DEBUG_RESTORE_ROUTE) { if (mSelectedRoute.isDefault() && mBluetoothA2dpRoute != null) { Log.d(TAG, "onRestoreRoute() : selectedRoute=" + mSelectedRoute + ", a2dpRoute=" + mBluetoothA2dpRoute); } else { Log.d(TAG, "onRestoreRoute() : route=" + mSelectedRoute); } } mSelectedRoute.select(); }); } Loading @@ -690,9 +695,12 @@ public class MediaRouter { @Override public void onGlobalA2dpChanged(boolean a2dpOn) { mHandler.post(() -> { if (mSelectedRoute == mDefaultAudioVideo && a2dpOn) { if (mSelectedRoute == null) { return; } if (mSelectedRoute.isDefault() && a2dpOn) { setSelectedRoute(mBluetoothA2dpRoute, /*explicit=*/false); } else if (mSelectedRoute == mBluetoothA2dpRoute && !a2dpOn) { } else if (mSelectedRoute.isBluetooth() && !a2dpOn) { setSelectedRoute(mDefaultAudioVideo, /*explicit=*/false); } }); Loading Loading @@ -1057,8 +1065,8 @@ public class MediaRouter { final RouteInfo oldRoute = sStatic.mSelectedRoute; final RouteInfo currentSystemRoute = sStatic.isBluetoothA2dpOn() ? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo; boolean wasDefaultOrBluetoothRoute = (oldRoute == sStatic.mDefaultAudioVideo || oldRoute == sStatic.mBluetoothA2dpRoute); boolean wasDefaultOrBluetoothRoute = (oldRoute != null) && (oldRoute.isDefault() || oldRoute.isBluetooth()); if (oldRoute == route && (!wasDefaultOrBluetoothRoute || route == currentSystemRoute)) { return; Loading @@ -1070,14 +1078,17 @@ public class MediaRouter { return; } final RouteInfo btRoute = sStatic.mBluetoothA2dpRoute; if (sStatic.isPlaybackActive() && btRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0 && (route == btRoute || route == sStatic.mDefaultAudioVideo)) { if (sStatic.isPlaybackActive() && sStatic.mBluetoothA2dpRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0 && (route.isBluetooth() || route.isDefault())) { try { sStatic.mAudioService.setBluetoothA2dpOn(route == btRoute); sStatic.mAudioService.setBluetoothA2dpOn(route.isBluetooth()); } catch (RemoteException e) { Log.e(TAG, "Error changing Bluetooth A2DP state", e); } } else if (DEBUG_RESTORE_ROUTE) { Log.i(TAG, "Skip setBluetoothA2dpOn(): types=" + types + ", isPlaybackActive()=" + sStatic.isPlaybackActive() + ", BT route=" + sStatic.mBluetoothA2dpRoute); } final WifiDisplay activeDisplay = Loading Loading @@ -1118,7 +1129,8 @@ public class MediaRouter { static void selectDefaultRouteStatic() { // TODO: Be smarter about the route types here; this selects for all valid. if (sStatic.mSelectedRoute != sStatic.mBluetoothA2dpRoute && sStatic.isBluetoothA2dpOn()) { if (sStatic.isBluetoothA2dpOn() && sStatic.mSelectedRoute != null && !sStatic.mSelectedRoute.isBluetooth()) { selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mBluetoothA2dpRoute, false); } else { selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mDefaultAudioVideo, false); Loading Loading @@ -1452,8 +1464,7 @@ public class MediaRouter { final RouteInfo selectedRoute = sStatic.mSelectedRoute; if (selectedRoute == null) return; if (selectedRoute == sStatic.mBluetoothA2dpRoute || selectedRoute == sStatic.mDefaultAudioVideo) { if (selectedRoute.isBluetooth() || selectedRoute.isDefault()) { dispatchRouteVolumeChanged(selectedRoute); } else if (sStatic.mBluetoothA2dpRoute != null) { dispatchRouteVolumeChanged(sStatic.mIsBluetoothA2dpOn Loading Loading @@ -2225,7 +2236,7 @@ public class MediaRouter { /** @hide */ public boolean isBluetooth() { return this == sStatic.mBluetoothA2dpRoute; return mDeviceType == RouteInfo.DEVICE_TYPE_BLUETOOTH; } /** @hide */ Loading services/core/java/com/android/server/media/AudioPlayerStateMonitor.java +3 −3 Original line number Diff line number Diff line Loading @@ -258,16 +258,16 @@ class AudioPlayerStateMonitor { if (mActiveAudioUids.size() > 0 && !mActiveAudioUids.contains(mSortedAudioPlaybackClientUids.get(0))) { int firstActiveUid = -1; int firatActiveUidIndex = -1; int firstActiveUidIndex = -1; for (int i = 1; i < mSortedAudioPlaybackClientUids.size(); ++i) { int uid = mSortedAudioPlaybackClientUids.get(i); if (mActiveAudioUids.contains(uid)) { firatActiveUidIndex = i; firstActiveUidIndex = i; firstActiveUid = uid; break; } } for (int i = firatActiveUidIndex; i > 0; --i) { for (int i = firstActiveUidIndex; i > 0; --i) { mSortedAudioPlaybackClientUids.set(i, mSortedAudioPlaybackClientUids.get(i - 1)); } Loading services/core/java/com/android/server/media/MediaRouterService.java +2 −0 Original line number Diff line number Diff line Loading @@ -907,6 +907,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub mActiveBluetoothDevice = btDevice; mGlobalBluetoothA2dpOn = btDevice != null; if (wasA2dpOn != mGlobalBluetoothA2dpOn) { Slog.d(TAG, "GlobalBluetoothA2dpOn is changed to '" + mGlobalBluetoothA2dpOn + "'"); UserRecord userRecord = mUserRecords.get(mCurrentUserId); if (userRecord != null) { for (ClientRecord cr : userRecord.mClientRecords) { Loading Loading
media/java/android/media/MediaRouter.java +29 −18 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public class MediaRouter { private static final String TAG = "MediaRouter"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG_RESTORE_ROUTE = true; static class Static implements DisplayManager.DisplayListener { final String mPackageName; Loading Loading @@ -261,8 +262,8 @@ public class MediaRouter { if (audioRoutesChanged) { Log.v(TAG, "Audio routes updated: " + newRoutes + ", a2dp=" + isBluetoothA2dpOn()); if (mSelectedRoute == null || mSelectedRoute == mDefaultAudioVideo || mSelectedRoute == mBluetoothA2dpRoute) { if (mSelectedRoute == null || mSelectedRoute.isDefault() || mSelectedRoute.isBluetooth()) { if (forceUseDefaultRoute || mBluetoothA2dpRoute == null) { selectRouteStatic(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo, false); } else { Loading Loading @@ -665,13 +666,17 @@ public class MediaRouter { // Skip restoring route if the selected route is not a system audio route, // MediaRouter is initializing, or mClient was changed. if (Client.this != mClient || mSelectedRoute == null || (mSelectedRoute != mDefaultAudioVideo && mSelectedRoute != mBluetoothA2dpRoute)) { || (!mSelectedRoute.isDefault() && !mSelectedRoute.isBluetooth())) { return; } if (DEBUG) { if (DEBUG_RESTORE_ROUTE) { if (mSelectedRoute.isDefault() && mBluetoothA2dpRoute != null) { Log.d(TAG, "onRestoreRoute() : selectedRoute=" + mSelectedRoute + ", a2dpRoute=" + mBluetoothA2dpRoute); } else { Log.d(TAG, "onRestoreRoute() : route=" + mSelectedRoute); } } mSelectedRoute.select(); }); } Loading @@ -690,9 +695,12 @@ public class MediaRouter { @Override public void onGlobalA2dpChanged(boolean a2dpOn) { mHandler.post(() -> { if (mSelectedRoute == mDefaultAudioVideo && a2dpOn) { if (mSelectedRoute == null) { return; } if (mSelectedRoute.isDefault() && a2dpOn) { setSelectedRoute(mBluetoothA2dpRoute, /*explicit=*/false); } else if (mSelectedRoute == mBluetoothA2dpRoute && !a2dpOn) { } else if (mSelectedRoute.isBluetooth() && !a2dpOn) { setSelectedRoute(mDefaultAudioVideo, /*explicit=*/false); } }); Loading Loading @@ -1057,8 +1065,8 @@ public class MediaRouter { final RouteInfo oldRoute = sStatic.mSelectedRoute; final RouteInfo currentSystemRoute = sStatic.isBluetoothA2dpOn() ? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo; boolean wasDefaultOrBluetoothRoute = (oldRoute == sStatic.mDefaultAudioVideo || oldRoute == sStatic.mBluetoothA2dpRoute); boolean wasDefaultOrBluetoothRoute = (oldRoute != null) && (oldRoute.isDefault() || oldRoute.isBluetooth()); if (oldRoute == route && (!wasDefaultOrBluetoothRoute || route == currentSystemRoute)) { return; Loading @@ -1070,14 +1078,17 @@ public class MediaRouter { return; } final RouteInfo btRoute = sStatic.mBluetoothA2dpRoute; if (sStatic.isPlaybackActive() && btRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0 && (route == btRoute || route == sStatic.mDefaultAudioVideo)) { if (sStatic.isPlaybackActive() && sStatic.mBluetoothA2dpRoute != null && (types & ROUTE_TYPE_LIVE_AUDIO) != 0 && (route.isBluetooth() || route.isDefault())) { try { sStatic.mAudioService.setBluetoothA2dpOn(route == btRoute); sStatic.mAudioService.setBluetoothA2dpOn(route.isBluetooth()); } catch (RemoteException e) { Log.e(TAG, "Error changing Bluetooth A2DP state", e); } } else if (DEBUG_RESTORE_ROUTE) { Log.i(TAG, "Skip setBluetoothA2dpOn(): types=" + types + ", isPlaybackActive()=" + sStatic.isPlaybackActive() + ", BT route=" + sStatic.mBluetoothA2dpRoute); } final WifiDisplay activeDisplay = Loading Loading @@ -1118,7 +1129,8 @@ public class MediaRouter { static void selectDefaultRouteStatic() { // TODO: Be smarter about the route types here; this selects for all valid. if (sStatic.mSelectedRoute != sStatic.mBluetoothA2dpRoute && sStatic.isBluetoothA2dpOn()) { if (sStatic.isBluetoothA2dpOn() && sStatic.mSelectedRoute != null && !sStatic.mSelectedRoute.isBluetooth()) { selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mBluetoothA2dpRoute, false); } else { selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mDefaultAudioVideo, false); Loading Loading @@ -1452,8 +1464,7 @@ public class MediaRouter { final RouteInfo selectedRoute = sStatic.mSelectedRoute; if (selectedRoute == null) return; if (selectedRoute == sStatic.mBluetoothA2dpRoute || selectedRoute == sStatic.mDefaultAudioVideo) { if (selectedRoute.isBluetooth() || selectedRoute.isDefault()) { dispatchRouteVolumeChanged(selectedRoute); } else if (sStatic.mBluetoothA2dpRoute != null) { dispatchRouteVolumeChanged(sStatic.mIsBluetoothA2dpOn Loading Loading @@ -2225,7 +2236,7 @@ public class MediaRouter { /** @hide */ public boolean isBluetooth() { return this == sStatic.mBluetoothA2dpRoute; return mDeviceType == RouteInfo.DEVICE_TYPE_BLUETOOTH; } /** @hide */ Loading
services/core/java/com/android/server/media/AudioPlayerStateMonitor.java +3 −3 Original line number Diff line number Diff line Loading @@ -258,16 +258,16 @@ class AudioPlayerStateMonitor { if (mActiveAudioUids.size() > 0 && !mActiveAudioUids.contains(mSortedAudioPlaybackClientUids.get(0))) { int firstActiveUid = -1; int firatActiveUidIndex = -1; int firstActiveUidIndex = -1; for (int i = 1; i < mSortedAudioPlaybackClientUids.size(); ++i) { int uid = mSortedAudioPlaybackClientUids.get(i); if (mActiveAudioUids.contains(uid)) { firatActiveUidIndex = i; firstActiveUidIndex = i; firstActiveUid = uid; break; } } for (int i = firatActiveUidIndex; i > 0; --i) { for (int i = firstActiveUidIndex; i > 0; --i) { mSortedAudioPlaybackClientUids.set(i, mSortedAudioPlaybackClientUids.get(i - 1)); } Loading
services/core/java/com/android/server/media/MediaRouterService.java +2 −0 Original line number Diff line number Diff line Loading @@ -907,6 +907,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub mActiveBluetoothDevice = btDevice; mGlobalBluetoothA2dpOn = btDevice != null; if (wasA2dpOn != mGlobalBluetoothA2dpOn) { Slog.d(TAG, "GlobalBluetoothA2dpOn is changed to '" + mGlobalBluetoothA2dpOn + "'"); UserRecord userRecord = mUserRecords.get(mCurrentUserId); if (userRecord != null) { for (ClientRecord cr : userRecord.mClientRecords) { Loading