using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Chartboost.Constants; using Chartboost.Core.Consent; using Chartboost.Core.iOS.Modules; using Chartboost.Core.Utilities; using Chartboost.Json; using UnityEngine; using UnityEngine.Scripting; namespace Chartboost.Core.Unmanaged.iOS { /// /// /// internal sealed class UnmanagedConsentAdapter : NativeModule, IUnmanagedConsentAdapter { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void SetInstance() { if (Application.isEditor) return; Unmanaged.UnmanagedConsentAdapter.InstanceType = typeof(UnmanagedConsentAdapter); } // ReSharper disable once InconsistentNaming [Preserve] public UnmanagedConsentAdapter(bool usesIABStringsFromAppPreferences) : base(CreateInstance(usesIABStringsFromAppPreferences)) { } public bool ShouldCollectConsent { get => _CBCUnmanagedAdapterGetShouldCollectConsent(NativeInstance); set => _CBCUnmanagedAdapterSetShouldCollectConsent(NativeInstance, value); } public IReadOnlyDictionary Consents { get { var consentsJson = _CBCUnmanagedAdapterGetConsents(NativeInstance); return consentsJson.ToConsentDictionary(); } set { var consents = value ?? new Dictionary(); var consentsJson = JsonTools.SerializeObject(consents); _CBCUnmanagedAdapterSetConsents(NativeInstance, consentsJson); } } // ReSharper disable once InconsistentNaming private static IntPtr CreateInstance(bool usesIABStringsFromAppPreferences) => _CBCGetUnmanagedAdapter(usesIABStringsFromAppPreferences); // ReSharper disable once InconsistentNaming [DllImport(SharedIOSConstants.DLLImport)] private static extern IntPtr _CBCGetUnmanagedAdapter(bool usesIABStringsFromAppPreferences); [DllImport(SharedIOSConstants.DLLImport)] private static extern bool _CBCUnmanagedAdapterGetShouldCollectConsent(IntPtr uniqueId); [DllImport(SharedIOSConstants.DLLImport)] private static extern void _CBCUnmanagedAdapterSetShouldCollectConsent(IntPtr uniqueId, bool shouldCollectConsent); [DllImport(SharedIOSConstants.DLLImport)] private static extern string _CBCUnmanagedAdapterGetConsents(IntPtr uniqueId); [DllImport(SharedIOSConstants.DLLImport)] private static extern void _CBCUnmanagedAdapterSetConsents(IntPtr uniqueId, string consentsJson); } }