Loading src/com/android/server/telecom/AsyncRingtonePlayer.java +4 −0 Original line number Diff line number Diff line Loading @@ -255,4 +255,8 @@ public class AsyncRingtonePlayer { } } } public boolean isPlaying() { return mRingtone != null; } } src/com/android/server/telecom/CallAudioManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,10 @@ public class CallAudioManager extends CallsManagerListenerBase { } } public boolean isRingtonePlaying() { return mRinger.isRinging(); } @VisibleForTesting public boolean startRinging() { synchronized (mCallsManager.getLock()) { Loading src/com/android/server/telecom/CallAudioModeStateMachine.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading src/com/android/server/telecom/Ringer.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java +39 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading Loading
src/com/android/server/telecom/AsyncRingtonePlayer.java +4 −0 Original line number Diff line number Diff line Loading @@ -255,4 +255,8 @@ public class AsyncRingtonePlayer { } } } public boolean isPlaying() { return mRingtone != null; } }
src/com/android/server/telecom/CallAudioManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,10 @@ public class CallAudioManager extends CallsManagerListenerBase { } } public boolean isRingtonePlaying() { return mRinger.isRinging(); } @VisibleForTesting public boolean startRinging() { synchronized (mCallsManager.getLock()) { Loading
src/com/android/server/telecom/CallAudioModeStateMachine.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
src/com/android/server/telecom/Ringer.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java +39 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } Loading