Merge "Cache bluetooth A2DP in AudioService callback thread" am: 163632b108 am: 2727ec6c4a
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1545269 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I8377b5355fbf2ef0ea32c4c23facf87ebb73d8e7
This commit is contained in:
@@ -43,8 +43,8 @@ import android.os.RemoteException;
|
|||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArrayMap;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.util.SparseIntArray;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -52,7 +52,6 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
@@ -96,6 +95,7 @@ public class MediaRouter {
|
|||||||
|
|
||||||
RouteInfo mDefaultAudioVideo;
|
RouteInfo mDefaultAudioVideo;
|
||||||
RouteInfo mBluetoothA2dpRoute;
|
RouteInfo mBluetoothA2dpRoute;
|
||||||
|
boolean mIsBluetoothA2dpOn;
|
||||||
|
|
||||||
RouteInfo mSelectedRoute;
|
RouteInfo mSelectedRoute;
|
||||||
|
|
||||||
@@ -110,11 +110,16 @@ public class MediaRouter {
|
|||||||
IMediaRouterClient mClient;
|
IMediaRouterClient mClient;
|
||||||
MediaRouterClientState mClientState;
|
MediaRouterClientState mClientState;
|
||||||
|
|
||||||
Map<Integer, Integer> mStreamVolume = new ArrayMap<>();
|
SparseIntArray mStreamVolume = new SparseIntArray();
|
||||||
|
|
||||||
final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
|
final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
|
public void dispatchAudioRoutesChanged(final AudioRoutesInfo newRoutes) {
|
||||||
|
try {
|
||||||
|
mIsBluetoothA2dpOn = mAudioService.isBluetoothA2dpOn();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(TAG, "Error querying Bluetooth A2DP state", e);
|
||||||
|
}
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
@Override public void run() {
|
@Override public void run() {
|
||||||
updateAudioRoutes(newRoutes);
|
updateAudioRoutes(newRoutes);
|
||||||
@@ -264,23 +269,23 @@ public class MediaRouter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getStreamVolume(int streamType) {
|
int getStreamVolume(int streamType) {
|
||||||
if (!mStreamVolume.containsKey(streamType)) {
|
int idx = mStreamVolume.indexOfKey(streamType);
|
||||||
|
if (idx < 0) {
|
||||||
|
int volume = 0;
|
||||||
try {
|
try {
|
||||||
mStreamVolume.put(streamType, mAudioService.getStreamVolume(streamType));
|
volume = mAudioService.getStreamVolume(streamType);
|
||||||
|
mStreamVolume.put(streamType, volume);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error getting local stream volume", e);
|
Log.e(TAG, "Error getting local stream volume", e);
|
||||||
|
} finally {
|
||||||
|
return volume;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mStreamVolume.get(streamType);
|
return mStreamVolume.valueAt(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isBluetoothA2dpOn() {
|
boolean isBluetoothA2dpOn() {
|
||||||
try {
|
return mBluetoothA2dpRoute != null && mIsBluetoothA2dpOn;
|
||||||
return mBluetoothA2dpRoute != null && mAudioService.isBluetoothA2dpOn();
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Error querying Bluetooth A2DP state", e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDiscoveryRequest() {
|
void updateDiscoveryRequest() {
|
||||||
@@ -1441,12 +1446,8 @@ public class MediaRouter {
|
|||||||
selectedRoute == sStatic.mDefaultAudioVideo) {
|
selectedRoute == sStatic.mDefaultAudioVideo) {
|
||||||
dispatchRouteVolumeChanged(selectedRoute);
|
dispatchRouteVolumeChanged(selectedRoute);
|
||||||
} else if (sStatic.mBluetoothA2dpRoute != null) {
|
} else if (sStatic.mBluetoothA2dpRoute != null) {
|
||||||
try {
|
dispatchRouteVolumeChanged(sStatic.mIsBluetoothA2dpOn
|
||||||
dispatchRouteVolumeChanged(sStatic.mAudioService.isBluetoothA2dpOn() ?
|
? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo);
|
||||||
sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Log.e(TAG, "Error checking Bluetooth A2DP state to report volume change", e);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
dispatchRouteVolumeChanged(sStatic.mDefaultAudioVideo);
|
dispatchRouteVolumeChanged(sStatic.mDefaultAudioVideo);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user