#if SERVICES_SDK_CORE_ENABLED using System.Collections.Generic; using Unity.Services.Core.Editor; using UnityEditor; using UnityEngine.UIElements; namespace UnityEngine.Advertisements.Editor { class AdsSettingsProvider : EditorGameServiceSettingsProvider { VisualElement m_Root; GettingStartedUi m_GettingStartedUi; TestModeUi m_TestModeUi; GameIdsUi m_GameIdsUi; VisualElement m_SupportedPlatformsUi; bool m_HasLoggedAssetStorePackageInstalled; public AdsSettingsProvider(SettingsScope scopes, IEnumerable keywords = null) : base(GetSettingsPath(), scopes, keywords) {} [SettingsProvider] public static SettingsProvider CreateSettingsProvider() { #if ENABLE_EDITOR_GAME_SERVICES return new AdsSettingsProvider(SettingsScope.Project); #else return null; #endif } internal static string GetSettingsPath() { return GenerateProjectSettingsPath(new AdsServiceIdentifier().GetKey()); } AdsService m_Service = (AdsService)EditorGameServiceRegistry.Instance.GetEditorGameService(); protected override IEditorGameService EditorGameService => m_Service; protected override string Title => UiConstants.LocalizedStrings.Ads; protected override string Description => UiConstants.LocalizedStrings.Description; protected override VisualElement GenerateServiceDetailUI() { m_Root = new VisualElement(); m_GettingStartedUi = new GettingStartedUi(); m_TestModeUi = new TestModeUi(); m_GameIdsUi = new GameIdsUi(); m_SupportedPlatformsUi = PlatformSupportUiHelper.GeneratePlatformSupport(UiConstants.SupportedPlatforms); SetUpStyles(); RefreshDetailUI(); return m_Root; } void SetUpStyles() { m_Root.AddToClassList(UiConstants.ClassNames.Ads); var styleSheet = AssetDatabase.LoadAssetAtPath(UiConstants.StyleSheetPaths.Common); if (!(styleSheet is null)) { m_Root.styleSheets.Add(styleSheet); } } void RefreshDetailUI() { if (m_Root is null) { return; } m_Root.Clear(); m_Root.Add(m_GettingStartedUi); if (m_Service.Enabler.IsEnabled()) { m_Root.Add(m_TestModeUi); m_Root.Add(m_GameIdsUi); LogOnceAssetStorePackageInstalled(); } m_Root.Add(m_SupportedPlatformsUi); TranslateAllLabelsIn(m_Root); } void LogOnceAssetStorePackageInstalled() { if (m_HasLoggedAssetStorePackageInstalled || !PluginUtils.AreAssetStorePluginsInstalled()) { return; } Debug.LogWarning(UiConstants.LocalizedStrings.AssetStorePackageInstalledMessage); m_HasLoggedAssetStorePackageInstalled = true; } static void TranslateAllLabelsIn(VisualElement root) { root.Query() .ForEach(TranslateLabel); string TranslateLabel(TextElement label) { label.text = L10n.Tr(label.text); return label.text; } } public override void OnActivate(string searchContext, VisualElement rootElement) { base.OnActivate(searchContext, rootElement); m_Service.GameIdsUpdated += OnGameIdsUpdated; var serviceEnabler = (AdsServiceEnabler)m_Service.Enabler; serviceEnabler.ServiceEnabled += RefreshDetailUI; serviceEnabler.ServiceDisabled += RefreshDetailUI; } public override void OnDeactivate() { base.OnDeactivate(); m_Service.GameIdsUpdated -= OnGameIdsUpdated; var serviceEnabler = (AdsServiceEnabler)m_Service.Enabler; serviceEnabler.ServiceEnabled -= RefreshDetailUI; serviceEnabler.ServiceDisabled -= RefreshDetailUI; } void OnGameIdsUpdated() { if (m_GameIdsUi is null) { return; } m_GameIdsUi.RefreshGameIds(); Repaint(); } } } #endif