//
// 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";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace ExtendedExecution
        {
            typedef enum ExtendedExecutionReason ExtendedExecutionReason;

            typedef enum ExtendedExecutionResult ExtendedExecutionResult;

            typedef enum ExtendedExecutionRevokedReason ExtendedExecutionRevokedReason;

            interface IExtendedExecutionRevokedEventArgs;

            interface IExtendedExecutionSession;

            runtimeclass ExtendedExecutionRevokedEventArgs;

            runtimeclass ExtendedExecutionSession;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace ApplicationModel
    {
        namespace ExtendedExecution
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionResult>;

                interface Windows.Foundation.TypedEventHandler<IInspectable*, Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionRevokedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace ApplicationModel
    {
        namespace ExtendedExecution
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum ExtendedExecutionReason
            {
                Unspecified      = 0,
                LocationTracking = 1,
                SavingData       = 2
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum ExtendedExecutionResult
            {
                Allowed = 0,
                Denied  = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum ExtendedExecutionRevokedReason
            {
                Resumed      = 0,
                SystemPolicy = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionRevokedEventArgs)]
            [uuid(BFBC9F16-63B5-4C0B-AAD6-828AF5373EC3)]
            interface IExtendedExecutionRevokedEventArgs : IInspectable
            {
                [propget] HRESULT Reason([out] [retval] Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionRevokedReason* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession)]
            [uuid(AF908A2D-118B-48F1-9308-0C4FC41E200F)]
            interface IExtendedExecutionSession : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT Reason([out] [retval] Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason* value);
                [propput] HRESULT Reason([in] Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason value);
                [propget] HRESULT Description([out] [retval] HSTRING* value);
                [propput] HRESULT Description([in] HSTRING value);
                [propget] HRESULT PercentProgress([out] [retval] UINT32* value);
                [propput] HRESULT PercentProgress([in] UINT32 value);
                [eventadd] HRESULT Revoked([in] Windows.Foundation.TypedEventHandler<IInspectable*, Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionRevokedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT Revoked([in] EventRegistrationToken token);
                HRESULT RequestExtensionAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionResult>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass ExtendedExecutionRevokedEventArgs
            {
                [default] interface Windows.ApplicationModel.ExtendedExecution.IExtendedExecutionRevokedEventArgs;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass ExtendedExecutionSession
            {
                [default] interface Windows.ApplicationModel.ExtendedExecution.IExtendedExecutionSession;
                interface Windows.Foundation.IClosable;
            }
        }
    }
}
