public virtual void OnClick(View arg0) { switch (arg0.Id) { case Resource.Id.btSwitchCamera: if (usingFrontCamera) { btSwitchCamera.Text = Resources.GetString(Resource.String.frontCamera); } else { btSwitchCamera.Text = Resources.GetString(Resource.String.backCamera); } usingFrontCamera = !usingFrontCamera; if (viERunning) { viEAndroidJavaAPI.StopCamera(cameraId); mLlLocalSurface.RemoveView(svLocal); viEAndroidJavaAPI.StartCamera(channel, usingFrontCamera ? 1 : 0); mLlLocalSurface.AddView(svLocal); compensateCameraRotation(); } break; case Resource.Id.btStartStopCall: StartOrStop(); break; case Resource.Id.btExit: StopAll(); Finish(); break; case Resource.Id.cbLoopback: loopbackMode = cbLoopback.Checked; if (loopbackMode) { remoteIp = LOOPBACK_IP; etRemoteIp.Text = LOOPBACK_IP; } else { remoteIp = LocalIpAddress; etRemoteIp.Text = remoteIp; } break; case Resource.Id.etRemoteIp: remoteIp = etRemoteIp.Text.ToString(); break; case Resource.Id.cbStats: isStatsOn = cbStats.Checked; if (isStatsOn) { addStatusView(); } else { removeStatusView(); } break; case Resource.Id.radio_surface: renderType = RenderType.SURFACE; break; case Resource.Id.radio_opengl: renderType = RenderType.OPENGL; break; case Resource.Id.radio_mediacodec: renderType = RenderType.MEDIACODEC; break; case Resource.Id.cbNack: enableNack = cbEnableNack.Checked; if (viERunning) { viEAndroidJavaAPI.EnableNACK(channel, enableNack); } break; case Resource.Id.cbSpeaker: if (voERunning) { RouteAudio(cbEnableSpeaker.Checked); } break; case Resource.Id.cbDebugRecording: if (voERunning && webrtcDebugDir != null) { if (cbEnableDebugAPM.Checked) { viEAndroidJavaAPI.VoE_StartDebugRecording(webrtcDebugDir + string.Format("/apm_{0:D}.dat", DateTimeHelperClass.CurrentUnixTimeMillis())); } else { viEAndroidJavaAPI.VoE_StopDebugRecording(); } } break; case Resource.Id.cbVoiceRTPDump: if (voERunning && webrtcDebugDir != null) { if (cbEnableVoiceRTPDump.Checked) { viEAndroidJavaAPI.VoE_StartIncomingRTPDump(channel, webrtcDebugDir + string.Format("/voe_{0:D}.rtp", DateTimeHelperClass.CurrentUnixTimeMillis())); } else { viEAndroidJavaAPI.VoE_StopIncomingRTPDump(channel); } } break; case Resource.Id.cbVideoRTPDump: if (viERunning && webrtcDebugDir != null) { if (cbEnableVideoRTPDump.Checked) { viEAndroidJavaAPI.StartIncomingRTPDump(channel, webrtcDebugDir + string.Format("/vie_{0:D}.rtp", DateTimeHelperClass.CurrentUnixTimeMillis())); } else { viEAndroidJavaAPI.StopIncomingRTPDump(channel); } } break; case Resource.Id.cbAutoGainControl: enableAGC = cbEnableAGC.Checked; if (voERunning) { viEAndroidJavaAPI.VoE_SetAGCStatus(enableAGC); } break; case Resource.Id.cbNoiseSuppression: enableNS = cbEnableNS.Checked; if (voERunning) { viEAndroidJavaAPI.VoE_SetNSStatus(enableNS); } break; case Resource.Id.cbAECM: enableAECM = cbEnableAECM.Checked; if (voERunning) { viEAndroidJavaAPI.VoE_SetECStatus(enableAECM); } break; } }