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;
            }
        }