#if UNITY_ANDROID namespace GooglePlayGames.Android { using System; using System.Collections.Generic; using GooglePlayGames.BasicApi; using GooglePlayGames.BasicApi.Events; using GooglePlayGames.OurUtils; using UnityEngine; internal class AndroidEventsClient : IEventsClient { private volatile AndroidJavaObject mEventsClient; public AndroidEventsClient(AndroidJavaObject account) { using (var gamesClass = new AndroidJavaClass("com.google.android.gms.games.Games")) { mEventsClient = gamesClass.CallStatic("getEventsClient", AndroidHelperFragment.GetActivity(), account); } } public void FetchAllEvents(DataSource source, Action> callback) { callback = ToOnGameThread(callback); using (var task = mEventsClient.Call("load", source == DataSource.ReadNetworkOnly ? true : false)) { AndroidTaskUtils.AddOnSuccessListener( task, annotatedData => { using (var buffer = annotatedData.Call("get")) { int count = buffer.Call("getCount"); List result = new List(); for (int i = 0; i < count; ++i) { using (var eventJava = buffer.Call("get", i)) { result.Add(CreateEvent(eventJava)); } } buffer.Call("release"); callback.Invoke( annotatedData.Call("isStale") ? ResponseStatus.SuccessWithStale : ResponseStatus.Success, result ); } }); AndroidTaskUtils.AddOnFailureListener( task, exception => { Debug.Log("FetchAllEvents failed"); callback.Invoke(ResponseStatus.InternalError, null); }); } } public void FetchEvent(DataSource source, string eventId, Action callback) { callback = ToOnGameThread(callback); string[] ids = new string[1]; ids[0] = eventId; using (var task = mEventsClient.Call("loadByIds", source == DataSource.ReadNetworkOnly ? true : false, ids)) { AndroidTaskUtils.AddOnSuccessListener( task, annotatedData => { using (var buffer = annotatedData.Call("get")) { int count = buffer.Call("getCount"); if (count > 0) { using (var eventJava = buffer.Call("get", 0)) { callback.Invoke( annotatedData.Call("isStale") ? ResponseStatus.SuccessWithStale : ResponseStatus.Success, CreateEvent(eventJava) ); } } else { callback.Invoke( annotatedData.Call("isStale") ? ResponseStatus.SuccessWithStale : ResponseStatus.Success, null ); } buffer.Call("release"); } }); AndroidTaskUtils.AddOnFailureListener( task, exception => { Debug.Log("FetchEvent failed"); callback.Invoke(ResponseStatus.InternalError, null); }); } } public void IncrementEvent(string eventId, uint stepsToIncrement) { mEventsClient.Call("increment", eventId, (int) stepsToIncrement); } private static Action ToOnGameThread(Action toConvert) { return (val1, val2) => PlayGamesHelperObject.RunOnGameThread(() => toConvert(val1, val2)); } private static BasicApi.Events.Event CreateEvent(AndroidJavaObject eventJava) { string id = eventJava.Call("getEventId"); string name = eventJava.Call("getName"); string description = eventJava.Call("getDescription"); string imageUrl = eventJava.Call("getIconImageUrl"); ulong currentCount = (ulong) eventJava.Call("getValue"); EventVisibility visibility = eventJava.Call("isVisible") ? EventVisibility.Revealed : EventVisibility.Hidden; return new BasicApi.Events.Event(id, name, description, imageUrl, currentCount, visibility); } } } #endif