TouchyTickets/Android/AndroidPlatform.cs
2020-07-21 21:51:30 +02:00

127 lines
5.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.Gms.Ads;
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<string, string> AchievementIds = new Dictionary<string, string> {
{"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"},
{"1.00MTickets", "CgkI_Lyp7PcEEAIQDw"},
{"1.00BTickets", "CgkI_Lyp7PcEEAIQEA"},
{"1.00TTickets", "CgkI_Lyp7PcEEAIQEQ"},
{"1.00QTickets", "CgkI_Lyp7PcEEAIQEg"},
{"1.00QiTickets", "CgkI_Lyp7PcEEAIQEw"},
{"1.00STickets", "CgkI_Lyp7PcEEAIQFA"},
{"1.00SpTickets", "CgkI_Lyp7PcEEAIQFQ"},
{"1.00OTickets", "CgkI_Lyp7PcEEAIQFg"},
{"1.00NTickets", "CgkI_Lyp7PcEEAIQFw"},
{"1.00DTickets", "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<string, object> analyticsJson) {
// Analytics
GameAnalytics.SetAutoDetectAppVersion(true);
GameAnalytics.Initialize(this.activity, GA_MiniJSON.JsonEncode(new Hashtable(analyticsJson)));
AndroidEnvironment.UnhandledExceptionRaiser += (o, args) => GameAnalytics.NewErrorEvent(GAErrorSeverity.Critical, args.Exception.ToString());
// Ads
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);
// Google Play game services
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();
// Sanity check to ensure that all achievements are mapped
foreach (var achievement in Achievement.Achievements.Values) {
var _ = AchievementIds[achievement.Name];
}
}
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 void GainAchievement(Achievement achievement) {
if (this.GoogleApi != null)
GamesClass.Achievements.Unlock(this.GoogleApi, AchievementIds[achievement.Name]);
}
public override void ShowAchievements() {
if (this.GoogleApi == null)
return;
var intent = GamesClass.Achievements.GetAchievementsIntent(this.GoogleApi);
this.activity.StartActivityForResult(intent, ShowAchievementsRequest);
}
}
}