Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5c861a6 authored by Sungsoo Lim's avatar Sungsoo Lim Committed by Android (Google) Code Review
Browse files

Merge "Cache bluetooth A2DP in AudioService callback thread"

parents 1d50e5eb 2c422650
Loading
Loading
Loading
Loading
+19 −18
Original line number Diff line number Diff line
@@ -43,8 +43,8 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.DisplayAddress;

@@ -55,7 +55,6 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;

@@ -99,6 +98,7 @@ public class MediaRouter {

        RouteInfo mDefaultAudioVideo;
        RouteInfo mBluetoothA2dpRoute;
        boolean mIsBluetoothA2dpOn;

        RouteInfo mSelectedRoute;

@@ -113,11 +113,16 @@ public class MediaRouter {
        IMediaRouterClient mClient;
        MediaRouterClientState mClientState;

        Map<Integer, Integer> mStreamVolume = new ArrayMap<>();
        SparseIntArray mStreamVolume = new SparseIntArray();

        final IAudioRoutesObserver.Stub mAudioRoutesObserver = new IAudioRoutesObserver.Stub() {
            @Override
            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() {
                    @Override public void run() {
                        updateAudioRoutes(newRoutes);
@@ -267,23 +272,23 @@ public class MediaRouter {
        }

        int getStreamVolume(int streamType) {
            if (!mStreamVolume.containsKey(streamType)) {
            int idx = mStreamVolume.indexOfKey(streamType);
            if (idx < 0) {
                int volume = 0;
                try {
                    mStreamVolume.put(streamType, mAudioService.getStreamVolume(streamType));
                    volume = mAudioService.getStreamVolume(streamType);
                    mStreamVolume.put(streamType, volume);
                } catch (RemoteException e) {
                    Log.e(TAG, "Error getting local stream volume", e);
                } finally {
                    return volume;
                }
            }
            return mStreamVolume.get(streamType);
            return mStreamVolume.valueAt(idx);
        }

        boolean isBluetoothA2dpOn() {
            try {
                return mBluetoothA2dpRoute != null && mAudioService.isBluetoothA2dpOn();
            } catch (RemoteException e) {
                Log.e(TAG, "Error querying Bluetooth A2DP state", e);
                return false;
            }
            return mBluetoothA2dpRoute != null && mIsBluetoothA2dpOn;
        }

        void updateDiscoveryRequest() {
@@ -1444,12 +1449,8 @@ public class MediaRouter {
                selectedRoute == sStatic.mDefaultAudioVideo) {
            dispatchRouteVolumeChanged(selectedRoute);
        } 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);
            }
            dispatchRouteVolumeChanged(sStatic.mIsBluetoothA2dpOn
                    ? sStatic.mBluetoothA2dpRoute : sStatic.mDefaultAudioVideo);
        } else {
            dispatchRouteVolumeChanged(sStatic.mDefaultAudioVideo);
        }