//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Phone.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        typedef struct TimeSpan TimeSpan;

        runtimeclass Uri;
    }
}
namespace Windows
{
    namespace Phone
    {
        apicontract PhoneInternalContract;
    }
}
namespace Windows
{
    namespace Phone
    {
        namespace Networking
        {
            namespace Voip
            {
                typedef enum SeamlessCallUpgradeSupport SeamlessCallUpgradeSupport;

                typedef enum VoipCallMedia VoipCallMedia;

                typedef enum VoipCallRejectReason VoipCallRejectReason;

                typedef enum VoipCallState VoipCallState;

                typedef enum VoipOperationType VoipOperationType;

                interface ICallAnswerEventArgs;

                interface ICallAnswerEventArgs2;

                interface ICallRejectEventArgs;

                interface ICallStateChangeEventArgs;

                interface IMuteChangeEventArgs;

                interface IQuerySeamlessUpgradeSupportOperation;

                interface IVoipCallCoordinator;

                interface IVoipCallCoordinator2;

                interface IVoipCallCoordinator3;

                interface IVoipCallCoordinatorStatics;

                interface IVoipCallCoordinatorWithAppDeterminedUpgrade;

                interface IVoipCallCoordinatorWithUpgrade;

                interface IVoipOperation;

                interface IVoipOperationsManager;

                interface IVoipPhoneCall;

                interface IVoipPhoneCall2;

                interface IVoipPhoneCall3;

                interface IVoipPhoneCall4;

                interface IVoipPhoneCallReady;

                runtimeclass CallAnswerEventArgs;

                runtimeclass CallRejectEventArgs;

                runtimeclass CallStateChangeEventArgs;

                runtimeclass MuteChangeEventArgs;

                runtimeclass QuerySeamlessUpgradeSupportOperation;

                runtimeclass VoipCallCoordinator;

