using System; using System.Collections; using System.Collections.Generic; using Android.App; using Android.Content; using Android.Gms.Common; using Android.Gms.Common.Apis; using Android.Gms.Extensions; using Android.Gms.Games; using Android.Gms.Games.Achievement; using Android.Runtime; using Android.Views; using Android.Widget; using Coroutine; using GameAnalyticsSDK; using GameAnalyticsSDK.Utilities; using TouchyTickets; using Achievement = TouchyTickets.Achievement; using Uri = Android.Net.Uri; namespace Android { public class AndroidPlatform : Platform { public const int GooglePlayLoginRequest = 9001; public const int ShowAchievementsRequest = 9002; private static readonly Dictionary AchievementIds = new Dictionary { {"1Stars", "CgkI_Lyp7PcEEAIQAw"}, {"10Stars", "CgkI_Lyp7PcEEAIQBA"}, {"100Stars", "CgkI_Lyp7PcEEAIQBQ"}, {"FullMap", "CgkI_Lyp7PcEEAIQBg"}, {"OnlySmallRides", "CgkI_Lyp7PcEEAIQBw"}, {"OnlyRelaxedRides", "CgkI_Lyp7PcEEAIQCA"}, {"OnlyWalkingRides", "CgkI_Lyp7PcEEAIQCQ"}, {"OnlyNonTechnologyRides", "CgkI_Lyp7PcEEAIQCg"}, {"100Modifiers", "CgkI_Lyp7PcEEAIQCw"}, {"500Modifiers", "CgkI_Lyp7PcEEAIQDA"}, {"1000Modifiers", "CgkI_Lyp7PcEEAIQDQ"}, {"5000Modifiers", "CgkI_Lyp7PcEEAIQDg"}, {"1ExpTickets", "CgkI_Lyp7PcEEAIQDw"}, {"2ExpTickets", "CgkI_Lyp7PcEEAIQEA"}, {"3ExpTickets", "CgkI_Lyp7PcEEAIQEQ"}, {"4ExpTickets", "CgkI_Lyp7PcEEAIQEg"}, {"5ExpTickets", "CgkI_Lyp7PcEEAIQEw"}, {"6ExpTickets", "CgkI_Lyp7PcEEAIQFA"}, {"7ExpTickets", "CgkI_Lyp7PcEEAIQFQ"}, {"8ExpTickets", "CgkI_Lyp7PcEEAIQFg"}, {"9ExpTickets", "CgkI_Lyp7PcEEAIQFw"}, {"10ExpTickets", "CgkI_Lyp7PcEEAIQGA"} }; private readonly Activity activity; private readonly LinearLayout adLayout; public GoogleApiClient GoogleApi { get; private set; } public AndroidPlatform(Activity activity, LinearLayout adLayout) { this.activity = activity; this.adLayout = adLayout; } public override void SetupOnlineInteractions(Dictionary analyticsJson) { // Analytics GameAnalytics.SetAutoDetectAppVersion(true); GameAnalytics.Initialize(this.activity, GA_MiniJSON.Serialize(new Hashtable(analyticsJson))); AndroidEnvironment.UnhandledExceptionRaiser += (o, args) => GameAnalytics.NewErrorEvent(GAErrorSeverity.Critical, args.Exception.ToString()); // TODO fix ads // Ads /*try { var ad = new AdView(this.activity) { AdUnitId = "ca-app-pub-5754829579653773/7841535920", AdSize = AdSize.SmartBanner }; ad.LoadAd(new AdRequest.Builder() .AddTestDevice("14B965C6457E17D2808061ADF7E34923") .Build()); this.adLayout.AddView(ad); } catch (Exception e) { GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "Ads " + e); }*/ // TODO fix google play game services /*// Google Play game services try { this.GoogleApi = new GoogleApiClient.Builder(this.activity) .AddApi(GamesClass.API) .AddScope(GamesClass.ScopeGames) .AddOnConnectionFailedListener(res => { if (res.HasResolution) { res.StartResolutionForResult(this.activity, GooglePlayLoginRequest); } else { throw new GoogleApiClientConnectionException(res); } }) .Build(); this.GoogleApi.Connect(); } catch (Exception e) { GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "GoogleApiClient " + e); }*/ #if DEBUG // Sanity check to ensure that all achievements are mapped foreach (var achievement in Achievement.Achievements.Values) { var _ = AchievementIds[achievement.Name]; } #endif } public override void AddResourceEvent(bool sink, string currency, float amount, string itemType, string itemId) { GameAnalytics.NewResourceEvent(sink ? GAResourceFlowType.Sink : GAResourceFlowType.Source, currency, amount, itemType, itemId); } public override void SetKeepScreenOn(bool keep) { if (keep) { this.activity.Window.AddFlags(WindowManagerFlags.KeepScreenOn); } else { this.activity.Window.ClearFlags(WindowManagerFlags.KeepScreenOn); } } public override void OpenRateLink() { this.activity.StartActivity(new Intent(Intent.ActionView, Uri.Parse("https://play.google.com/store/apps/details?id=de.ellpeck.touchytickets"))); } public override bool GainAchievement(Achievement achievement) { try { if (this.GoogleApi != null && this.GoogleApi.IsConnected) { GamesClass.Achievements.Unlock(this.GoogleApi, AchievementIds[achievement.Name]); return true; } } catch (Exception e) { GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "GainAchievement " + e); } return false; } public override void ShowAchievements() { try { if (this.GoogleApi == null || !this.GoogleApi.IsConnected) return; var intent = GamesClass.Achievements.GetAchievementsIntent(this.GoogleApi); this.activity.StartActivityForResult(intent, ShowAchievementsRequest); } catch (Exception e) { GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "ShowAchievements " + e); } } } }