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

Commit c1a1746f authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Fix tests for CallAudioRouteStateMachine

am: d5d98841

Change-Id: I47c077604645199934ae198497e4bece4dec9c33
parents dabb50d9 d5d98841
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1078,7 +1078,7 @@ public class Call implements CreateConnectionResponse {
        }
    }

    int getSupportedAudioRoutes() {
    public int getSupportedAudioRoutes() {
        return mSupportedAudioRoutes;
    }

+26 −31
Original line number Diff line number Diff line
@@ -205,16 +205,6 @@ public class CallAudioRouteStateMachine extends StateMachine {
        Log.endSession();
    }

    private int getCurrentCallSupportedRoutes() {
        int supportedRoutes = CallAudioState.ROUTE_ALL;

        if (mCallsManager.getForegroundCall() != null) {
            supportedRoutes &= mCallsManager.getForegroundCall().getSupportedAudioRoutes();
        }

        return supportedRoutes;
    }

    abstract class AudioState extends State {
        @Override
        public void enter() {
@@ -287,18 +277,6 @@ public class CallAudioRouteStateMachine extends StateMachine {
        abstract public boolean isActive();
    }

    private int modifyRoutes(int base, int remove, int add, boolean considerCurrentCall) {
        base &= ~remove;

        if (considerCurrentCall) {
            add &= getCurrentCallSupportedRoutes();
        }

        base |= add;

        return base;
    }

    class ActiveEarpieceRoute extends EarpieceRoute {
        @Override
        public String getName() {
@@ -1236,14 +1214,14 @@ public class CallAudioRouteStateMachine extends StateMachine {

    public void initialize(CallAudioState initState) {
        if ((initState.getRoute() & getCurrentCallSupportedRoutes()) == 0) {
            Log.e(this, new IllegalArgumentException(), "Route " + initState.getRoute()
                    + "specified when supported call routes are:" + getCurrentCallSupportedRoutes());
            Log.e(this, new IllegalArgumentException(), "Route %d specified when supported call" +
                    " routes are: %d", initState.getRoute(), getCurrentCallSupportedRoutes());
        }

        mCurrentCallAudioState = initState;
        mLastKnownCallAudioState = initState;
        mDeviceSupportedRoutes = initState.getSupportedRouteMask();
        mAvailableRoutes = mDeviceSupportedRoutes;
        mAvailableRoutes = mDeviceSupportedRoutes & getCurrentCallSupportedRoutes();
        mIsMuted = initState.isMuted();
        mWasOnSpeaker = false;

@@ -1552,13 +1530,8 @@ public class CallAudioRouteStateMachine extends StateMachine {
            return isExplicitUserRequest ? USER_SWITCH_EARPIECE : SWITCH_EARPIECE;
        } else if ((mAvailableRoutes & ROUTE_WIRED_HEADSET) != 0) {
            return isExplicitUserRequest ? USER_SWITCH_HEADSET : SWITCH_HEADSET;
        } else if (!mDoesDeviceSupportEarpieceRoute) {
            return isExplicitUserRequest ? USER_SWITCH_SPEAKER : SWITCH_SPEAKER;
        } else {
            Log.e(this, new IllegalStateException(),
                    "Neither headset nor earpiece are available, but there is an " +
                            "earpiece on the device. Defaulting to earpiece.");
            return isExplicitUserRequest ? USER_SWITCH_EARPIECE : SWITCH_EARPIECE;
            return isExplicitUserRequest ? USER_SWITCH_SPEAKER : SWITCH_SPEAKER;
        }
    }

@@ -1584,4 +1557,26 @@ public class CallAudioRouteStateMachine extends StateMachine {
            sendInternalMessage(calculateBaselineRouteMessage(false));
        }
    }

    private int getCurrentCallSupportedRoutes() {
        int supportedRoutes = CallAudioState.ROUTE_ALL;

        if (mCallsManager.getForegroundCall() != null) {
            supportedRoutes &= mCallsManager.getForegroundCall().getSupportedAudioRoutes();
        }

        return supportedRoutes;
    }

    private int modifyRoutes(int base, int remove, int add, boolean considerCurrentCall) {
        base &= ~remove;

        if (considerCurrentCall) {
            add &= getCurrentCallSupportedRoutes();
        }

        base |= add;

        return base;
    }
}
+46 −1
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ public class CallAudioRouteStateMachineTest
        public boolean doesDeviceSupportEarpiece; // set to false in the case of Wear devices
        public boolean shouldRunWithFocus;

        public int callSupportedRoutes = CallAudioState.ROUTE_ALL;

        public RoutingTestParameters(String name, int initialRoute,
                int initialNotificationFilter, int availableRoutes, int speakerInteraction,
                int bluetoothInteraction, int action, int expectedRoute,
@@ -107,6 +109,11 @@ public class CallAudioRouteStateMachineTest
            this.shouldRunWithFocus = shouldRunWithFocus;
        }

        public RoutingTestParameters setCallSupportedRoutes(int routes) {
            callSupportedRoutes = routes;
            return this;
        }

        @Override
        public String toString() {
            return "RoutingTestParameters{" +
@@ -159,6 +166,7 @@ public class CallAudioRouteStateMachineTest
        when(mockCallsManager.getLock()).thenReturn(mLock);
        when(fakeCall.getConnectionService()).thenReturn(mockConnectionServiceWrapper);
        when(fakeCall.isAlive()).thenReturn(true);
        when(fakeCall.getSupportedAudioRoutes()).thenReturn(CallAudioState.ROUTE_ALL);
        setupInterruptionFilterMocks();

        doNothing().when(mockConnectionServiceWrapper).onCallAudioStateChanged(any(Call.class),
@@ -878,6 +886,38 @@ public class CallAudioRouteStateMachineTest
                shouldRunWithFocus
        ));

        params.add(new RoutingTestParameters(
                "Disconnect wired headset when call doesn't support earpiece", // name
                CallAudioState.ROUTE_WIRED_HEADSET, // initialRoute
                NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
                CallAudioState.ROUTE_WIRED_HEADSET, // availableRoutes
                ON, // speakerInteraction
                NONE, // bluetoothInteraction
                CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET, // action
                CallAudioState.ROUTE_SPEAKER, // expectedRoute
                CallAudioState.ROUTE_SPEAKER, // expectedAvailableRoutes
                NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
                false, // isNotificationChangeExpected
                true, // doesDeviceSupportEarpiece
                shouldRunWithFocus
        ).setCallSupportedRoutes(CallAudioState.ROUTE_ALL & ~CallAudioState.ROUTE_EARPIECE));

        params.add(new RoutingTestParameters(
                "Disconnect bluetooth when call does not support earpiece", // name
                CallAudioState.ROUTE_BLUETOOTH, // initialRoute
                NotificationManager.INTERRUPTION_FILTER_ALL, // initialNotificationFilter
                CallAudioState.ROUTE_BLUETOOTH,  // availableRoutes
                ON, // speakerInteraction
                OFF, // bluetoothInteraction
                CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH, // action
                CallAudioState.ROUTE_SPEAKER, // expectedRoute
                CallAudioState.ROUTE_SPEAKER, // expectedAvailableRoutes
                NotificationManager.INTERRUPTION_FILTER_ALL, // expectedNotificationFilter
                false, // isNotificationChangeExpected
                true, // doesDeviceSupportEarpiece
                shouldRunWithFocus
        ).setCallSupportedRoutes(CallAudioState.ROUTE_ALL & ~CallAudioState.ROUTE_EARPIECE));

        return params;
    }

@@ -916,6 +956,7 @@ public class CallAudioRouteStateMachineTest
                        || (params.expectedAvailableRoutes & CallAudioState.ROUTE_BLUETOOTH) != 0);
        doReturn(params.initialRoute == CallAudioState.ROUTE_SPEAKER).when(mockAudioManager).
                isSpeakerphoneOn();
        when(fakeCall.getSupportedAudioRoutes()).thenReturn(params.callSupportedRoutes);

        // Set the initial CallAudioState object
        final CallAudioState initState = new CallAudioState(false,
@@ -999,6 +1040,7 @@ public class CallAudioRouteStateMachineTest
                || (params.expectedAvailableRoutes & CallAudioState.ROUTE_BLUETOOTH) != 0);
        when(mockAudioManager.isSpeakerphoneOn()).thenReturn(
                params.initialRoute == CallAudioState.ROUTE_SPEAKER);
        when(fakeCall.getSupportedAudioRoutes()).thenReturn(params.callSupportedRoutes);

        // Set the initial CallAudioState object
        CallAudioState initState = new CallAudioState(false,
@@ -1051,10 +1093,13 @@ public class CallAudioRouteStateMachineTest

    private void resetMocks() {
        reset(mockAudioManager, mockBluetoothManager, mockCallsManager,
                mockConnectionServiceWrapper, mMockInterruptionFilterProxy);
                mockConnectionServiceWrapper, mMockInterruptionFilterProxy, fakeCall);
        mMockInterruptionFilterProxy = mock(InterruptionFilterProxy.class);
        setupInterruptionFilterMocks();
        when(mockCallsManager.getForegroundCall()).thenReturn(fakeCall);
        when(fakeCall.getConnectionService()).thenReturn(mockConnectionServiceWrapper);
        when(fakeCall.isAlive()).thenReturn(true);
        when(fakeCall.getSupportedAudioRoutes()).thenReturn(CallAudioState.ROUTE_ALL);
        when(mockCallsManager.getLock()).thenReturn(mLock);
        doNothing().when(mockConnectionServiceWrapper).onCallAudioStateChanged(any(Call.class),
                any(CallAudioState.class));