/// <summary> /// Enable or disable sound capture using the device microphone /// </summary> public void MuteMic(Boolean isMicMuted) { if (BaseModel.UIDispatcher == null) { return; } BaseModel.UIDispatcher.BeginInvoke(() => { if (LinphoneCore.CallsNb > 0) { LinphoneCore.MicMuted = isMicMuted; if (CallListener != null) { CallListener.MuteStateChanged(isMicMuted); } } }); }
/// <summary> /// Callback for LinphoneCoreListener /// </summary> public void CallState(LinphoneCall call, LinphoneCallState state, string message) { if (BaseModel.UIDispatcher == null) { return; } if (state == LinphoneCallState.OutgoingProgress) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Outgoing progress\r\n"); LookupForContact(call); if (CallListener != null && LinphoneCore.CallsNb > 0) { string sipAddress = call.RemoteAddress.AsStringUriOnly(); CallListener.NewCallStarted(sipAddress); } }); } else if (state == LinphoneCallState.IncomingReceived) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Incoming received\r\n"); if (false) //TODO: Find a proper way to let the user choose between the two. { BaseModel.CurrentPage.NavigationService.Navigate(new Uri("/Views/IncomingCall.xaml?sip=" + Utils.ReplacePlusInUri(call.RemoteAddress.AsStringUriOnly()), UriKind.RelativeOrAbsolute)); //Remove the current page from the back stack to avoid duplicating him after BaseModel.CurrentPage.NavigationService.RemoveBackEntry(); } LookupForContact(call); }); } else if (state == LinphoneCallState.Connected) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Connected\r\n"); if (CallListener != null) { string sipAddress = call.RemoteAddress.AsStringUriOnly(); CallListener.NewCallStarted(sipAddress); } }); } else if (state == LinphoneCallState.CallEnd || state == LinphoneCallState.Error) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg(String.Format("[LinphoneManager] Call ended: {0}\r\n", message)); if (CallListener != null) { CallListener.CallEnded(call); } string text; switch (call.Reason) { case Reason.LinphoneReasonNone: case Reason.LinphoneReasonNotAnswered: break; case Reason.LinphoneReasonDeclined: if (call.Direction == CallDirection.Outgoing) { text = ResourceManager.GetString("CallErrorDeclined", CultureInfo.CurrentCulture); ShowCallError(text.Replace("#address#", call.RemoteAddress.UserName)); } break; case Reason.LinphoneReasonNotFound: text = ResourceManager.GetString("CallErrorNotFound", CultureInfo.CurrentCulture); ShowCallError(text.Replace("#address#", call.RemoteAddress.UserName)); break; case Reason.LinphoneReasonBusy: text = ResourceManager.GetString("CallErrorBusy", CultureInfo.CurrentCulture); ShowCallError(text.Replace("#address#", call.RemoteAddress.UserName)); break; case Reason.LinphoneReasonNotAcceptable: ShowCallError(ResourceManager.GetString("CallErrorNotAcceptable", CultureInfo.CurrentCulture)); break; case Reason.LinphoneReasonIOError: ShowCallError(ResourceManager.GetString("CallErrorIOError", CultureInfo.CurrentCulture)); break; default: ShowCallError(ResourceManager.GetString("CallErrorUnknown", CultureInfo.CurrentCulture)); break; } }); } else if (state == LinphoneCallState.Paused || state == LinphoneCallState.PausedByRemote) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Call paused\r\n"); bool pausedByRemote = state == LinphoneCallState.PausedByRemote; if (CallListener != null) { CallListener.PauseStateChanged(call, !pausedByRemote, pausedByRemote); } }); } else if (state == LinphoneCallState.StreamsRunning) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Call running\r\n"); if (CallListener != null) { CallListener.PauseStateChanged(call, false, false); } }); } else if (state == LinphoneCallState.Released) { BaseModel.UIDispatcher.BeginInvoke(() => { Logger.Msg("[LinphoneManager] Call released\r\n"); }); } else if (state == LinphoneCallState.UpdatedByRemote) { BaseModel.UIDispatcher.BeginInvoke(() => { Boolean videoAdded = false; VideoPolicy policy = LinphoneManager.Instance.LinphoneCore.VideoPolicy; LinphoneCallParams remoteParams = call.RemoteParams; LinphoneCallParams localParams = call.GetCurrentParamsCopy(); if (remoteParams.VideoEnabled && !localParams.VideoEnabled && !LinphoneManager.Instance.LinphoneCore.InConference) { if (policy.AutomaticallyAccept) { localParams.VideoEnabled = true; LinphoneManager.Instance.LinphoneCore.AcceptCallUpdate(call, localParams); } else { videoAdded = true; } } else { LinphoneManager.Instance.LinphoneCore.AcceptCallUpdate(call, localParams); } if (CallListener != null) { CallListener.CallUpdatedByRemote(call, videoAdded); } }); } BaseModel.UIDispatcher.BeginInvoke(() => { if (CallStateChanged != null) { CallStateChanged(call, state); } }); }
public void SetCall(CallListener u) { Call = u; }
public void SetCall(CallListener u) { Call = u; }