示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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!");
  }
}
示例#5
0
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!");
  }
}