//
// 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.Devices.Enumeration.idl";
import "Windows.Storage.Streams.idl";
import "Windows.UI.Popups.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            runtimeclass DeviceInformation;

            runtimeclass DevicePickerAppearance;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        typedef struct Rect Rect;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStreamReference;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Popups
        {
            typedef enum Placement Placement;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            typedef enum DialAppLaunchResult DialAppLaunchResult;

            typedef enum DialAppState DialAppState;

            typedef enum DialAppStopResult DialAppStopResult;

            typedef enum DialDeviceDisplayStatus DialDeviceDisplayStatus;

            interface IDialApp;

            interface IDialAppStateDetails;

            interface IDialDevice;

            interface IDialDevice2;

            interface IDialDevicePicker;

            interface IDialDevicePickerFilter;

            interface IDialDeviceSelectedEventArgs;

            interface IDialDeviceStatics;

            interface IDialDisconnectButtonClickedEventArgs;

            interface IDialReceiverApp;

            interface IDialReceiverApp2;

            interface IDialReceiverAppStatics;

            runtimeclass DialApp;

            runtimeclass DialAppStateDetails;

            runtimeclass DialDevice;

            runtimeclass DialDevicePicker;

            runtimeclass DialDevicePickerFilter;

            runtimeclass DialDeviceSelectedEventArgs;

            runtimeclass DialDisconnectButtonClickedEventArgs;

            runtimeclass DialReceiverApp;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppLaunchResult>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStateDetails*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStopResult>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDeviceSelectedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum DialAppLaunchResult
            {
                Launched       = 0,
                FailedToLaunch = 1,
                NotFound       = 2,
                NetworkFailure = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum DialAppState
            {
                Unknown        = 0,
                Stopped        = 1,
                Running        = 2,
                NetworkFailure = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum DialAppStopResult
            {
                Stopped               = 0,
                StopFailed            = 1,
                OperationNotSupported = 2,
                NetworkFailure        = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum DialDeviceDisplayStatus
            {
                None          = 0,
                Connecting    = 1,
                Connected     = 2,
                Disconnecting = 3,
                Disconnected  = 4,
                Error         = 5
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialApp)]
            [uuid(555FFBD3-45B7-49F3-BBD7-302DB6084646)]
            interface IDialApp : IInspectable
            {
                [propget] HRESULT AppName([out] [retval] HSTRING* value);
                HRESULT RequestLaunchAsync([in] HSTRING appArgument, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppLaunchResult>** value);
                HRESULT StopAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStopResult>** value);
                HRESULT GetAppStateAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStateDetails*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialAppStateDetails)]
            [uuid(DDC4A4A1-F5DE-400D-BEA4-8C8466BB2961)]
            interface IDialAppStateDetails : IInspectable
            {
                [propget] HRESULT State([out] [retval] Windows.Media.DialProtocol.DialAppState* value);
                [propget] HRESULT FullXml([out] [retval] HSTRING* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(FFF0EDAF-759F-41D2-A20A-7F29CE0B3784)]
            interface IDialDevice : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                HRESULT GetDialApp([in] HSTRING appName, [out] [retval] Windows.Media.DialProtocol.DialApp** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(BAB7F3D5-5BFB-4EBA-8B32-B57C5C5EE5C9)]
            interface IDialDevice2 : IInspectable
            {
                [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                [propget] HRESULT Thumbnail([out] [retval] Windows.Storage.Streams.IRandomAccessStreamReference** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDevicePicker)]
            [uuid(BA7E520A-FF59-4F4B-BDAC-D89F495AD6E1)]
            interface IDialDevicePicker : IInspectable
            {
                [propget] HRESULT Filter([out] [retval] Windows.Media.DialProtocol.DialDevicePickerFilter** value);
                [propget] HRESULT Appearance([out] [retval] Windows.Devices.Enumeration.DevicePickerAppearance** value);
                [eventadd] HRESULT DialDeviceSelected([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDeviceSelectedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DialDeviceSelected([in] EventRegistrationToken token);
                [eventadd] HRESULT DisconnectButtonClicked([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DisconnectButtonClicked([in] EventRegistrationToken token);
                [eventadd] HRESULT DialDevicePickerDismissed([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DialDevicePickerDismissed([in] EventRegistrationToken token);
                [overload("Show")] HRESULT Show([in] Windows.Foundation.Rect selection);
                [overload("Show")] HRESULT ShowWithPlacement([in] Windows.Foundation.Rect selection, [in] Windows.UI.Popups.Placement preferredPlacement);
                [overload("PickSingleDialDeviceAsync")] HRESULT PickSingleDialDeviceAsync([in] Windows.Foundation.Rect selection, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                [overload("PickSingleDialDeviceAsync")] HRESULT PickSingleDialDeviceAsyncWithPlacement([in] Windows.Foundation.Rect selection, [in] Windows.UI.Popups.Placement preferredPlacement, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                HRESULT Hide();
                HRESULT SetDisplayStatus([in] Windows.Media.DialProtocol.DialDevice* device, [in] Windows.Media.DialProtocol.DialDeviceDisplayStatus status);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDevicePickerFilter)]
            [uuid(C17C93BA-86C0-485D-B8D6-0F9A8F641590)]
            interface IDialDevicePickerFilter : IInspectable
            {
                [propget] HRESULT SupportedAppNames([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDeviceSelectedEventArgs)]
            [uuid(480B92AD-AC76-47EB-9C06-A19304DA0247)]
            interface IDialDeviceSelectedEventArgs : IInspectable
            {
                [propget] HRESULT SelectedDialDevice([out] [retval] Windows.Media.DialProtocol.DialDevice** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(AA69CC95-01F8-4758-8461-2BBD1CDC3CF3)]
            interface IDialDeviceStatics : IInspectable
            {
                HRESULT GetDeviceSelector([in] HSTRING appName, [out] [retval] HSTRING* selector);
                HRESULT FromIdAsync([in] HSTRING value, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                HRESULT DeviceInfoSupportsDialAsync([in] Windows.Devices.Enumeration.DeviceInformation* device, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs)]
            [uuid(52765152-9C81-4E55-ADC2-0EBE99CDE3B6)]
            interface IDialDisconnectButtonClickedEventArgs : IInspectable
            {
                [propget] HRESULT Device([out] [retval] Windows.Media.DialProtocol.DialDevice** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 5.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialReceiverApp)]
            [uuid(FD3E7C57-5045-470E-B304-4DD9B13E7D11)]
            interface IDialReceiverApp : IInspectable
            {
                HRESULT GetAdditionalDataAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IMap<HSTRING, HSTRING>*>** operation);
                HRESULT SetAdditionalDataAsync([in] Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<HSTRING, HSTRING>*>* additionalData, [out] [retval] Windows.Foundation.IAsyncAction** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 6.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialReceiverApp)]
            [uuid(530C5805-9130-42AC-A504-1977DCB2EA8A)]
            interface IDialReceiverApp2 : IInspectable
            {
                HRESULT GetUniqueDeviceNameAsync([out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 5.0)]
            [exclusiveto(Windows.Media.DialProtocol.DialReceiverApp)]
            [uuid(53183A3C-4C36-4D02-B28A-F2A9DA38EC52)]
            interface IDialReceiverAppStatics : IInspectable
            {
                [propget] HRESULT Current([out] [retval] Windows.Media.DialProtocol.DialReceiverApp** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialApp
            {
                [default] interface Windows.Media.DialProtocol.IDialApp;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialAppStateDetails
            {
                [default] interface Windows.Media.DialProtocol.IDialAppStateDetails;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Media.DialProtocol.IDialDeviceStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            [threading(both)]
            runtimeclass DialDevice
            {
                [default] interface Windows.Media.DialProtocol.IDialDevice;
                [contract(Windows.Foundation.UniversalApiContract, 2.0)] interface Windows.Media.DialProtocol.IDialDevice2;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialDevicePicker
            {
                [default] interface Windows.Media.DialProtocol.IDialDevicePicker;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialDevicePickerFilter
            {
                [default] interface Windows.Media.DialProtocol.IDialDevicePickerFilter;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialDeviceSelectedEventArgs
            {
                [default] interface Windows.Media.DialProtocol.IDialDeviceSelectedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass DialDisconnectButtonClickedEventArgs
            {
                [default] interface Windows.Media.DialProtocol.IDialDisconnectButtonClickedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 5.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Media.DialProtocol.IDialReceiverAppStatics, Windows.Foundation.UniversalApiContract, 5.0)]
            [threading(both)]
            runtimeclass DialReceiverApp
            {
                [default] interface Windows.Media.DialProtocol.IDialReceiverApp;
                [contract(Windows.Foundation.UniversalApiContract, 6.0)] interface Windows.Media.DialProtocol.IDialReceiverApp2;
            }
        }
    }
}
