using asap.core; using game; using GameCore; using UnityEngine; using UnityEngine.UI; public class SettingNotificationsGradePopupPanel : MonoBehaviour { public Button btn_ok; public Button btn_cancel; ISettingService settings; ILocalNotificationService notifications; bool handling; bool completed; private void Start() { settings = GContext.container.Resolve(); notifications = GContext.container.Resolve(); btn_ok.onClick.AddListener(OnBtnOk); btn_cancel.onClick.AddListener(DestroyUI); } private void OnBtnOk() { HandlePrompt(true); } void DestroyUI() { HandlePrompt(false); } async void HandlePrompt(bool openSettings) { if (this == null || handling || completed) return; handling = true; try { (settings as DefaultSettingService)?.RequirePromptOwner(); (notifications as LocalNotificationService)?.RequirePromptOwner(settings); settings.ShowNotice = true; if (openSettings && settings is DefaultSettingService bound && bound.HasKVPromptOwner) { await ((LocalNotificationService)notifications).OpenSettingsAsync(); if (this == null) return; bound.RequirePromptOwner(); } (settings as DefaultSettingService)?.RequirePromptOwner(); completed = true; UIManager.Instance.DestroyUI(gameObject.name); if (openSettings && !(settings is DefaultSettingService kv && kv.HasKVPromptOwner)) notifications.OpenSettings(); } catch (System.Exception ex) { game.DefaultSettingService.LogPromptFailure(ex); } finally { handling = false; } } }