using System; using Azerion.BlueStack.Internal; namespace Azerion.BlueStack.API.Banner { public class BannerAd { private IBannerAdClient _bannerAdClient; public event EventHandler OnBannerDidLoad; public event EventHandler OnBannerDidFailed; public event EventHandler OnAdClicked; public event EventHandler OnBannerDidRefresh; public event EventHandler OnBannerDidFailToRefresh; public event EventHandler OnBannerHide; public event EventHandler OnBannerDisplay; // TODO: Refactor the BannerAdClient lifecycle (creation, destruction, disposal) across across all platforms // to improve and ensure consistent behavior. public BannerAd(string placementId, AdPosition adPosition) : this(placementId, adPosition, BlueStackAds.GetClientsFactory().CreatBannerAdClient()) { } internal BannerAd(string placementId, AdPosition adPosition, IBannerAdClient bannerAdClient) { _bannerAdClient = bannerAdClient; _bannerAdClient.CreateBannerAd(placementId, adPosition); ConfigureEvents(); } private void ConfigureEvents() { _bannerAdClient.OnBannerDidLoad += (sender, args) => { OnBannerDidLoad?.Invoke(this, args); }; _bannerAdClient.OnBannerDidFailed += (sender, args) => { OnBannerDidFailed?.Invoke(this, args); }; _bannerAdClient.OnAdClicked += (sender, args) => { OnAdClicked?.Invoke(this, args); }; _bannerAdClient.OnBannerDidRefresh += (sender, args) => { OnBannerDidRefresh?.Invoke(this, args); }; _bannerAdClient.OnBannerDidFailToRefresh += (sender, args) => { OnBannerDidFailToRefresh?.Invoke(this, args); }; _bannerAdClient.OnBannerHide += (EventSender, args) => { OnBannerHide?.Invoke(this, args); }; _bannerAdClient.OnBannerDisplay += (EventSender, args) => { OnBannerDisplay?.Invoke(this, args); }; } public void Load(AdSize adSize) { Preference preference = new Preference(); _bannerAdClient.Load(adSize, preference.getIPreferenceClient()); } public void Load(AdSize adSize, Preference preference) { _bannerAdClient.Load(adSize, preference.getIPreferenceClient()); } public void Show() { _bannerAdClient.Show(); } public void Hide() { _bannerAdClient.Hide(); } public void Destroy() { _bannerAdClient.Destroy(); } public void SetPosition(AdPosition adPosition) { _bannerAdClient.SetPosition(adPosition); } } }