NS_IMETHODIMP TelephonyCall::Answer() { if (mCallState != nsIRadioInterfaceLayer::CALL_STATE_INCOMING) { NS_WARNING("Answer on non-incoming call ignored!"); return NS_OK; } nsresult rv = mTelephony->RIL()->AnswerCall(mCallIndex); NS_ENSURE_SUCCESS(rv, rv); ChangeStateInternal(nsIRadioInterfaceLayer::CALL_STATE_CONNECTING, true); return NS_OK; }
NS_IMETHODIMP TelephonyCall::Resume() { if (mCallState != nsITelephonyProvider::CALL_STATE_HELD) { NS_WARNING("Resume non-held call ignored!"); return NS_OK; } nsresult rv = mTelephony->Provider()->ResumeCall(mCallIndex); NS_ENSURE_SUCCESS(rv,rv); ChangeStateInternal(nsITelephonyProvider::CALL_STATE_RESUMING, true); return NS_OK; }
NS_IMETHODIMP TelephonyCall::Hold() { if (mCallState != nsITelephonyProvider::CALL_STATE_CONNECTED) { NS_WARNING("Hold non-connected call ignored!"); return NS_OK; } nsresult rv = mTelephony->Provider()->HoldCall(mCallIndex); NS_ENSURE_SUCCESS(rv,rv); ChangeStateInternal(nsITelephonyProvider::CALL_STATE_HOLDING, true); return NS_OK; }
void TelephonyCall::NotifyError(const nsAString& aError) { // Set the error string NS_ASSERTION(!mError, "Already have an error?"); mError = new mozilla::dom::DOMError(GetOwner(), aError); // Do the state transitions ChangeStateInternal(nsITelephonyProvider::CALL_STATE_DISCONNECTED, true); nsresult rv = DispatchCallEvent(NS_LITERAL_STRING("error"), this); if (NS_FAILED(rv)) { NS_WARNING("Failed to dispatch error event!"); } }
NS_IMETHODIMP TelephonyCall::HangUp() { if (mCallState == nsIRadioInterfaceLayer::CALL_STATE_DISCONNECTING || mCallState == nsIRadioInterfaceLayer::CALL_STATE_DISCONNECTED) { NS_WARNING("HangUp on previously disconnected call ignored!"); return NS_OK; } nsresult rv = mCallState == nsIRadioInterfaceLayer::CALL_STATE_INCOMING ? mTelephony->RIL()->RejectCall(mCallIndex) : mTelephony->RIL()->HangUp(mCallIndex); NS_ENSURE_SUCCESS(rv, rv); ChangeStateInternal(nsIRadioInterfaceLayer::CALL_STATE_DISCONNECTING, true); return NS_OK; }
void TelephonyCall::NotifyError(const nsAString& aError) { // Set the error string NS_ASSERTION(!mError, "Already have an error?"); mError = DOMError::CreateWithName(aError); // Do the state transitions ChangeStateInternal(nsIRadioInterfaceLayer::CALL_STATE_DISCONNECTED, true); // Notify the error event nsRefPtr<CallEvent> event = CallEvent::Create(this); NS_ASSERTION(event, "This should never fail!"); if (NS_FAILED(event->Dispatch(ToIDOMEventTarget(), NS_LITERAL_STRING("error")))) { NS_WARNING("Failed to dispatch error event!"); } }