From 7226313bead46a65e56a8e27cc6c50b5556c5f16 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Fri, 19 Jun 2020 16:41:59 +0300 Subject: [PATCH 1/2] =?UTF-8?q?-fixed=20=20BT=20issues:=201.=20=D0=9D?= =?UTF-8?q?=D0=B8=D0=BD=D0=B4=D0=B6=D0=B0=20=D0=BA=D0=BE=D0=BB=20=D0=B2?= =?UTF-8?q?=D1=8A=D1=80=D0=B2=D0=B8,=20=D0=BF=D1=83=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D0=BC=20=D0=B1=D0=BB=D1=83=D1=82=D1=83=D1=82=D0=B0,=20=D1=82?= =?UTF-8?q?=D1=80=D1=8F=D0=B1=D0=B2=D0=B0=20=D0=B4=D0=B0=20=D0=B4=D0=B5?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=82=D0=BD=D0=B5,=20=D1=87=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=BD=D0=BE=D0=B2=20=D0=B0=D1=83=D0=B4=D0=B8?= =?UTF-8?q?=D0=BE=20=D1=80=D1=83=D1=82=20=D0=B8=20=D1=82=D1=80=D1=8F=D0=B1?= =?UTF-8?q?=D0=B2=D0=B0=20=D0=B4=D0=B0=20=D0=B3=D0=BE=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B8=20=D1=82=D0=B0=D0=BC=202.?= =?UTF-8?q?=20=D0=91=D0=BB=D1=83=D1=82=D1=83=D1=82=20=D0=B5=20=D0=B2=D1=8A?= =?UTF-8?q?=D1=80=D0=B7=D0=B0=D0=BD,=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D0=B0=D0=B2=D0=B0=D0=BC=20=D0=BD=D0=B8=D0=BD=D0=B4=D0=B6=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BB,=20=D0=BD=D0=B5=20=D0=B7=D0=B2=D1=8A?= =?UTF-8?q?=D0=BD=D0=B8=20=D0=BD=D0=B0=20=D0=B1=D0=BB=D1=83=D1=82=D1=83?= =?UTF-8?q?=D1=82=D0=B0=20(=20=D0=93=D0=A0=D0=95=D0=A8=D0=9A=D0=90=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../nynja/mobile/communicator/NynjaApp.java | 6 +-- .../mobile/communicator/data/DataManager.java | 7 +-- .../HeadphoneStateBroadcastReceiver.java | 49 +++++++++++++++-- .../data/sdk/calls/ActiveConferenceCall.java | 5 +- .../data/sdk/calls/CallStateData.java | 4 +- .../data/sdk/calls/ConferenceSDKModule.java | 52 ++++++++++++++++--- 7 files changed, 104 insertions(+), 20 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ebac35fcd4..a0454375f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -243,6 +243,7 @@ android:exported="false"> + diff --git a/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java b/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java index a069547200..c28a166af9 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java +++ b/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java @@ -157,9 +157,9 @@ public class NynjaApp extends Application { private void registerForMediaButtons() { rxBus = sApplicationComponent.dataManager().getBus(); registerForMediaButtonsLocalInputEvents(); - mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); - mReceiverComponent = new ComponentName(this, HeadphoneEventsBroadcastReceiver.class); - mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent); +// mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); +// mReceiverComponent = new ComponentName(this, HeadphoneEventsBroadcastReceiver.class); +// mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java index d4fd29b4e6..413ef431a8 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java @@ -5904,9 +5904,10 @@ public class DataManager { } catch (Exception ex) { Timber.e(ex); } - if (soundUri != null) { - mNynjaSoundManager.playCallRinging(soundUri); - } + getConferenceSDK().playIncomingRinging(soundUri); +// if (soundUri != null) { +// mNynjaSoundManager.playCallRinging(soundUri); +// } } public NynjaSoundManager.Mode getNynjaSoundManagerRingerMode() { diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneStateBroadcastReceiver.java b/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneStateBroadcastReceiver.java index 84b89cfbb6..d0492afed4 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneStateBroadcastReceiver.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneStateBroadcastReceiver.java @@ -1,5 +1,6 @@ package com.nynja.mobile.communicator.data.audio.headphones; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; @@ -10,6 +11,8 @@ import com.nynja.mobile.communicator.NynjaApp; import com.nynja.mobile.communicator.data.RxBus; import com.nynja.mobile.communicator.data.audio.headphones.data.HeadphoneState; +import timber.log.Timber; + public class HeadphoneStateBroadcastReceiver extends BroadcastReceiver { @@ -19,27 +22,65 @@ public class HeadphoneStateBroadcastReceiver extends BroadcastReceiver { AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { sendWireHeadsetConnectionState(am); - } else if ((intent.getAction().equals(BluetoothDevice.ACTION_ACL_CONNECTED) || (intent.getAction().equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)))) { - sendBTHeadsetConnectionState(am); + } else if (intent.getAction().equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) { + sendBluetoothDeviceConnectionState(intent, am); + } else if (intent.getAction().equals(BluetoothDevice.ACTION_ACL_CONNECTED)) { + sendBTHeadsetConnectionState(am, true); + } else if (intent.getAction().equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) { + sendBTHeadsetConnectionState(am, false); + } + } + + private void sendBluetoothDeviceConnectionState(Intent intent, AudioManager am) { + BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); + int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1); + switch (state) { + case BluetoothDevice.BOND_NONE: + Timber.d("sendBluetoothDeviceConnectionState(): Remote Bluetoot device is not bonded. Device: "); + mBus.localEvent(HeadphoneState.Companion.disconnected()); + break; + case BluetoothDevice.BOND_BONDING: + Timber.d("sendBluetoothDeviceConnectionState(): Remote Bluetoot device is in bonding process"); + break; + case BluetoothDevice.BOND_BONDED: + { + Timber.d("sendBluetoothDeviceConnectionState(): Remote Bluetoot device is paired"); + if (am.isBluetoothA2dpOn()) { + mBus.localEvent(HeadphoneState.Companion.connected()); + } else { + mBus.localEvent(HeadphoneState.Companion.disconnected()); + } + } + break; } } private void sendWireHeadsetConnectionState(AudioManager am) { if (am != null) { if (am.isWiredHeadsetOn()) { + Timber.d("sendWireHeadsetConnectionState(): isWiredHeadsetOn: ON"); mBus.localEvent(HeadphoneState.Companion.connected()); } else { + Timber.d("sendWireHeadsetConnectionState(): isWiredHeadsetOn: OFF"); mBus.localEvent(HeadphoneState.Companion.disconnected()); } } } - private void sendBTHeadsetConnectionState(AudioManager am) { + private void sendBTHeadsetConnectionState(AudioManager am, boolean aclConnected) { if (am != null) { if (am.isBluetoothA2dpOn()) { + Timber.d("sendBTHeadsetConnectionState(): isBluetoothA2dpOn: ON"); mBus.localEvent(HeadphoneState.Companion.connected()); } else { - mBus.localEvent(HeadphoneState.Companion.disconnected()); + Timber.d("sendBTHeadsetConnectionState(): isBluetoothA2dpOn: OFF"); + if (aclConnected) { + Timber.d("sendBTHeadsetConnectionState(): aclConnected: ON"); + mBus.localEvent(HeadphoneState.Companion.connected()); + } else { + Timber.d("sendBTHeadsetConnectionState(): aclConnected: OFF"); + mBus.localEvent(HeadphoneState.Companion.disconnected()); + } } } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ActiveConferenceCall.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ActiveConferenceCall.java index 881a7088e0..38fafd1148 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ActiveConferenceCall.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ActiveConferenceCall.java @@ -32,10 +32,11 @@ public class ActiveConferenceCall extends ActiveCallBase { public ActiveConferenceCall(NYNCall conference, String endPointId, - CallType callType, boolean isVideoEnabled, boolean outgoingCall) { + CallType callType, boolean isVideoEnabled, + boolean outgoingCall, CallStateData.AudioRouteType audioRouteType) { super(endPointId, callType, isVideoEnabled, outgoingCall); mData = new ConferenceCallData((callType == CallType.P2PCall)); - mState = new CallStateData(false, isVideoEnabled); + mState = new CallStateData(false, isVideoEnabled, audioRouteType); mConference = conference; mMembers = new ArrayList(); mMyDisplayName = ""; diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/CallStateData.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/CallStateData.java index a5c102e44d..1d4397ff6b 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/CallStateData.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/CallStateData.java @@ -52,10 +52,12 @@ public class CallStateData { pauseRestoreState = new CallStateData(this); } - public CallStateData(boolean isOwnSSActive, boolean isOwnStreamActive) { + public CallStateData(boolean isOwnSSActive, boolean isOwnStreamActive, + AudioRouteType audioRouteType) { init(); this.isOwnSSActive = isOwnSSActive; this.isOwnStreamActive = isOwnStreamActive; + this.mAudioRouteType = audioRouteType; } private void init() { 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 c7eacc2658..01d6c8005f 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 @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.media.AudioManager; +import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.CountDownTimer; @@ -147,6 +148,9 @@ public class ConferenceSDKModule extends BaseSDKModule { private HashMap mConferenceWaitingRoomLNames = new HashMap<>(); //private HashMap mMyAcceptedElsewhereCalls = new HashMap<>(); private HashMap mMyAcceptedElsewhereCalls = new HashMap<>(); + public CallStateData.AudioRouteType mActiveAudioRouteType; + public CallStateData.AudioRouteType mAudioRouteBeforeBluetooth; + private enum States { Connecting, Connected, Disconnecting, Disconnected @@ -723,9 +727,11 @@ public class ConferenceSDKModule extends BaseSDKModule { break; case BLUETOOTH: + mAudioRouteBeforeBluetooth = mActiveAudioRouteType; mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.BLUETOOTH); break; } + mActiveAudioRouteType = routeType; if (updateWith && hasCreatedActiveCall()) { mActiveConference.mState.mAudioRouteType = routeType; } @@ -754,7 +760,10 @@ public class ConferenceSDKModule extends BaseSDKModule { mStateDevice = stateDevice; mNynjaSoundManager = nynjaSoundManager; mProfileSyncManager = profileSyncManager; - //////////////////////////////////////////////////////////////////////////////////////////////////////// + mActiveAudioRouteType = CallStateData.AudioRouteType.NOT_SET; + mAudioRouteBeforeBluetooth = mActiveAudioRouteType; + + //////////////////////////////////////////////////////////////////////////////////////////////////////// // REVISE FOR Multiple account services !!!!!!!!!!!!! //if (isWriteStorageAllowed()) { // mConferenceCommunicator = NynjaCommunicator.newInstanceWithConfig( @@ -2710,7 +2719,8 @@ public class ConferenceSDKModule extends BaseSDKModule { boolean isOutcomingConference, boolean isVideoEnabled, ActiveCallBase.CallType callType) { - ActiveConferenceCall activeConference = new ActiveConferenceCall(iConference, personId, callType, isVideoEnabled, isOutcomingConference); + ActiveConferenceCall activeConference = new ActiveConferenceCall(iConference, personId, callType, + isVideoEnabled, isOutcomingConference, mActiveAudioRouteType); ContextUtils.createRootEglBase(); return activeConference; } @@ -3090,6 +3100,9 @@ public class ConferenceSDKModule extends BaseSDKModule { if (!hasCreatedActiveCall()) return false; mActiveConference.mState.isOwnStreamActive = false; initConferenceCall(startActivity); + new Handler(Looper.getMainLooper()).post(() -> { + mConferenceAudioManager.start(null); + }); Timber.d("createIncomingCallAndStartRinging with \'ConferenceId\'=\'" + callId + "; startActivity=" + (startActivity?"true": "false")); if (startActivity) { @@ -3646,11 +3659,20 @@ public class ConferenceSDKModule extends BaseSDKModule { return mActiveConference.mData.mParticipantsCountLimit; } + public void playIncomingRinging(Uri soundUri) { + if (!hasCreatedActiveCall()) return; + if (soundUri == null) return; + mConferenceAudioManager.start(null); + setSpeakerState(false, false); + mNynjaSoundManager.playCallRinging(soundUri); + } + private void playConnecting() { mNynjaSoundManager.playCallConnecting(); } private void playRinging() { + if (!hasCreatedActiveCall()) return; setSpeakerState(false, false); mNynjaSoundManager.playCallRingBack(); } @@ -3938,7 +3960,7 @@ public class ConferenceSDKModule extends BaseSDKModule { } private void switchToBTDevice() { - setSpeakerState(false, true, false); +// setSpeakerState(false, true, false); setAudioRoute(CallStateData.AudioRouteType.BLUETOOTH, true, true); } @@ -3953,15 +3975,31 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public boolean onMediaButtonsLocalEvent(Context context, LocalEvent event) { if (event instanceof HeadphoneState) { + if (!hasCreatedActiveCall()) { + Timber.d("onMediaButtonsLocalEvent(): hasCreatedActiveCall() = false "); + } HeadphoneState hs = (HeadphoneState)event; switch (hs.getState()) { case Connected: - switchToBTDevice(); - onBluetoothConnectivityChanged(true); + if (hasCreatedActiveCall()) { + switchToBTDevice(); + } else { + setSpeakerState(true, true, false); + switchToBTDevice(); + onBluetoothConnectivityChanged(true); + } break; case Disconnected: - setAudioRoute(CallStateData.AudioRouteType.EARPIECE, true, true); - onBluetoothConnectivityChanged(false); + if (hasCreatedActiveCall()) { + if (mAudioRouteBeforeBluetooth != CallStateData.AudioRouteType.NOT_SET) { + setAudioRoute(mAudioRouteBeforeBluetooth, true, true); + } else { + setAudioRoute(CallStateData.AudioRouteType.EARPIECE, true, true); + } + onBluetoothConnectivityChanged(false); + } else { + setAudioRoute(CallStateData.AudioRouteType.EARPIECE, true, true); + } break; case Play: case Pause: -- GitLab From 9e2c1b2d364226ecf8ff528aafd3861297fc644a Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Fri, 19 Jun 2020 20:41:42 +0300 Subject: [PATCH 2/2] -retored accepting calls via BT buttons --- .../nynja/mobile/communicator/NynjaApp.java | 6 +-- .../data/audio/NynjaSoundManager.kt | 5 ++- .../HeadphoneEventsBroadcastReceiver.java | 2 - .../data/sdk/calls/ConferenceSDKModule.java | 39 +++++++++---------- .../presenters/CallTapToSpeakPresenter.java | 1 + 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java b/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java index c28a166af9..a069547200 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java +++ b/app/src/main/java/com/nynja/mobile/communicator/NynjaApp.java @@ -157,9 +157,9 @@ public class NynjaApp extends Application { private void registerForMediaButtons() { rxBus = sApplicationComponent.dataManager().getBus(); registerForMediaButtonsLocalInputEvents(); -// mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); -// mReceiverComponent = new ComponentName(this, HeadphoneEventsBroadcastReceiver.class); -// mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent); + mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + mReceiverComponent = new ComponentName(this, HeadphoneEventsBroadcastReceiver.class); + mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/audio/NynjaSoundManager.kt b/app/src/main/java/com/nynja/mobile/communicator/data/audio/NynjaSoundManager.kt index b3a9ed2c02..6049c72040 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/audio/NynjaSoundManager.kt +++ b/app/src/main/java/com/nynja/mobile/communicator/data/audio/NynjaSoundManager.kt @@ -110,8 +110,9 @@ class NynjaSoundManager(context: Context) { stopSound() mMediaPlayer.setDataSource(mContext, uri) - - setStream(stream) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setStream(stream) + } mMediaPlayer.setLooping(loop) mMediaPlayer.prepare() diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneEventsBroadcastReceiver.java b/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneEventsBroadcastReceiver.java index 4e60648479..a98e29c765 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneEventsBroadcastReceiver.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/audio/headphones/HeadphoneEventsBroadcastReceiver.java @@ -20,8 +20,6 @@ public class HeadphoneEventsBroadcastReceiver extends BroadcastReceiver { mBus = NynjaApp.getComponent().rxBus(); } - abortBroadcast(); - KeyEvent keyEvent = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); int keyCode = keyEvent.getKeyCode(); Timber.d("HeadphoneEventsBroadcastReceiver::onReceive(): " + 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 01d6c8005f..8c479d3823 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 @@ -134,7 +134,6 @@ public class ConferenceSDKModule extends BaseSDKModule { private NynjaSoundManager mNynjaSoundManager; private AppRTCAudioManager mConferenceAudioManager; private AudioManager mAudioManager; - private BroadcastReceiver incomingCallReceiver; private ProfileSyncManager mProfileSyncManager; public boolean isScreenShareAllowed = false; @@ -728,6 +727,7 @@ public class ConferenceSDKModule extends BaseSDKModule { case BLUETOOTH: mAudioRouteBeforeBluetooth = mActiveAudioRouteType; + setSpeakerState(false, true, false); mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.BLUETOOTH); break; } @@ -2843,13 +2843,13 @@ public class ConferenceSDKModule extends BaseSDKModule { if (mConferenceAudioManager != null) { mConferenceAudioManager.start(null); mActiveConference.mState.isSpeakerOn = mActiveConference.isReceivingVideo(); - if (!isSpeakerPhoneForced) { - if (mActiveConference.mState.isSpeakerOn) { - mConferenceAudioManager.setDefaultAudioDevice(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE); - } else { - mConferenceAudioManager.setDefaultAudioDevice(AppRTCAudioManager.AudioDevice.EARPIECE); - } - } +// if (!isSpeakerPhoneForced) { +// if (mActiveConference.mState.isSpeakerOn) { +// mConferenceAudioManager.setDefaultAudioDevice(AppRTCAudioManager.AudioDevice.SPEAKER_PHONE); +// } else { +// mConferenceAudioManager.setDefaultAudioDevice(AppRTCAudioManager.AudioDevice.EARPIECE); +// } +// } } if (mActiveConference.isOutgoingCall) { if (mActiveConference.mCallType == ActiveCallBase.CallType.P2PCall) { @@ -3663,7 +3663,6 @@ public class ConferenceSDKModule extends BaseSDKModule { if (!hasCreatedActiveCall()) return; if (soundUri == null) return; mConferenceAudioManager.start(null); - setSpeakerState(false, false); mNynjaSoundManager.playCallRinging(soundUri); } @@ -3984,7 +3983,6 @@ public class ConferenceSDKModule extends BaseSDKModule { if (hasCreatedActiveCall()) { switchToBTDevice(); } else { - setSpeakerState(true, true, false); switchToBTDevice(); onBluetoothConnectivityChanged(true); } @@ -4007,23 +4005,24 @@ public class ConferenceSDKModule extends BaseSDKModule { case PlayPause: if (isCallRinging()) { String callId = getActiveConference().mConference.callId(); - Intent intent = new Intent(context, MainActivity.class); -// if (hs.getState() == HeadphoneState.States.Pause || hs.getState() == HeadphoneState.States.Stop) { -// intent.setAction(MainActivity.INTENT_NOTIFICATION_CALL_REJECT_ID); -// } else { - intent.setAction(MainActivity.INTENT_NOTIFICATION_CALL_ANSWER_ID); -// } - intent.putExtra(MainActivity.INTENT_NOTIFICATION_CALL_ID, callId); - intent.putExtra(MainActivity.INTENT_CALL_NOTIFICATION_ID, ActiveConferenceCall.ANDROID_10_PUSH_CALL_NTFN_ID); + setSpeakerState(false, false, false); + mConferenceAudioManager.selectAudioDevice(AppRTCAudioManager.AudioDevice.EARPIECE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { answerCall(callId); + setAudioRoute(CallStateData.AudioRouteType.EARPIECE, false); mNotificationHelper.clearCallPush(ActiveConferenceCall.ANDROID_10_PUSH_CALL_NTFN_ID); -// .setAudioRoute(ActiveCallBase.AudioRouteType.BLUETOOTH, true, true); } else { + Intent intent = new Intent(context, MainActivity.class); + intent.setAction(MainActivity.INTENT_NOTIFICATION_CALL_ANSWER_ID); + intent.putExtra(MainActivity.INTENT_NOTIFICATION_CALL_ID, callId); + intent.putExtra(MainActivity.INTENT_CALL_NOTIFICATION_ID, ActiveConferenceCall.ANDROID_10_PUSH_CALL_NTFN_ID); context.startActivity(intent); //getContext().startActivity(intent); } - switchToBTDevice(); + new Handler(Looper.getMainLooper()).postDelayed(() -> { + switchToBTDevice(); + }, Consts.DELAY_1000); } else if (hasCallInProgress()) { hangUp(); } 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 9c1d86ff04..df498f83dc 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 @@ -74,6 +74,7 @@ public class CallTapToSpeakPresenter extends ConferenceSDKPresenter