diff --git a/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainer.cs b/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainer.cs
index e21d36a26c48..063249e969e7 100644
--- a/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainer.cs
+++ b/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainer.cs
@@ -16,7 +16,7 @@ namespace Windows.Storage;
///
public partial class ApplicationDataContainer : IDisposable
{
- private const string InternalSettingPrefix = "__";
+ internal const string InternalSettingPrefix = "__";
private const string ContainerSeparator = "¬";
private const string ContainerListKey = InternalSettingPrefix + "UnoContainers";
@@ -42,6 +42,8 @@ internal ApplicationDataContainer(ApplicationDataContainer parent, string name)
internal string ContainerPath => _parent is null ? "" : _parent.ContainerPath + InternalSettingPrefix + Name + ContainerSeparator;
+ internal string GetSettingKey(string key) => ContainerPath + key;
+
public ApplicationDataLocality Locality { get; }
public string Name { get; }
diff --git a/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainerSettings.cs b/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainerSettings.cs
index e2fb34f760ed..f17580d236f8 100644
--- a/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainerSettings.cs
+++ b/src/Uno.UWP/Storage/ApplicationData/ApplicationDataContainerSettings.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Linq;
+using Uno.Extensions.Specialized;
using Uno.Storage;
using Windows.Foundation.Collections;
@@ -36,8 +38,8 @@ internal ApplicationDataContainerSettings(ApplicationDataContainer container, Ap
///
public object this[string key]
{
- get => _nativeApplicationSettings[key];
- set => _nativeApplicationSettings[key] = value;
+ get => _nativeApplicationSettings[_container.GetSettingKey(key)];
+ set => _nativeApplicationSettings[_container.GetSettingKey(key)] = value;
}
///
@@ -49,19 +51,22 @@ public int Count
{
get
{
- throw new global::System.NotSupportedException();
+ // Public settings count is equal to the total number of settings in the container excluding internal settings.
+ var allSettingsCount = _nativeApplicationSettings.GetKeysWithPrefix(_container.ContainerPath).Count();
+ var internalSettingsPath = _container.GetSettingKey(ApplicationDataContainer.InternalSettingPrefix);
+ var internalSettingsCount = _nativeApplicationSettings.GetKeysWithPrefix(internalSettingsPath).Count();
+
+ return allSettingsCount - internalSettingsCount;
}
}
public bool IsReadOnly => false;
- public global::System.Collections.Generic.ICollection Keys
- {
- get
- {
- throw new global::System.NotSupportedException();
- }
- }
+ public ICollection Keys => _nativeApplicationSettings
+ .GetKeysWithPrefix(_container.ContainerPath)
+ .Except(
+ _nativeApplicationSettings.GetKeysWithPrefix(_container.GetSettingKey(ApplicationDataContainer.InternalSettingPrefix))
+ );
public global::System.Collections.Generic.ICollection