Improve optional camera & mic support

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2017-12-28 19:15:06 +01:00
parent 9f80e846cd
commit f53d11774f

View File

@ -225,6 +225,7 @@ public class CallActivity extends AppCompatActivity {
callSession = "0"; callSession = "0";
credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()); credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken());
callControls.setZ(100.0f);
basicInitialization(); basicInitialization();
if (userUtils.getCurrentUser() != null && userUtils.getCurrentUser() != userEntity) { if (userUtils.getCurrentUser() != null && userUtils.getCurrentUser() != userEntity) {
@ -298,10 +299,10 @@ public class CallActivity extends AppCompatActivity {
} }
} }
MagicPeerConnectionWrapper magicPeerConnectionWrapper; if (inCall) {
for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) { for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
magicPeerConnectionWrapper = magicPeerConnectionWrapperList.get(i); magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
magicPeerConnectionWrapper.sendChannelData(new DataChannelMessage(message)); }
} }
} }
@ -406,8 +407,6 @@ public class CallActivity extends AppCompatActivity {
} }
public void initViews() { public void initViews() {
createCameraEnumerator();
if (cameraEnumerator.getDeviceNames().length < 2) { if (cameraEnumerator.getDeviceNames().length < 2) {
cameraSwitchButton.setVisibility(View.GONE); cameraSwitchButton.setVisibility(View.GONE);
} }
@ -423,34 +422,44 @@ public class CallActivity extends AppCompatActivity {
@AfterPermissionGranted(100) @AfterPermissionGranted(100)
private void checkPermissions() { private void checkPermissions() {
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CALL)) { if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CALL)) {
if (!cameraInitialized) { if (!videoOn) {
cameraInitialization();
onCameraClick(); onCameraClick();
} }
if (!microphoneInitialized) { if (!audioOn) {
microphoneInitialization();
onMicrophoneClick(); onMicrophoneClick();
} }
if (cameraSwitchButton != null && cameraEnumerator.getDeviceNames().length > 1) {
cameraSwitchButton.setVisibility(View.VISIBLE);
}
if (!inCall) { if (!inCall) {
startCall(); startCall();
} }
} else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, } else if (EffortlessPermissions.somePermissionPermanentlyDenied(this,
PERMISSIONS_CALL)) { PERMISSIONS_CALL)) {
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) { if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) {
cameraInitialization(); if (!videoOn) {
onCameraClick(); onCameraClick();
}
if (cameraSwitchButton != null && cameraEnumerator.getDeviceNames().length > 1) {
cameraSwitchButton.setVisibility(View.VISIBLE);
}
} else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) { } else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) {
cameraControlButton.setVisibility(View.GONE); cameraControlButton.setImageResource(R.drawable.ic_videocam_off_white_24px);
cameraSwitchButton.setVisibility(View.GONE); if (cameraSwitchButton != null) {
cameraSwitchButton.setVisibility(View.INVISIBLE);
}
} }
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) {
microphoneInitialization(); if (!audioOn) {
onMicrophoneClick(); onMicrophoneClick();
}
} else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { } else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) {
microphoneControlButton.setVisibility(View.GONE); microphoneControlButton.setImageResource(R.drawable.ic_mic_off_white_24px);
} }
if (!inCall) { if (!inCall) {
@ -465,9 +474,9 @@ public class CallActivity extends AppCompatActivity {
@AfterPermissionDenied(100) @AfterPermissionDenied(100)
private void onPermissionsDenied() { private void onPermissionsDenied() {
microphoneControlButton.setVisibility(View.GONE); if (cameraSwitchButton != null) {
cameraControlButton.setVisibility(View.GONE); cameraSwitchButton.setVisibility(View.INVISIBLE);
cameraSwitchButton.setVisibility(View.GONE); }
if (!inCall) { if (!inCall) {
startCall(); startCall();
} }
@ -475,6 +484,7 @@ public class CallActivity extends AppCompatActivity {
private void basicInitialization() { private void basicInitialization() {
rootEglBase = EglBase.create(); rootEglBase = EglBase.create();
createCameraEnumerator();
//Initialize PeerConnectionFactory globals. //Initialize PeerConnectionFactory globals.
PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory.InitializationOptions PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory.InitializationOptions
@ -518,6 +528,9 @@ public class CallActivity extends AppCompatActivity {
sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "true")); sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "true"));
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true")); sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true"));
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true")); sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
cameraInitialization();
microphoneInitialization();
} }
private void cameraInitialization() { private void cameraInitialization() {
@ -527,6 +540,7 @@ public class CallActivity extends AppCompatActivity {
videoSource = peerConnectionFactory.createVideoSource(videoCapturer); videoSource = peerConnectionFactory.createVideoSource(videoCapturer);
localVideoTrack = peerConnectionFactory.createVideoTrack("NCv0", videoSource); localVideoTrack = peerConnectionFactory.createVideoTrack("NCv0", videoSource);
localMediaStream.addTrack(localVideoTrack); localMediaStream.addTrack(localVideoTrack);
localVideoTrack.setEnabled(false);
//create a videoRenderer based on SurfaceViewRenderer instance //create a videoRenderer based on SurfaceViewRenderer instance
localRenderer = new VideoRenderer(pipVideoView); localRenderer = new VideoRenderer(pipVideoView);
@ -534,8 +548,6 @@ public class CallActivity extends AppCompatActivity {
// can add our renderer to the VideoTrack. // can add our renderer to the VideoTrack.
localVideoTrack.addRenderer(localRenderer); localVideoTrack.addRenderer(localRenderer);
cameraSwitchButton.setVisibility(View.VISIBLE);
cameraInitialized = true; cameraInitialized = true;
} }
@ -543,6 +555,7 @@ public class CallActivity extends AppCompatActivity {
//create an AudioSource instance //create an AudioSource instance
audioSource = peerConnectionFactory.createAudioSource(audioConstraints); audioSource = peerConnectionFactory.createAudioSource(audioConstraints);
localAudioTrack = peerConnectionFactory.createAudioTrack("NCa0", audioSource); localAudioTrack = peerConnectionFactory.createAudioTrack("NCa0", audioSource);
localAudioTrack.setEnabled(false);
localMediaStream.addTrack(localAudioTrack); localMediaStream.addTrack(localAudioTrack);
microphoneInitialized = true; microphoneInitialized = true;
@ -1066,7 +1079,7 @@ public class CallActivity extends AppCompatActivity {
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
eventBus.register(this); eventBus.register(this);
if (videoOn && cameraInitialized) { if (videoOn && EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) {
startVideoCapture(); startVideoCapture();
} }
} }
@ -1075,7 +1088,7 @@ public class CallActivity extends AppCompatActivity {
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
eventBus.unregister(this); eventBus.unregister(this);
if (videoCapturer != null && videoOn && cameraInitialized) { if (videoCapturer != null && EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) {
try { try {
videoCapturer.stopCapture(); videoCapturer.stopCapture();
} catch (InterruptedException e) { } catch (InterruptedException e) {
@ -1094,8 +1107,10 @@ public class CallActivity extends AppCompatActivity {
peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
.PeerConnectionEventType.SENSOR_NEAR)) { .PeerConnectionEventType.SENSOR_NEAR)) {
boolean enableVideo = peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent boolean enableVideo = peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
.PeerConnectionEventType.SENSOR_FAR); .PeerConnectionEventType.SENSOR_FAR) && videoOn;
toggleMedia(enableVideo, true); if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA) && inCall) {
toggleMedia(enableVideo, true);
}
} else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
.PeerConnectionEventType.NICK_CHANGE)) { .PeerConnectionEventType.NICK_CHANGE)) {
runOnUiThread(() -> gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick())); runOnUiThread(() -> gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick()));