#if UNITY_ANDROID //&& !UNITY_EDITOR using System; using Azerion.BlueStack.API; using Azerion.BlueStack.API.Banner; using Azerion.BlueStack.Internal; using UnityEngine; namespace Azerion.BlueStack.Platforms.Android { public class BannerAdClient : AndroidJavaProxy, IBannerAdClient { 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; private AndroidJavaObject _unityBannerAd; private readonly BlueStackErrorUtils _blueStackErrorUtils; public BannerAdClient( AndroidJavaObjectFactory androidJavaObjectFactory, BlueStackErrorUtils blueStackErrorUtils ) : base(BlueStackNativeClassNames.UnityBannerAdListenerClassName) { _unityBannerAd = androidJavaObjectFactory.CreateUnityBannerAdAndroidJavaObject(this); _blueStackErrorUtils = blueStackErrorUtils; } public void CreateBannerAd(string placementId, AdPosition adPosition) { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("createBannerAd", placementId, (int)adPosition); }); } public void Load(AdSize adSize) { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("setSize", adSize.Size, adSize.Height, adSize.Width); PreferenceClient preferenceClient = new PreferenceClient(); _unityBannerAd.Call("load", preferenceClient.getRequestOptions()); }); } public void Load(AdSize adSize, IPreferenceClient iPreferenceClient) { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("setSize", adSize.Size, adSize.Height, adSize.Width); PreferenceClient preferenceClient = (PreferenceClient)iPreferenceClient; _unityBannerAd.Call("load", preferenceClient.getRequestOptions()); }); } public void Show() { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("show"); }); } public void Hide() { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("hide"); }); } public void Destroy() { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("destroy"); _unityBannerAd.Dispose(); }); } //TODO: Fix top adPosition public void SetPosition(AdPosition adPosition) { AndroidJavaObjectFactory.Instance.RunOnUiThread(() => { _unityBannerAd.Call("setPosition", (int)adPosition); }); } private AndroidJavaObject mngAdSize(AdSize adSize) { var mngFrame = new AndroidJavaObject( BlueStackNativeClassNames.MNGFrameClass, adSize.Width, adSize.Height ); return mngFrame; } public void onBannerDidLoad() { OnBannerDidLoad?.Invoke(this, EventArgs.Empty); } public void onBannerDidFailed(AndroidJavaObject adsErrorJavaObject) { OnBannerDidFailed?.Invoke( this, _blueStackErrorUtils.CreateBlueStackErrorFromJavaObject(adsErrorJavaObject) ); } public void onAdClicked() { OnAdClicked?.Invoke(this, EventArgs.Empty); } public void onBannerDidRefresh() { OnBannerDidRefresh?.Invoke(this, EventArgs.Empty); } public void onBannerDidFailToRefresh(AndroidJavaObject adsErrorJavaObject) { OnBannerDidFailToRefresh?.Invoke( this, _blueStackErrorUtils.CreateBlueStackErrorFromJavaObject(adsErrorJavaObject) ); } public void onBannerHide() { OnBannerHide?.Invoke(this, EventArgs.Empty); } public void onBannerDisplay() { OnBannerDisplay?.Invoke(this, EventArgs.Empty); } } } #endif