From 9b1a6ea1c9168c5a5b047142ecafcc411c82d0b4 Mon Sep 17 00:00:00 2001 From: Sungsoo Lim Date: Fri, 1 Jan 2021 06:04:56 +0000 Subject: [PATCH] Revert "Get bluetooth A2DP status directly from BT" This reverts commit 15eb7da79478adf428db2e39d9c0741763d09fbc. Reason for revert: All apps doesn't have Bluetooth permission Change-Id: I7a705c8e70c6fb4acfac6141de16a06d83136042 --- media/java/android/media/MediaRouter.java | 51 ++++++++----------- .../server/media/BluetoothRouteProvider.java | 1 - 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index d0304f2629171..36f7bed03bcd9 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -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; - } - } - } } diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java index 8a13969c16c64..7afa81aa047d4 100644 --- a/services/core/java/com/android/server/media/BluetoothRouteProvider.java +++ b/services/core/java/com/android/server/media/BluetoothRouteProvider.java @@ -439,7 +439,6 @@ class BluetoothRouteProvider { } } } - private class BluetoothBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {