@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.WebRtcCallActivity;
import org.thoughtcrime.securesms.contacts.ContactAccessor ;
import org.thoughtcrime.securesms.database.Address ;
import org.thoughtcrime.securesms.database.DatabaseFactory ;
import org.thoughtcrime.securesms.database.RecipientDatabase ;
import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState ;
import org.thoughtcrime.securesms.dependencies.InjectableType ;
import org.thoughtcrime.securesms.events.WebRtcViewModel ;
@ -43,6 +42,7 @@ import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences ;
import org.thoughtcrime.securesms.util.Util ;
import org.thoughtcrime.securesms.webrtc.CallNotificationBuilder ;
import org.thoughtcrime.securesms.webrtc.CameraState ;
import org.thoughtcrime.securesms.webrtc.IncomingPstnCallReceiver ;
import org.thoughtcrime.securesms.webrtc.PeerConnectionFactoryOptions ;
import org.thoughtcrime.securesms.webrtc.PeerConnectionWrapper ;
@ -104,7 +104,12 @@ import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_INC
import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_INCOMING_RINGING ;
import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_OUTGOING_RINGING ;
public class WebRtcCallService extends Service implements InjectableType , PeerConnection . Observer , DataChannel . Observer , BluetoothStateManager . BluetoothStateListener {
public class WebRtcCallService extends Service implements InjectableType ,
PeerConnection . Observer ,
DataChannel . Observer ,
BluetoothStateManager . BluetoothStateListener ,
PeerConnectionWrapper . CameraEventListener
{
private static final String TAG = WebRtcCallService . class . getSimpleName ( ) ;
@ -116,7 +121,6 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
public static final String EXTRA_REMOTE_ADDRESS = "remote_address" ;
public static final String EXTRA_MUTE = "mute_value" ;
public static final String EXTRA_CAMERA_FLIP_REAR = "camera_flip_rear_value" ;
public static final String EXTRA_AVAILABLE = "enabled_value" ;
public static final String EXTRA_REMOTE_DESCRIPTION = "remote_description" ;
public static final String EXTRA_TIMESTAMP = "timestamp" ;
@ -133,7 +137,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
public static final String ACTION_LOCAL_HANGUP = "LOCAL_HANGUP" ;
public static final String ACTION_SET_MUTE_AUDIO = "SET_MUTE_AUDIO" ;
public static final String ACTION_SET_MUTE_VIDEO = "SET_MUTE_VIDEO" ;
public static final String ACTION_ SET_CAMERA_FLIP = "SET_CAMERA_FLIP ";
public static final String ACTION_ FLIP_CAMERA = "FLIP_CAMERA ";
public static final String ACTION_BLUETOOTH_CHANGE = "BLUETOOTH_CHANGE" ;
public static final String ACTION_WIRED_HEADSET_CHANGE = "WIRED_HEADSET_CHANGE" ;
public static final String ACTION_SCREEN_OFF = "SCREEN_OFF" ;
@ -149,11 +153,11 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
public static final String ACTION_REMOTE_VIDEO_MUTE = "REMOTE_VIDEO_MUTE" ;
public static final String ACTION_ICE_CONNECTED = "ICE_CONNECTED" ;
private CallState callState = CallState . STATE_IDLE ;
private boolean microphoneEnabled = true ;
private boolean localVideoEnabled = fals e;
private boolean remoteVideoEnabled = false ;
private boolean bluetoothAvailable = false ;
private CallState callState = CallState . STATE_IDLE ;
private CameraState localCameraState = CameraState . UNKNOWN ;
private boolean microphoneEnabled = tru e;
private boolean remoteVideoEnabled = false ;
private boolean bluetoothAvailable = false ;
@Inject public SignalServiceMessageSender messageSender ;
@Inject public SignalServiceAccountManager accountManager ;
@ -210,7 +214,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
else if ( intent . getAction ( ) . equals ( ACTION_REMOTE_HANGUP ) ) handleRemoteHangup ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_SET_MUTE_AUDIO ) ) handleSetMuteAudio ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_SET_MUTE_VIDEO ) ) handleSetMuteVideo ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_ SET_CAMERA_FLIP ) ) handleSetCameraFlip ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_ FLIP_CAMERA ) ) handleSetCameraFlip ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_BLUETOOTH_CHANGE ) ) handleBluetoothChange ( intent ) ;
else if ( intent . getAction ( ) . equals ( ACTION_WIRED_HEADSET_CHANGE ) ) handleWiredHeadsetChange ( intent ) ;
else if ( intent . getAction ( ) . equals ( ( ACTION_SCREEN_OFF ) ) ) handleScreenOffChange ( intent ) ;
@ -265,6 +269,15 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
startService ( intent ) ;
}
@Override
public void onCameraSwitchCompleted ( @NonNull CameraState newCameraState ) {
this . localCameraState = newCameraState ;
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , localCameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
}
// Initializers
private void initializeResources ( ) {
@ -358,7 +371,8 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
boolean isAlwaysTurn = TextSecurePreferences . isTurnOnly ( WebRtcCallService . this ) ;
WebRtcCallService . this . peerConnection = new PeerConnectionWrapper ( WebRtcCallService . this , peerConnectionFactory , WebRtcCallService . this , localRenderer , result , ! isSystemContact | | isAlwaysTurn ) ;
WebRtcCallService . this . peerConnection = new PeerConnectionWrapper ( WebRtcCallService . this , peerConnectionFactory , WebRtcCallService . this , localRenderer , result , WebRtcCallService . this , ! isSystemContact | | isAlwaysTurn ) ;
WebRtcCallService . this . localCameraState = WebRtcCallService . this . peerConnection . getCameraState ( ) ;
WebRtcCallService . this . peerConnection . setRemoteDescription ( new SessionDescription ( SessionDescription . Type . OFFER , offer ) ) ;
WebRtcCallService . this . lockManager . updatePhoneState ( LockManager . PhoneState . PROCESSING ) ;
@ -379,6 +393,10 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
terminate ( ) ;
}
} ) ;
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , localCameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
} catch ( PeerConnectionException e ) {
Log . w ( TAG , e ) ;
terminate ( ) ;
@ -400,7 +418,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
initializeVideo ( ) ;
sendMessage ( WebRtcViewModel . State . CALL_OUTGOING , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_OUTGOING , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
lockManager . updatePhoneState ( LockManager . PhoneState . IN_CALL ) ;
audioManager . initializeAudioForCall ( ) ;
audioManager . startOutgoingRinger ( OutgoingRinger . Type . SONAR ) ;
@ -417,7 +435,8 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
try {
boolean isAlwaysTurn = TextSecurePreferences . isTurnOnly ( WebRtcCallService . this ) ;
WebRtcCallService . this . peerConnection = new PeerConnectionWrapper ( WebRtcCallService . this , peerConnectionFactory , WebRtcCallService . this , localRenderer , result , isAlwaysTurn ) ;
WebRtcCallService . this . peerConnection = new PeerConnectionWrapper ( WebRtcCallService . this , peerConnectionFactory , WebRtcCallService . this , localRenderer , result , WebRtcCallService . this , isAlwaysTurn ) ;
WebRtcCallService . this . localCameraState = WebRtcCallService . this . peerConnection . getCameraState ( ) ;
WebRtcCallService . this . dataChannel = WebRtcCallService . this . peerConnection . createDataChannel ( DATA_CHANNEL_NAME ) ;
WebRtcCallService . this . dataChannel . registerObserver ( WebRtcCallService . this ) ;
@ -434,16 +453,20 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
Log . w ( TAG , error ) ;
if ( error instanceof UntrustedIdentityException ) {
sendMessage ( WebRtcViewModel . State . UNTRUSTED_IDENTITY , recipient , ( ( UntrustedIdentityException ) error ) . getIdentityKey ( ) , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . UNTRUSTED_IDENTITY , recipient , ( ( UntrustedIdentityException ) error ) . getIdentityKey ( ) , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
} else if ( error instanceof UnregisteredUserException ) {
sendMessage ( WebRtcViewModel . State . NO_SUCH_USER , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . NO_SUCH_USER , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
} else if ( error instanceof IOException ) {
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
terminate ( ) ;
}
} ) ;
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , localCameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
} catch ( PeerConnectionException e ) {
Log . w ( TAG , e ) ;
terminate ( ) ;
@ -475,7 +498,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
@Override
public void onFailureContinue ( Throwable error ) {
Log . w ( TAG , error ) ;
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
terminate ( ) ;
}
@ -529,7 +552,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
@Override
public void onFailureContinue ( Throwable error ) {
Log . w ( TAG , error ) ;
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . NETWORK_FAILURE , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
terminate ( ) ;
}
@ -543,7 +566,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . callState = CallState . STATE_LOCAL_RINGING ;
this . lockManager . updatePhoneState ( LockManager . PhoneState . INTERACTIVE ) ;
sendMessage ( WebRtcViewModel . State . CALL_INCOMING , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_INCOMING , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
startCallCardActivity ( ) ;
audioManager . initializeAudioForCall ( ) ;
@ -565,7 +588,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . callState = CallState . STATE_REMOTE_RINGING ;
this . audioManager . startOutgoingRinger ( OutgoingRinger . Type . RINGING ) ;
sendMessage ( WebRtcViewModel . State . CALL_RINGING , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_RINGING , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
}
@ -589,10 +612,10 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
callState = CallState . STATE_CONNECTED ;
if ( local VideoEnabled ) lockManager . updatePhoneState ( LockManager . PhoneState . IN_VIDEO ) ;
else lockManager . updatePhoneState ( LockManager . PhoneState . IN_CALL ) ;
if ( local CameraState. isEnabled ( ) ) lockManager . updatePhoneState ( LockManager . PhoneState . IN_VIDEO ) ;
else lockManager . updatePhoneState ( LockManager . PhoneState . IN_CALL ) ;
sendMessage ( WebRtcViewModel . State . CALL_CONNECTED , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_CONNECTED , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
unregisterPowerButtonReceiver ( ) ;
@ -600,12 +623,12 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . peerConnection . setCommunicationMode ( ) ;
this . peerConnection . setAudioEnabled ( microphoneEnabled ) ;
this . peerConnection . setVideoEnabled ( local VideoEnabled ) ;
this . peerConnection . setVideoEnabled ( local CameraState. isEnabled ( ) ) ;
this . dataChannel . send ( new DataChannel . Buffer ( ByteBuffer . wrap ( Data . newBuilder ( )
. setVideoStreamingStatus ( WebRtcDataProtos . VideoStreamingStatus . newBuilder ( )
. setId ( this . callId )
. setEnabled ( local VideoEnabled ) )
. setEnabled ( local CameraState. isEnabled ( ) ) )
. build ( ) . toByteArray ( ) ) , false ) ) ;
}
@ -644,7 +667,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
return ;
}
sendMessage ( WebRtcViewModel . State . CALL_BUSY , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_BUSY , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
audioManager . startOutgoingRinger ( OutgoingRinger . Type . BUSY ) ;
Util . runOnMainDelayed ( new Runnable ( ) {
@ -666,7 +689,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . callState ! = CallState . STATE_CONNECTED )
{
Log . w ( TAG , "Timing out call: " + this . callId ) ;
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
if ( this . callState = = CallState . STATE_ANSWERING | | this . callState = = CallState . STATE_LOCAL_RINGING ) {
insertMissedCall ( this . recipient , true ) ;
@ -735,7 +758,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . dataChannel . send ( new DataChannel . Buffer ( ByteBuffer . wrap ( Data . newBuilder ( ) . setHangup ( Hangup . newBuilder ( ) . setId ( this . callId ) ) . build ( ) . toByteArray ( ) ) , false ) ) ;
sendMessage ( this . recipient , SignalServiceCallMessage . forHangup ( new HangupMessage ( this . callId ) ) ) ;
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
terminate ( ) ;
@ -752,9 +775,9 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
}
if ( this . callState = = CallState . STATE_DIALING | | this . callState = = CallState . STATE_REMOTE_RINGING ) {
sendMessage ( WebRtcViewModel . State . RECIPIENT_UNAVAILABLE , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . RECIPIENT_UNAVAILABLE , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
} else {
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_DISCONNECTED , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
if ( this . callState = = CallState . STATE_ANSWERING | | this . callState = = CallState . STATE_LOCAL_RINGING ) {
@ -777,26 +800,25 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
AudioManager audioManager = ServiceUtil . getAudioManager ( this ) ;
boolean muted = intent . getBooleanExtra ( EXTRA_MUTE , false ) ;
this . localVideoEnabled = ! muted ;
if ( this . peerConnection ! = null ) {
this . peerConnection . setVideoEnabled ( this . localVideoEnabled ) ;
this . peerConnection . setVideoEnabled ( ! muted ) ;
this . localCameraState = this . peerConnection . getCameraState ( ) ;
}
if ( this . callId ! = null & & this . dataChannel ! = null ) {
this . dataChannel . send ( new DataChannel . Buffer ( ByteBuffer . wrap ( Data . newBuilder ( )
. setVideoStreamingStatus ( WebRtcDataProtos . VideoStreamingStatus . newBuilder ( )
. setId ( this . callId )
. setEnabled ( localVideoEnabl ed) )
. setEnabled ( ! mut ed) )
. build ( ) . toByteArray ( ) ) , false ) ) ;
}
if ( callState = = CallState . STATE_CONNECTED ) {
if ( local VideoEnabled ) this . lockManager . updatePhoneState ( LockManager . PhoneState . IN_VIDEO ) ;
else this . lockManager . updatePhoneState ( LockManager . PhoneState . IN_CALL ) ;
if ( local CameraState. isEnabled ( ) ) this . lockManager . updatePhoneState ( LockManager . PhoneState . IN_VIDEO ) ;
else this . lockManager . updatePhoneState ( LockManager . PhoneState . IN_CALL ) ;
}
if ( local VideoEnabled & &
if ( local CameraState. isEnabled ( ) & &
! audioManager . isSpeakerphoneOn ( ) & &
! audioManager . isBluetoothScoOn ( ) & &
! audioManager . isWiredHeadsetOn ( ) )
@ -804,16 +826,17 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
audioManager . setSpeakerphoneOn ( true ) ;
}
sendMessage ( viewModelStateFor ( callState ) , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( viewModelStateFor ( callState ) , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
private void handleSetCameraFlip ( Intent intent ) {
boolean isRear = intent . getBooleanExtra ( EXTRA_CAMERA_FLIP_REAR , false ) ;
Log . w ( TAG , "handleSetCameraFlip(isRear=" + isRear + ")..." ) ;
Log . w ( TAG , "handleSetCameraFlip()..." ) ;
if ( this . localVideoEnabled ) {
if ( this . peerConnection ! = null ) {
this . peerConnection . flipCameras ( isRear ) ;
if ( localCameraState . isEnabled ( ) & & peerConnection ! = null ) {
peerConnection . flipCamera ( ) ;
localCameraState = peerConnection . getCameraState ( ) ;
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , localCameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
}
}
@ -822,7 +845,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
this . bluetoothAvailable = intent . getBooleanExtra ( EXTRA_AVAILABLE , false ) ;
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( viewModelStateFor ( callState ) , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
}
@ -839,12 +862,12 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
if ( present & & audioManager . isSpeakerphoneOn ( ) ) {
audioManager . setSpeakerphoneOn ( false ) ;
audioManager . setBluetoothScoOn ( false ) ;
} else if ( ! present & & ! audioManager . isSpeakerphoneOn ( ) & & ! audioManager . isBluetoothScoOn ( ) & & local VideoEnabled ) {
} else if ( ! present & & ! audioManager . isSpeakerphoneOn ( ) & & ! audioManager . isBluetoothScoOn ( ) & & local CameraState. isEnabled ( ) ) {
audioManager . setSpeakerphoneOn ( true ) ;
}
if ( recipient ! = null ) {
sendMessage ( viewModelStateFor ( callState ) , recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( viewModelStateFor ( callState ) , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
}
}
@ -868,7 +891,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
}
this . remoteVideoEnabled = ! muted ;
sendMessage ( WebRtcViewModel . State . CALL_CONNECTED , this . recipient , local VideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
sendMessage ( WebRtcViewModel . State . CALL_CONNECTED , this . recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ;
}
/// Helper Methods
@ -932,10 +955,10 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
}
this . callState = CallState . STATE_IDLE ;
this . localCameraState = CameraState . UNKNOWN ;
this . recipient = null ;
this . callId = null ;
this . microphoneEnabled = true ;
this . localVideoEnabled = false ;
this . remoteVideoEnabled = false ;
this . pendingOutgoingIceUpdates = null ;
this . pendingIncomingIceUpdates = null ;
@ -944,20 +967,24 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo
private void sendMessage ( @NonNull WebRtcViewModel . State state ,
@NonNull Recipient recipient ,
boolean localVideoEnabled , boolean remoteVideoEnabled ,
boolean bluetoothAvailable , boolean microphoneEnabled )
@NonNull Recipient recipient ,
@NonNull CameraState localCameraState ,
boolean remoteVideoEnabled ,
boolean bluetoothAvailable ,
boolean microphoneEnabled )
{
EventBus . getDefault ( ) . postSticky ( new WebRtcViewModel ( state , recipient , localVideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ) ;
EventBus . getDefault ( ) . postSticky ( new WebRtcViewModel ( state , recipient , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ) ;
}
private void sendMessage ( @NonNull WebRtcViewModel . State state ,
@NonNull Recipient recipient ,
@NonNull IdentityKey identityKey ,
boolean localVideoEnabled , boolean remoteVideoEnabled ,
boolean bluetoothAvailable , boolean microphoneEnabled )
@NonNull Recipient recipient ,
@NonNull IdentityKey identityKey ,
@NonNull CameraState localCameraState ,
boolean remoteVideoEnabled ,
boolean bluetoothAvailable ,
boolean microphoneEnabled )
{
EventBus . getDefault ( ) . postSticky ( new WebRtcViewModel ( state , recipient , identityKey , localVideoEnabled , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ) ;
EventBus . getDefault ( ) . postSticky ( new WebRtcViewModel ( state , recipient , identityKey , local CameraState , remoteVideoEnabled , bluetoothAvailable , microphoneEnabled ) ) ;
}
private ListenableFutureTask < Boolean > sendMessage ( @NonNull final Recipient recipient ,