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

Commit 027d957f authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Check the device type instead of the object reference

Also print a log when restore route to default while a bluetooth
route is avaialble.

Bug: 176386259
Test: build
Change-Id: I4a974438040595597fbf4dcb0ec57d49351540ef
parent edec7fd6
Loading
Loading
Loading
Loading
+29 −18
Original line number Diff line number Diff line
@@ -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,13 +666,17 @@ 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) {
                    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 */
+3 −3
Original line number Diff line number Diff line
@@ -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));
                    }
+2 −0
Original line number Diff line number Diff line
@@ -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) {