2020-06-14 01:18:12 +02:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using Android.App;
|
2020-06-30 19:06:35 +02:00
|
|
|
using Android.Content;
|
2020-07-21 20:26:52 +02:00
|
|
|
using Android.Gms.Common.Apis;
|
|
|
|
using Android.Gms.Games;
|
2020-07-08 18:23:57 +02:00
|
|
|
using Android.Runtime;
|
2020-06-29 13:47:45 +02:00
|
|
|
using Android.Views;
|
2020-06-14 01:18:12 +02:00
|
|
|
using Android.Widget;
|
|
|
|
using GameAnalyticsSDK;
|
|
|
|
using GameAnalyticsSDK.Utilities;
|
2023-02-11 10:16:42 +01:00
|
|
|
using Java.Lang;
|
2020-06-14 01:18:12 +02:00
|
|
|
using TouchyTickets;
|
2020-07-21 21:51:30 +02:00
|
|
|
using Achievement = TouchyTickets.Achievement;
|
2020-07-21 20:26:52 +02:00
|
|
|
using Uri = Android.Net.Uri;
|
2020-06-14 01:18:12 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
namespace Android;
|
2020-06-14 01:18:12 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
public class AndroidPlatform : Platform {
|
2020-06-14 01:18:12 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
public const int GooglePlayLoginRequest = 9001;
|
|
|
|
public const int ShowAchievementsRequest = 9002;
|
2020-06-14 01:18:12 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
private static readonly Dictionary<string, string> AchievementIds = new() {
|
|
|
|
{"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<string, object> analyticsJson) {
|
|
|
|
// Analytics
|
|
|
|
GameAnalytics.SetAutoDetectAppVersion(true);
|
|
|
|
GameAnalytics.Initialize(this.activity, GA_MiniJSON.Serialize(new Hashtable(analyticsJson)));
|
|
|
|
AndroidEnvironment.UnhandledExceptionRaiser += (_, 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);
|
|
|
|
}*/
|
2020-06-29 13:47:45 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
// 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 _ = AndroidPlatform.AchievementIds[achievement.Name];
|
2020-06-30 19:06:35 +02:00
|
|
|
}
|
2023-02-11 10:16:42 +01:00
|
|
|
#endif
|
|
|
|
}
|
2020-06-30 19:06:35 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
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);
|
2020-07-21 21:51:30 +02:00
|
|
|
}
|
2023-02-11 10:16:42 +01:00
|
|
|
}
|
2020-07-21 21:51:30 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
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, AndroidPlatform.AchievementIds[achievement.Name]);
|
|
|
|
return true;
|
2020-07-26 14:41:58 +02:00
|
|
|
}
|
2023-02-11 10:16:42 +01:00
|
|
|
} catch (Exception e) {
|
|
|
|
GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "GainAchievement " + e);
|
2020-07-21 21:51:30 +02:00
|
|
|
}
|
2023-02-11 10:16:42 +01:00
|
|
|
return false;
|
|
|
|
}
|
2020-07-21 21:51:30 +02:00
|
|
|
|
2023-02-11 10:16:42 +01:00
|
|
|
public override void ShowAchievements() {
|
|
|
|
try {
|
|
|
|
if (this.GoogleApi == null || !this.GoogleApi.IsConnected)
|
|
|
|
return;
|
|
|
|
var intent = GamesClass.Achievements.GetAchievementsIntent(this.GoogleApi);
|
|
|
|
this.activity.StartActivityForResult(intent, AndroidPlatform.ShowAchievementsRequest);
|
|
|
|
} catch (Exception e) {
|
|
|
|
GameAnalytics.NewErrorEvent(GAErrorSeverity.Error, "ShowAchievements " + e);
|
|
|
|
}
|
2020-06-14 01:18:12 +02:00
|
|
|
}
|
2023-02-11 10:16:42 +01:00
|
|
|
|
2020-06-14 01:18:12 +02:00
|
|
|
}
|