diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
index f705afd5a..c9f1f427b 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
@@ -144,8 +144,6 @@ public class CallActivity extends AppCompatActivity {
@BindView(R.id.pip_video_view)
SurfaceViewRenderer pipVideoView;
- @BindView(R.id.full_screen_surface_view)
- SurfaceViewRenderer fullScreenVideoView;
@BindView(R.id.relative_layout)
RelativeLayout relativeLayout;
@BindView(R.id.remote_renderers_layout)
@@ -300,8 +298,10 @@ public class CallActivity extends AppCompatActivity {
}
}
+ MagicPeerConnectionWrapper magicPeerConnectionWrapper;
for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
- magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
+ magicPeerConnectionWrapper = magicPeerConnectionWrapperList.get(i);
+ magicPeerConnectionWrapper.sendChannelData(new DataChannelMessage(message));
}
}
@@ -318,7 +318,7 @@ public class CallActivity extends AppCompatActivity {
toggleMedia(audioOn, false);
} else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, PERMISSIONS_MICROPHONE)) {
- // Some permission is permanently denied so we cannot request them normally.
+ // Microphone permission is permanently denied so we cannot request it normally.
OpenAppDetailsDialogFragment.show(
R.string.nc_microphone_permission_permanently_denied,
R.string.nc_permissions_settings, this);
@@ -347,7 +347,7 @@ public class CallActivity extends AppCompatActivity {
toggleMedia(videoOn, true);
} else if (EffortlessPermissions.somePermissionPermanentlyDenied(this, PERMISSIONS_CAMERA)) {
- // Some permission is permanently denied so we cannot request them normally.
+ // Camera permission is permanently denied so we cannot request it normally.
OpenAppDetailsDialogFragment.show(
R.string.nc_camera_permission_permanently_denied,
R.string.nc_permissions_settings, this);
@@ -414,18 +414,10 @@ public class CallActivity extends AppCompatActivity {
// setting this to true because it's not shown by default
pipVideoView.setMirror(true);
- rootEglBase = EglBase.create();
pipVideoView.init(rootEglBase.getEglBaseContext(), null);
pipVideoView.setZOrderMediaOverlay(true);
pipVideoView.setEnableHardwareScaler(true);
pipVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
-
- fullScreenVideoView.setMirror(true);
- fullScreenVideoView.init(rootEglBase.getEglBaseContext(), null);
- fullScreenVideoView.setZOrderMediaOverlay(true);
- fullScreenVideoView.setEnableHardwareScaler(true);
- fullScreenVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
-
}
@AfterPermissionGranted(100)
@@ -433,10 +425,12 @@ public class CallActivity extends AppCompatActivity {
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CALL)) {
if (!cameraInitialized) {
cameraInitialization();
+ onCameraClick();
}
if (!microphoneInitialized) {
microphoneInitialization();
+ onMicrophoneClick();
}
if (!inCall) {
@@ -448,16 +442,15 @@ public class CallActivity extends AppCompatActivity {
cameraInitialization();
onCameraClick();
} else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_CAMERA)) {
- cameraControlButton.setImageResource(R.drawable.ic_videocam_off_white_24px);
- cameraSwitchButton.setEnabled(false);
- cameraSwitchButton.setAlpha(0.5f);
+ cameraControlButton.setVisibility(View.GONE);
+ cameraSwitchButton.setVisibility(View.GONE);
}
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) {
microphoneInitialization();
onMicrophoneClick();
} else if (!EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) {
- microphoneControlButton.setImageResource(R.drawable.ic_mic_off_white_24px);
+ microphoneControlButton.setVisibility(View.GONE);
}
if (!inCall) {
@@ -472,12 +465,17 @@ public class CallActivity extends AppCompatActivity {
@AfterPermissionDenied(100)
private void onPermissionsDenied() {
+ microphoneControlButton.setVisibility(View.GONE);
+ cameraControlButton.setVisibility(View.GONE);
+ cameraSwitchButton.setVisibility(View.GONE);
if (!inCall) {
startCall();
}
}
private void basicInitialization() {
+ rootEglBase = EglBase.create();
+
//Initialize PeerConnectionFactory globals.
PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory.InitializationOptions
.builder(this)
@@ -489,6 +487,9 @@ public class CallActivity extends AppCompatActivity {
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
peerConnectionFactory = new PeerConnectionFactory(options);
+ peerConnectionFactory.setVideoHwAccelerationOptions(rootEglBase.getEglBaseContext(),
+ rootEglBase.getEglBaseContext());
+
//Create MediaConstraints - Will be useful for specifying video and audio constraints.
audioConstraints = new MediaConstraints();
videoConstraints = new MediaConstraints();
@@ -528,11 +529,13 @@ public class CallActivity extends AppCompatActivity {
localMediaStream.addTrack(localVideoTrack);
//create a videoRenderer based on SurfaceViewRenderer instance
- localRenderer = new VideoRenderer(fullScreenVideoView);
+ localRenderer = new VideoRenderer(pipVideoView);
// And finally, with our VideoRenderer ready, we
// can add our renderer to the VideoTrack.
localVideoTrack.addRenderer(localRenderer);
+ cameraSwitchButton.setVisibility(View.VISIBLE);
+
cameraInitialized = true;
}
@@ -552,7 +555,7 @@ public class CallActivity extends AppCompatActivity {
registerNetworkReceiver();
}
- @OnClick({R.id.full_screen_surface_view, R.id.remote_renderers_layout})
+ @OnClick({R.id.pip_video_view, R.id.remote_renderers_layout})
public void showCallControls() {
if (callControls.getVisibility() != View.VISIBLE) {
animateCallControls(true, 0);
@@ -1010,15 +1013,6 @@ public class CallActivity extends AppCompatActivity {
}
private void gotRemoteStream(MediaStream stream, String session) {
- if (fullScreenVideoView != null) {
- remoteRenderersLayout.setVisibility(View.VISIBLE);
- pipVideoView.setVisibility(View.VISIBLE);
- localVideoTrack.removeRenderer(localRenderer);
- localRenderer = new VideoRenderer(pipVideoView);
- localVideoTrack.addRenderer(localRenderer);
- relativeLayout.removeView(fullScreenVideoView);
- }
-
removeMediaStream(session);
if (stream.videoTracks.size() == 1) {
@@ -1032,13 +1026,12 @@ public class CallActivity extends AppCompatActivity {
.surface_view);
surfaceViewRenderer.setMirror(false);
surfaceViewRenderer.init(rootEglBase.getEglBaseContext(), null);
- surfaceViewRenderer.setZOrderMediaOverlay(true);
+ surfaceViewRenderer.setZOrderMediaOverlay(false);
surfaceViewRenderer.setEnableHardwareScaler(true);
surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
VideoRenderer remoteRenderer = new VideoRenderer(surfaceViewRenderer);
videoTrack.addRenderer(remoteRenderer);
remoteRenderersLayout.addView(relativeLayout);
- relativeLayout.invalidate();
gotNick(session, getPeerConnectionWrapperForSessionId(session).getNick());
} catch (Exception e) {
Log.d(TAG, "Failed to create a new video view");
@@ -1073,14 +1066,16 @@ public class CallActivity extends AppCompatActivity {
public void onStart() {
super.onStart();
eventBus.register(this);
- startVideoCapture();
+ if (videoOn && cameraInitialized) {
+ startVideoCapture();
+ }
}
@Override
public void onStop() {
super.onStop();
eventBus.unregister(this);
- if (videoCapturer != null) {
+ if (videoCapturer != null && videoOn && cameraInitialized) {
try {
videoCapturer.stopCapture();
} catch (InterruptedException e) {
diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java
index 80bee591d..996bf2cc2 100644
--- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java
+++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java
@@ -76,7 +76,7 @@ public class MagicPeerConnectionWrapper {
peerConnection = peerConnectionFactory.createPeerConnection(iceServerList, mediaConstraints,
new MagicPeerConnectionObserver());
- peerConnection.addStream(mediaStream);
+ peerConnection.addStream(localMediaStream);
this.sessionId = sessionId;
this.mediaConstraints = mediaConstraints;
@@ -293,7 +293,6 @@ public class MagicPeerConnectionWrapper {
@Override
public void onAddTrack(RtpReceiver rtpReceiver, MediaStream[] mediaStreams) {
-
}
}
diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml
index cfd633e08..5d62316c2 100644
--- a/app/src/main/res/layout/activity_call.xml
+++ b/app/src/main/res/layout/activity_call.xml
@@ -27,18 +27,13 @@
android:fitsSystemWindows="true"
tools:context=".activities.CallActivity">
-
-
+ android:background="#000000"
+ android:orientation="vertical">
+ android:src="@drawable/ic_switch_video_white_24px"
+ android:visibility="invisible"/>