Merge "Check the device type instead of the object reference" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-05-07 03:41:14 +00:00
committed by Android (Google) Code Review
3 changed files with 34 additions and 21 deletions

View File

@@ -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;
@@ -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 {
@@ -665,12 +666,16 @@ 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) {
Log.d(TAG, "onRestoreRoute() : route=" + mSelectedRoute);
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();
});
@@ -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);
}
});
@@ -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;
@@ -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 =
@@ -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);
@@ -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
@@ -2225,7 +2236,7 @@ public class MediaRouter {
/** @hide */
public boolean isBluetooth() {
return this == sStatic.mBluetoothA2dpRoute;
return mDeviceType == RouteInfo.DEVICE_TYPE_BLUETOOTH;
}
/** @hide */

View File

@@ -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));
}

View File

@@ -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) {