//
// 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.Storage.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        interface IStorageItem;

        runtimeclass StorageFile;

        runtimeclass StorageFolder;
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace AccessCache
        {
            typedef enum AccessCacheOptions AccessCacheOptions;

            typedef enum RecentStorageItemVisibility RecentStorageItemVisibility;

            typedef struct AccessListEntry AccessListEntry;

            interface IItemRemovedEventArgs;

            interface IStorageApplicationPermissionsStatics;

            interface IStorageApplicationPermissionsStatics2;

            interface IStorageItemAccessList;

            interface IStorageItemMostRecentlyUsedList;

            interface IStorageItemMostRecentlyUsedList2;

            runtimeclass AccessListEntryView;

            runtimeclass ItemRemovedEventArgs;

            runtimeclass StorageApplicationPermissions;

            runtimeclass StorageItemAccessList;

            runtimeclass StorageItemMostRecentlyUsedList;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Storage
    {
        namespace AccessCache
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Storage.AccessCache.AccessListEntry>;

                interface Windows.Foundation.Collections.IIterator<Windows.Storage.AccessCache.AccessListEntry>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Storage.AccessCache.AccessListEntry>;

                interface Windows.Foundation.TypedEventHandler<Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList*, Windows.Storage.AccessCache.ItemRemovedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Storage
    {
        namespace AccessCache
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [flags]
            enum AccessCacheOptions
            {
                None                     = 0x0,
                DisallowUserInput        = 0x1,
                FastLocationsOnly        = 0x2,
                UseReadOnlyCachedCopy    = 0x4,
                SuppressAccessTimeUpdate = 0x8
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum RecentStorageItemVisibility
            {
                AppOnly      = 0,
                AppAndSystem = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            struct AccessListEntry
            {
                HSTRING Token;
                HSTRING Metadata;
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.AccessCache.ItemRemovedEventArgs)]
            [uuid(59677E5C-55BE-4C66-BA66-5EAEA79D2631)]
            interface IItemRemovedEventArgs : IInspectable
            {
                [propget] HRESULT RemovedEntry([out] [retval] Windows.Storage.AccessCache.AccessListEntry* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.AccessCache.StorageApplicationPermissions)]
            [uuid(4391DFAA-D033-48F9-8060-3EC847D2E3F1)]
            interface IStorageApplicationPermissionsStatics : IInspectable
            {
                [propget] HRESULT FutureAccessList([out] [retval] Windows.Storage.AccessCache.StorageItemAccessList** value);
                [propget] HRESULT MostRecentlyUsedList([out] [retval] Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Storage.AccessCache.StorageApplicationPermissions)]
            [uuid(072716EC-AA05-4294-9A11-1A3D04519AD0)]
            interface IStorageApplicationPermissionsStatics2 : IInspectable
            {
                HRESULT GetFutureAccessListForUser([in] Windows.System.User* user, [out] [retval] Windows.Storage.AccessCache.StorageItemAccessList** value);
                HRESULT GetMostRecentlyUsedListForUser([in] Windows.System.User* user, [out] [retval] Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [uuid(2CAFF6AD-DE90-47F5-B2C3-DD36C9FDD453)]
            interface IStorageItemAccessList : IInspectable
            {
                [overload("Add")] HRESULT AddOverloadDefaultMetadata([in] Windows.Storage.IStorageItem* file, [out] [retval] HSTRING* token);
                [overload("Add")] HRESULT Add([in] Windows.Storage.IStorageItem* file, [in] HSTRING metadata, [out] [retval] HSTRING* token);
                [overload("AddOrReplace")] HRESULT AddOrReplaceOverloadDefaultMetadata([in] HSTRING token, [in] Windows.Storage.IStorageItem* file);
                [overload("AddOrReplace")] HRESULT AddOrReplace([in] HSTRING token, [in] Windows.Storage.IStorageItem* file, [in] HSTRING metadata);
                [overload("GetItemAsync")] HRESULT GetItemAsync([in] HSTRING token, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.IStorageItem*>** operation);
                [overload("GetFileAsync")] HRESULT GetFileAsync([in] HSTRING token, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile*>** operation);
                [overload("GetFolderAsync")] HRESULT GetFolderAsync([in] HSTRING token, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder*>** operation);
                [overload("GetItemAsync")] HRESULT GetItemWithOptionsAsync([in] HSTRING token, [in] Windows.Storage.AccessCache.AccessCacheOptions options, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.IStorageItem*>** operation);
                [overload("GetFileAsync")] HRESULT GetFileWithOptionsAsync([in] HSTRING token, [in] Windows.Storage.AccessCache.AccessCacheOptions options, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile*>** operation);
                [overload("GetFolderAsync")] HRESULT GetFolderWithOptionsAsync([in] HSTRING token, [in] Windows.Storage.AccessCache.AccessCacheOptions options, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFolder*>** operation);
                HRESULT Remove([in] HSTRING token);
                HRESULT ContainsItem([in] HSTRING token, [out] [retval] boolean* value);
                HRESULT Clear();
                HRESULT CheckAccess([in] Windows.Storage.IStorageItem* file, [out] [retval] boolean* value);
                [propget] HRESULT Entries([out] [retval] Windows.Storage.AccessCache.AccessListEntryView** entries);
                [propget] HRESULT MaximumItemsAllowed([out] [retval] UINT32* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList)]
            [uuid(016239D5-510D-411E-8CF1-C3D1EFFA4C33)]
            interface IStorageItemMostRecentlyUsedList : IInspectable
                requires
                    Windows.Storage.AccessCache.IStorageItemAccessList
            {
                [eventadd] HRESULT ItemRemoved([in] Windows.Foundation.TypedEventHandler<Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList*, Windows.Storage.AccessCache.ItemRemovedEventArgs*>* handler, [out] [retval] EventRegistrationToken* eventCookie);
                [eventremove] HRESULT ItemRemoved([in] EventRegistrationToken eventCookie);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Storage.AccessCache.StorageItemMostRecentlyUsedList)]
            [uuid(DA481EA0-ED8D-4731-A1DB-E44EE2204093)]
            interface IStorageItemMostRecentlyUsedList2 : IInspectable
                requires
                    Windows.Storage.AccessCache.IStorageItemMostRecentlyUsedList,
                    Windows.Storage.AccessCache.IStorageItemAccessList
            {
                [overload("Add")] HRESULT AddWithMetadataAndVisibility([in] Windows.Storage.IStorageItem* file, [in] HSTRING metadata, [in] Windows.Storage.AccessCache.RecentStorageItemVisibility visibility, [out] [retval] HSTRING* token);
                [overload("AddOrReplace")] HRESULT AddOrReplaceWithMetadataAndVisibility([in] HSTRING token, [in] Windows.Storage.IStorageItem* file, [in] HSTRING metadata, [in] Windows.Storage.AccessCache.RecentStorageItemVisibility visibility);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass AccessListEntryView
            {
                [default] interface Windows.Foundation.Collections.IVectorView<Windows.Storage.AccessCache.AccessListEntry>;
                interface Windows.Foundation.Collections.IIterable<Windows.Storage.AccessCache.AccessListEntry>;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass ItemRemovedEventArgs
            {
                [default] interface Windows.Storage.AccessCache.IItemRemovedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [static(Windows.Storage.AccessCache.IStorageApplicationPermissionsStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            [static(Windows.Storage.AccessCache.IStorageApplicationPermissionsStatics2, Windows.Foundation.UniversalApiContract, 8.0)]
            runtimeclass StorageApplicationPermissions
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass StorageItemAccessList
            {
                [default] interface Windows.Storage.AccessCache.IStorageItemAccessList;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            runtimeclass StorageItemMostRecentlyUsedList
            {
                [default] interface Windows.Storage.AccessCache.IStorageItemMostRecentlyUsedList;
                interface Windows.Storage.AccessCache.IStorageItemAccessList;
                [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Storage.AccessCache.IStorageItemMostRecentlyUsedList2;
            }
        }
    }
}
