From 4cd4273392b58f79384576825e1a7e3fdc2797bd Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Thu, 14 May 2020 22:03:20 +0300 Subject: [PATCH] NY-9545: [AN]: Cannot reconnect to bluetooth after rejected PSTN call --- .../data/sdk/calls/ConferenceSDKModule.java | 49 ++++++++++++------- .../presenters/CallTapToSpeakPresenter.java | 4 -- .../presenters/ConferenceCallPresenter.java | 4 -- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java index 2ff3079665..f435c04a32 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java @@ -144,6 +144,7 @@ public class ConferenceSDKModule extends BaseSDKModule { private HashMap mConferenceWaitingRoomLNames = new HashMap<>(); private HashMap mMyAcceptedElsewhereCalls = new HashMap<>(); + private int mLastPhoneCallState = TelephonyManager.CALL_STATE_IDLE; private enum States { Connecting, Connected, Disconnecting, Disconnected @@ -571,6 +572,10 @@ public class ConferenceSDKModule extends BaseSDKModule { } public void setSpeakerState(boolean on, boolean forced) { + setSpeakerState(on, forced, true); + } + + public void setSpeakerState(boolean on, boolean forced, boolean event) { if (mConferenceAudioManager == null) { mConferenceAudioManager = AppRTCAudioManager.create(getContext()); } @@ -587,38 +592,37 @@ public class ConferenceSDKModule extends BaseSDKModule { } + if (!event) return; for (ConferenceSDKListener conferenceSDKListener : mConferenceSDKListener) { conferenceSDKListener.onSpeakerStateChanged(on); } } public void setAudioRoute(ActiveCallBase.AudioRouteType routeType) { - AudioManager audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); - if (audioManager == null) { - return; - } + setAudioRoute(routeType, true); + } - boolean isSpeakerOn = false; + public void setAudioRoute(ActiveCallBase.AudioRouteType routeType, boolean updateWith) { + if (mConferenceAudioManager == null) { + mConferenceAudioManager = AppRTCAudioManager.create(getContext()); + } switch (routeType) { case SPEAKER: - isSpeakerOn = true; - audioManager.setSpeakerphoneOn(true); - audioManager.setBluetoothScoOn(false); + setSpeakerState(true, true, false); + mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE); break; case EARPIECE: - audioManager.setBluetoothScoOn(false); - audioManager.setSpeakerphoneOn(false); + setSpeakerState(false, true, false); + mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.EARPIECE); break; case BLUETOOTH: - audioManager.setBluetoothScoOn(true); - audioManager.setSpeakerphoneOn(false); + mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.BLUETOOTH); break; } - if (hasCreatedActiveCall()) { + if (updateWith && hasCreatedActiveCall()) { mActiveConference.mAudioRouteType = routeType; - mActiveConference.isSpeakerOn = isSpeakerOn; } for (ConferenceSDKListener conferenceSDKListener : mConferenceSDKListener) @@ -3492,12 +3496,23 @@ public class ConferenceSDKModule extends BaseSDKModule { Timber.d("ConferenceModule::onReceive(): Telephony service event"); String action = intent.getAction(); if (action != null && action.equals(PHONE_STATE)) { + TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE); if (isConferenceActive()) { - TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE); - if (tm != null && tm.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK) { - endActiveCall(); + if (tm != null) { + if (tm.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK) { + endActiveCall(); + } else if (tm.getCallState() == TelephonyManager.CALL_STATE_RINGING) { + setAudioRoute(ActiveCallBase.AudioRouteType.EARPIECE, false); + //setSpeakerState(false, true, true); + } else if (mLastPhoneCallState == TelephonyManager.CALL_STATE_RINGING + && tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) { + setAudioRoute(mActiveConference.mAudioRouteType, true); + } } } + if (tm != null) { + mLastPhoneCallState = tm.getCallState();//TelephonyManager.CALL_STATE_IDLE; + } } } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallTapToSpeakPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallTapToSpeakPresenter.java index 66989287c7..0cd79c84cc 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallTapToSpeakPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallTapToSpeakPresenter.java @@ -80,8 +80,4 @@ public class CallTapToSpeakPresenter extends ConferenceSDKPresenter } - public void bluetoothDisconnected() { - mDataManager.getConferenceSDK().setSpeakerState(getActiveConference().isSpeakerOn); - } - public void switchCamera() { if (getAttachedViews().size() == 0) return; ActiveConferenceCall activeConferenceCall = mDataManager.getConferenceSDK(). -- GitLab