                runtimeclass VoipPhoneCall;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Phone
    {
        namespace Networking
        {
            namespace Voip
            {
                declare
                {
                    interface Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipCallCoordinator*, Windows.Phone.Networking.Voip.MuteChangeEventArgs*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallAnswerEventArgs*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallRejectEventArgs*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallStateChangeEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Phone
    {
        namespace Networking
        {
            namespace Voip
            {
                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                enum SeamlessCallUpgradeSupport
                {
                    Unknown      = 0,
                    NotSupported = 1,
                    Supported    = 2
                };

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [flags]
                enum VoipCallMedia
                {
                    None  = 0x0,
                    Audio = 0x1,
                    Video = 0x2
                };

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                enum VoipCallRejectReason
                {
                    UserIgnored         = 0,
                    TimedOut            = 1,
                    OtherIncomingCall   = 2,
                    EmergencyCallExists = 3,
                    InvalidCallState    = 4
                };

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                enum VoipCallState
                {
                    Ended    = 0,
                    Held     = 1,
                    Active   = 2,
                    Incoming = 3,
                    Outgoing = 4
                };

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                enum VoipOperationType
                {
                    QueryRemotePartySeamless = 0
                };

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.CallAnswerEventArgs)]
                [uuid(61F132AA-F92A-48FA-AA8F-4F3A17662980)]
                interface ICallAnswerEventArgs : IInspectable
                {
                    [propget] HRESULT AcceptedMedia([out] [retval] Windows.Phone.Networking.Voip.VoipCallMedia* value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.CallAnswerEventArgs)]
                [uuid(EC5DCBBE-3C84-4DE4-8817-FC788173406E)]
                interface ICallAnswerEventArgs2 : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.ICallAnswerEventArgs
                {
                    [propget] HRESULT SourceDeviceId([out] [retval] HSTRING* value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.CallRejectEventArgs)]
                [uuid(3E04061A-CE7D-49C2-A2B8-7F49B6EAEBC5)]
                interface ICallRejectEventArgs : IInspectable
                {
                    [propget] HRESULT RejectReason([out] [retval] Windows.Phone.Networking.Voip.VoipCallRejectReason* value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.CallStateChangeEventArgs)]
                [uuid(1F3E87B0-D371-4395-8B6C-1786A42E2F18)]
                interface ICallStateChangeEventArgs : IInspectable
                {
                    [propget] HRESULT State([out] [retval] Windows.Phone.Networking.Voip.VoipCallState* value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.MuteChangeEventArgs)]
                [uuid(F914EAD4-1C94-458C-ACB7-1926A233F74C)]
                interface IMuteChangeEventArgs : IInspectable
                {
                    [propget] HRESULT Muted([out] [retval] boolean* value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.QuerySeamlessUpgradeSupportOperation)]
                [uuid(7E7ADCCE-CF2B-4EA0-8475-E1BDB4140379)]
                interface IQuerySeamlessUpgradeSupportOperation : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.IVoipOperation
                {
                    [propget] HRESULT RemoteId([out] [retval] HSTRING* value);
                    HRESULT NotifyCompletion([in] boolean succeeded, [in] Windows.Phone.Networking.Voip.SeamlessCallUpgradeSupport seamlessCallUpgradeSupport);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(0D5F3579-F6DD-4E10-9F25-3D8C91376EE8)]
                interface IVoipCallCoordinator : IInspectable
                {
                    [eventadd] HRESULT MuteRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipCallCoordinator*, Windows.Phone.Networking.Voip.MuteChangeEventArgs*>* muteChangeHandler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT MuteRequested([in] EventRegistrationToken token);
                    [eventadd] HRESULT UnmuteRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipCallCoordinator*, Windows.Phone.Networking.Voip.MuteChangeEventArgs*>* muteChangeHandler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT UnmuteRequested([in] EventRegistrationToken token);
                    HRESULT RequestNewIncomingCall([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING contactNumber, [in] Windows.Foundation.Uri* contactImage, [in] HSTRING serviceName, [in] Windows.Foundation.Uri* brandingImage, [in] HSTRING callDetails, [in] Windows.Foundation.Uri* ringtone, [in] Windows.Phone.Networking.Voip.VoipCallMedia media, [in] Windows.Foundation.TimeSpan ringTimeout, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                    HRESULT RequestNewOutgoingCall([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING serviceName, [in] Windows.Phone.Networking.Voip.VoipCallMedia media, [in] Windows.Foundation.Collections.IVector<HSTRING>* pAssociatedDeviceIds, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                    HRESULT NotifyMuted();
                    HRESULT NotifyUnmuted();
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(0290A9B8-645D-4711-8E32-926BFABF6928)]
                interface IVoipCallCoordinator2 : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.IVoipCallCoordinator
                {
                    HRESULT SetupNewAcceptedCall([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING contactNumber, [in] HSTRING serviceName, [in] Windows.Phone.Networking.Voip.VoipCallMedia media, [in] Windows.Foundation.Collections.IVector<HSTRING>* pAssociatedDeviceIds, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(80A2EDE6-0D02-40CD-8891-B4CEC6472C82)]
                interface IVoipCallCoordinator3 : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.IVoipCallCoordinator
                {
                    [overload("RequestNewIncomingCall")] HRESULT RequestNewIncomingCallWithContactRemoteId([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING contactNumber, [in] Windows.Foundation.Uri* contactImage, [in] HSTRING serviceName, [in] Windows.Foundation.Uri* brandingImage, [in] HSTRING callDetails, [in] Windows.Foundation.Uri* ringtone, [in] Windows.Phone.Networking.Voip.VoipCallMedia media, [in] Windows.Foundation.TimeSpan ringTimeout, [in] HSTRING contactRemoteId, [in] Windows.Foundation.Collections.IVector<HSTRING>* pAssociatedDeviceIds, [out] [retval] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                    HRESULT RequestNewAppInitiatedCall([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING contactNumber, [in] HSTRING serviceName, [in] Windows.Phone.Networking.Voip.VoipCallMedia media, [in] Windows.Foundation.Collections.IVector<HSTRING>* pAssociatedDeviceIds, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(10FB55BB-E07D-407E-BC39-F7CC3641D979)]
                interface IVoipCallCoordinatorStatics : IInspectable
                {
                    HRESULT GetDefault([out] [retval] Windows.Phone.Networking.Voip.VoipCallCoordinator** coordinator);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(4EC3EDA6-9CF0-405C-BCCD-CB7A8632A456)]
                interface IVoipCallCoordinatorWithAppDeterminedUpgrade : IInspectable
                {
                    HRESULT ConfirmNonSeamlessUpgrade([in] GUID callUpgradeGuid);
                    HRESULT CancelUpgrade([in] GUID callUpgradeGuid);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(6172CCBC-6DD1-4F8E-B938-5393530C31CA)]
                interface IVoipCallCoordinatorWithUpgrade : IInspectable
                {
                    HRESULT RequestOutgoingUpgradeToVideoCall([in] GUID callUpgradeGuid, [in] HSTRING context, [in] HSTRING contactName, [in] HSTRING serviceName, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                    HRESULT RequestIncomingUpgradeToVideoCall([in] HSTRING context, [in] HSTRING contactName, [in] HSTRING contactNumber, [in] Windows.Foundation.Uri* contactImage, [in] HSTRING serviceName, [in] Windows.Foundation.Uri* brandingImage, [in] HSTRING callDetails, [in] Windows.Foundation.Uri* ringtone, [in] Windows.Foundation.TimeSpan ringTimeout, [out] Windows.Phone.Networking.Voip.VoipPhoneCall** call);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [uuid(559B526D-C2CB-44D9-83A5-60CDA4B71D36)]
                interface IVoipOperation : IInspectable
                {
                    [propget] HRESULT Id([out] [retval] UINT32* operationId);
                    [propget] HRESULT Type([out] [retval] Windows.Phone.Networking.Voip.VoipOperationType* operationType);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipCallCoordinator)]
                [uuid(BA77E23C-38D9-4DFB-853F-F901978FF7FA)]
                interface IVoipOperationsManager : IInspectable
                {
                    HRESULT GetNextOperation([out] [retval] Windows.Phone.Networking.Voip.IVoipOperation** voipOperation);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipPhoneCall)]
                [uuid(716654BE-28E8-495E-B657-8053074B4150)]
                interface IVoipPhoneCall : IInspectable
                {
                    [eventadd] HRESULT EndRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallStateChangeEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT EndRequested([in] EventRegistrationToken token);
                    [eventadd] HRESULT HoldRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallStateChangeEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT HoldRequested([in] EventRegistrationToken token);
                    [eventadd] HRESULT ResumeRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallStateChangeEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT ResumeRequested([in] EventRegistrationToken token);
                    [eventadd] HRESULT AnswerRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallAnswerEventArgs*>* acceptHandler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT AnswerRequested([in] EventRegistrationToken token);
                    [eventadd] HRESULT RejectRequested([in] Windows.Foundation.TypedEventHandler<Windows.Phone.Networking.Voip.VoipPhoneCall*, Windows.Phone.Networking.Voip.CallRejectEventArgs*>* rejectHandler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT RejectRequested([in] EventRegistrationToken token);
                    HRESULT NotifyCallHeld();
                    HRESULT NotifyCallActive();
                    HRESULT NotifyCallEnded();
                    [propget] HRESULT ContactName([out] [retval] HSTRING* value);
                    [propput] HRESULT ContactName([in] HSTRING value);
                    [propget] HRESULT StartTime([out] [retval] Windows.Foundation.DateTime* value);
                    [propput] HRESULT StartTime([in] Windows.Foundation.DateTime value);
                    [propget] HRESULT CallMedia([out] [retval] Windows.Phone.Networking.Voip.VoipCallMedia* value);
                    [propput] HRESULT CallMedia([in] Windows.Phone.Networking.Voip.VoipCallMedia value);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipPhoneCall)]
                [uuid(1AC5B7DC-C83F-4862-8393-1EA14AF7EFEA)]
                interface IVoipPhoneCall2 : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.IVoipPhoneCall
                {
                    HRESULT TryShowAppUI();
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipPhoneCall)]
                [uuid(A92AB1D1-52FB-4ADF-8225-4D289B866FE0)]
                interface IVoipPhoneCall3 : IInspectable
                    requires
                        Windows.Phone.Networking.Voip.IVoipPhoneCall2,
                        Windows.Phone.Networking.Voip.IVoipPhoneCall
                {
                    HRESULT NotifyCallAccepted([in] Windows.Phone.Networking.Voip.VoipCallMedia media);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipPhoneCall)]
                [uuid(5F593D10-24EF-5006-B846-276132294A37)]
                interface IVoipPhoneCall4 : IInspectable
                {
                    [propget] HRESULT IsUsingAssociatedDevicesList([out] [retval] boolean* value);
                    [overload("NotifyCallActive")] HRESULT NotifyCallActiveOnDevices([in] Windows.Foundation.Collections.IIterable<HSTRING>* associatedDeviceIds);
                    HRESULT AddAssociatedCallControlDevice([in] HSTRING deviceId);
                    HRESULT RemoveAssociatedCallControlDevice([in] HSTRING deviceId);
                    HRESULT SetAssociatedCallControlDevices([in] Windows.Foundation.Collections.IIterable<HSTRING>* associatedDeviceIds);
                    HRESULT GetAssociatedCallControlDevices([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** result);
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [exclusiveto(Windows.Phone.Networking.Voip.VoipPhoneCall)]
                [uuid(B3F5AC79-F40F-4E52-A8EE-E8A9A71F511A)]
                interface IVoipPhoneCallReady : IInspectable
                {
                    HRESULT NotifyCallReady();
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass CallAnswerEventArgs
                {
                    [default] interface Windows.Phone.Networking.Voip.ICallAnswerEventArgs;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass CallRejectEventArgs
                {
                    [default] interface Windows.Phone.Networking.Voip.ICallRejectEventArgs;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass CallStateChangeEventArgs
                {
                    [default] interface Windows.Phone.Networking.Voip.ICallStateChangeEventArgs;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass MuteChangeEventArgs
                {
                    [default] interface Windows.Phone.Networking.Voip.IMuteChangeEventArgs;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass QuerySeamlessUpgradeSupportOperation
                {
                    interface Windows.Phone.Networking.Voip.IVoipOperation;
                    [default] interface Windows.Phone.Networking.Voip.IQuerySeamlessUpgradeSupportOperation;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Phone.Networking.Voip.IVoipCallCoordinatorStatics, Windows.Phone.PhoneInternalContract, 1.0)]
                runtimeclass VoipCallCoordinator
                {
                    [default] interface Windows.Phone.Networking.Voip.IVoipCallCoordinator;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipCallCoordinatorWithUpgrade;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipOperationsManager;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipCallCoordinatorWithAppDeterminedUpgrade;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipCallCoordinator2;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipCallCoordinator3;
                }

                [contract(Windows.Phone.PhoneInternalContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass VoipPhoneCall
                {
                    [default] interface Windows.Phone.Networking.Voip.IVoipPhoneCall;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipPhoneCallReady;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipPhoneCall2;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipPhoneCall3;
                    [contract(Windows.Phone.PhoneInternalContract, 1.0)] interface Windows.Phone.Networking.Voip.IVoipPhoneCall4;
                }
            }
        }
    }
}
