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

Commit 459b7df0 authored by Hall Liu's avatar Hall Liu Committed by Automerger Merge Worker
Browse files

Merge "Properly restart ringtone when BT device connected" into rvc-dev am:...

Merge "Properly restart ringtone when BT device connected" into rvc-dev am: 60d43359 am: 09c03c40 am: c840fe40

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telecomm/+/12089048

Change-Id: I631e112d113b3d07f803998938200395c3b67313
parents c24607db c840fe40
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -255,4 +255,8 @@ public class AsyncRingtonePlayer {
            }
        }
    }

    public boolean isPlaying() {
        return mRingtone != null;
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -449,6 +449,10 @@ public class CallAudioManager extends CallsManagerListenerBase {
        }
    }

    public boolean isRingtonePlaying() {
        return mRinger.isRinging();
    }

    @VisibleForTesting
    public boolean startRinging() {
        synchronized (mCallsManager.getLock()) {
+1 −1
Original line number Diff line number Diff line
@@ -358,7 +358,7 @@ public class CallAudioModeStateMachine extends StateMachine {
        private boolean mHasFocus = false;

        private void tryStartRinging() {
            if (mHasFocus) {
            if (mHasFocus && mCallAudioManager.isRingtonePlaying()) {
                Log.i(LOG_TAG, "RingingFocusState#tryStartRinging -- audio focus previously"
                        + " acquired and ringtone already playing -- skipping.");
                return;
+4 −0
Original line number Diff line number Diff line
@@ -458,6 +458,10 @@ public class Ringer {
        }
    }

    public boolean isRinging() {
        return mRingtonePlayer.isPlaying();
    }

    private boolean shouldRingForContact(Uri contactUri) {
        final NotificationManager manager =
                (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+39 −0
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ public class CallAudioModeStateMachineTest extends TelecomTestCase {
        verify(mCallAudioManager).setCallAudioRouteFocusState(
                CallAudioRouteStateMachine.RINGING_FOCUS);

        when(mCallAudioManager.isRingtonePlaying()).thenReturn(true);
        sm.sendMessage(CallAudioModeStateMachine.RINGER_MODE_CHANGE);
        waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);

@@ -217,6 +218,44 @@ public class CallAudioModeStateMachineTest extends TelecomTestCase {
        verify(mCallAudioManager, times(1)).startRinging();
    }

    @SmallTest
    @Test
    public void testStartRingingAfterHfpConnectedIfNotAlreadyPlaying() {
        CallAudioModeStateMachine sm = new CallAudioModeStateMachine(mSystemStateHelper,
                mAudioManager, mTestThread.getLooper());
        sm.setCallAudioManager(mCallAudioManager);
        sm.sendMessage(CallAudioModeStateMachine.ABANDON_FOCUS_FOR_TESTING);
        waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);

        resetMocks();
        when(mCallAudioManager.startRinging()).thenReturn(true);

        sm.sendMessage(CallAudioModeStateMachine.NEW_RINGING_CALL, new Builder()
                .setHasActiveOrDialingCalls(false)
                .setHasRingingCalls(true)
                .setHasHoldingCalls(false)
                .setIsTonePlaying(false)
                .setForegroundCallIsVoip(false)
                .setSession(null)
                .build());
        waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);

        assertEquals(CallAudioModeStateMachine.RING_STATE_NAME, sm.getCurrentStateName());

        verify(mAudioManager).requestAudioFocusForCall(AudioManager.STREAM_RING,
                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
        verify(mAudioManager).setMode(AudioManager.MODE_RINGTONE);
        verify(mCallAudioManager).setCallAudioRouteFocusState(
                CallAudioRouteStateMachine.RINGING_FOCUS);

        when(mCallAudioManager.isRingtonePlaying()).thenReturn(false);
        sm.sendMessage(CallAudioModeStateMachine.RINGER_MODE_CHANGE);
        waitForHandlerAction(sm.getHandler(), TEST_TIMEOUT);

        // Make sure we do try and start ringing again, since the ringtone wasn't already playing.
        verify(mCallAudioManager, times(2)).startRinging();
    }

    private void resetMocks() {
        clearInvocations(mCallAudioManager, mAudioManager);
    }