Skip to content
Snippets Groups Projects
Commit 465e654a authored by Sungsoo Lim's avatar Sungsoo Lim Committed by Android (Google) Code Review
Browse files

Merge "Revert "Get bluetooth A2DP status directly from BT""

parents b4766c20 9b1a6ea1
No related branches found
No related tags found
No related merge requests found
......@@ -23,9 +23,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemService;
import android.app.ActivityThread;
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHearingAid;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.BroadcastReceiver;
import android.content.Context;
......@@ -102,7 +99,6 @@ public class MediaRouter {
RouteInfo mDefaultAudioVideo;
RouteInfo mBluetoothA2dpRoute;
volatile boolean mHasActiveBluetoothDevices;
RouteInfo mSelectedRoute;
......@@ -176,20 +172,14 @@ public class MediaRouter {
new IntentFilter(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED));
appContext.registerReceiver(new VolumeChangeReceiver(),
new IntentFilter(AudioManager.VOLUME_CHANGED_ACTION));
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED);
intentFilter.addAction(BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED);
appContext.registerReceiver(new BluetoothStateChangedReceiver(), intentFilter);
mDisplayService.registerDisplayListener(this, mHandler);
AudioRoutesInfo newAudioRoutes = null;
try {
newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver);
mHasActiveBluetoothDevices = mAudioService.isBluetoothA2dpOn();
} catch (RemoteException e) {
}
if (newAudioRoutes != null) {
// This will select the active BT route if there is one and the current
// selected route is the default system route, or if there is no selected
......@@ -263,8 +253,7 @@ public class MediaRouter {
}
if (audioRoutesChanged) {
Log.v(TAG, "Audio routes updated: " + newRoutes + ", hasActiveBTDevices="
+ mHasActiveBluetoothDevices);
Log.v(TAG, "Audio routes updated: " + newRoutes + ", a2dp=" + isBluetoothA2dpOn());
if (mSelectedRoute == null || mSelectedRoute == mDefaultAudioVideo
|| mSelectedRoute == mBluetoothA2dpRoute) {
if (forceUseDefaultRoute || mBluetoothA2dpRoute == null) {
......@@ -288,6 +277,15 @@ public class MediaRouter {
return mStreamVolume.get(streamType);
}
boolean isBluetoothA2dpOn() {
try {
return mBluetoothA2dpRoute != null && mAudioService.isBluetoothA2dpOn();
} catch (RemoteException e) {
Log.e(TAG, "Error querying Bluetooth A2DP state", e);
return false;
}
}
void updateDiscoveryRequest() {
// What are we looking for today?
int routeTypes = 0;
......@@ -396,7 +394,7 @@ public class MediaRouter {
}
void updateSelectedRouteForId(String routeId) {
RouteInfo selectedRoute = sStatic.mHasActiveBluetoothDevices
RouteInfo selectedRoute = isBluetoothA2dpOn()
? mBluetoothA2dpRoute : mDefaultAudioVideo;
final int count = mRoutes.size();
for (int i = 0; i < count; i++) {
......@@ -1045,7 +1043,7 @@ public class MediaRouter {
Log.v(TAG, "Selecting route: " + route);
assert(route != null);
final RouteInfo oldRoute = sStatic.mSelectedRoute;
final RouteInfo currentSystemRoute = sStatic.mHasActiveBluetoothDevices
final RouteInfo currentSystemRoute = sStatic.isBluetoothA2dpOn()
? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo;
boolean wasDefaultOrBluetoothRoute = (oldRoute == sStatic.mDefaultAudioVideo
|| oldRoute == sStatic.mBluetoothA2dpRoute);
......@@ -1108,8 +1106,7 @@ 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.mHasActiveBluetoothDevices) {
if (sStatic.mSelectedRoute != sStatic.mBluetoothA2dpRoute && sStatic.isBluetoothA2dpOn()) {
selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mBluetoothA2dpRoute, false);
} else {
selectRouteStatic(ROUTE_TYPE_ANY, sStatic.mDefaultAudioVideo, false);
......@@ -1446,8 +1443,13 @@ public class MediaRouter {
if (selectedRoute == sStatic.mBluetoothA2dpRoute ||
selectedRoute == sStatic.mDefaultAudioVideo) {
dispatchRouteVolumeChanged(selectedRoute);
} else if (sStatic.mHasActiveBluetoothDevices) {
dispatchRouteVolumeChanged(sStatic.mBluetoothA2dpRoute);
} else if (sStatic.mBluetoothA2dpRoute != null) {
try {
dispatchRouteVolumeChanged(sStatic.mAudioService.isBluetoothA2dpOn() ?
sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo);
} catch (RemoteException e) {
Log.e(TAG, "Error checking Bluetooth A2DP state to report volume change", e);
}
} else {
dispatchRouteVolumeChanged(sStatic.mDefaultAudioVideo);
}
......@@ -3170,17 +3172,4 @@ public class MediaRouter {
}
}
}
static class BluetoothStateChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED:
case BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED:
sStatic.mHasActiveBluetoothDevices =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) != null;
break;
}
}
}
}
......@@ -439,7 +439,6 @@ class BluetoothRouteProvider {
}
}
}
private class BluetoothBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment