Skip to content

Commit 2640b94

Browse files
committed
add reflection path for older version of unity
1 parent 57a9a9a commit 2640b94

File tree

3 files changed

+59
-21
lines changed

3 files changed

+59
-21
lines changed

GoogleSignIn/Impl/GoogleSignInImpl.cs

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515
// </copyright>
1616

1717
namespace Google.Impl {
18-
using System;
19-
using System.Text;
20-
using System.Collections.Generic;
21-
using System.Runtime.InteropServices;
18+
using System;
19+
using System.Text;
20+
using System.Collections.Generic;
21+
using System.Runtime.InteropServices;
2222

23-
using UnityEngine;
23+
using UnityEngine;
24+
#if UNITY_2022_2_OR_NEWER
25+
#else
26+
using System.Reflection;
27+
#endif
2428

25-
internal class GoogleSignInImpl : BaseObject, ISignInImpl {
29+
internal class GoogleSignInImpl : BaseObject, ISignInImpl {
2630

2731
internal GoogleSignInImpl(GoogleSignInConfiguration configuration)
2832
: base(GoogleSignIn_Create(GetPlayerActivity())) {
@@ -97,7 +101,7 @@ public void Disconnect() {
97101
static AndroidJavaObject parentActivity;
98102
static IntPtr GoogleSignIn_Create(IntPtr activity)
99103
{
100-
parentActivity = new AndroidJavaObject(activity);
104+
parentActivity = activity.ToAndroidJavaObject();
101105

102106
return GoogleSignInFragment.CallStatic<AndroidJavaObject>("getInstance",parentActivity).GetRawObject();
103107
}
@@ -149,33 +153,33 @@ static IntPtr GoogleSignIn_SignInSilently(HandleRef self)
149153
return GoogleSignInHelper.CallStatic<AndroidJavaObject>("signInSilently",parentActivity).GetRawObject();
150154
}
151155

152-
static void GoogleSignIn_Signout(HandleRef self) => GoogleSignInHelper.CallStatic("signOut",new AndroidJavaObject(self.Handle));
156+
static void GoogleSignIn_Signout(HandleRef self) => GoogleSignInHelper.CallStatic("signOut",self.ToAndroidJavaObject());
153157

154-
static void GoogleSignIn_Disconnect(HandleRef self) => GoogleSignInHelper.CallStatic("disconnect",new AndroidJavaObject(self.Handle));
158+
static void GoogleSignIn_Disconnect(HandleRef self) => GoogleSignInHelper.CallStatic("disconnect",self.ToAndroidJavaObject());
155159

156-
internal static void GoogleSignIn_DisposeFuture(HandleRef self) => new AndroidJavaObject(self.Handle).Dispose();
160+
internal static void GoogleSignIn_DisposeFuture(HandleRef self) => self.ToAndroidJavaObject().Dispose();
157161

158-
internal static bool GoogleSignIn_Pending(HandleRef self) => new AndroidJavaObject(self.Handle).Call<bool>("isPending");
162+
internal static bool GoogleSignIn_Pending(HandleRef self) => self.ToAndroidJavaObject().Call<bool>("isPending");
159163

160-
internal static IntPtr GoogleSignIn_Result(HandleRef self) => new AndroidJavaObject(self.Handle).Call<AndroidJavaObject>("getAccount").GetRawObject();
164+
internal static IntPtr GoogleSignIn_Result(HandleRef self) => self.ToAndroidJavaObject().Call<AndroidJavaObject>("getAccount").GetRawObject();
161165

162-
internal static int GoogleSignIn_Status(HandleRef self) => new AndroidJavaObject(self.Handle).Call<int>("getStatus");
166+
internal static int GoogleSignIn_Status(HandleRef self) => self.ToAndroidJavaObject().Call<int>("getStatus");
163167

164-
internal static string GoogleSignIn_GetServerAuthCode(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getServerAuthCode");
168+
internal static string GoogleSignIn_GetServerAuthCode(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getServerAuthCode");
165169

166-
internal static string GoogleSignIn_GetDisplayName(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getDisplayName");
170+
internal static string GoogleSignIn_GetDisplayName(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getDisplayName");
167171

168-
internal static string GoogleSignIn_GetEmail(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getEmail");
172+
internal static string GoogleSignIn_GetEmail(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getEmail");
169173

170-
internal static string GoogleSignIn_GetFamilyName(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getFamilyName");
174+
internal static string GoogleSignIn_GetFamilyName(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getFamilyName");
171175

172-
internal static string GoogleSignIn_GetGivenName(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getGivenName");
176+
internal static string GoogleSignIn_GetGivenName(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getGivenName");
173177

174-
internal static string GoogleSignIn_GetIdToken(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getIdToken");
178+
internal static string GoogleSignIn_GetIdToken(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getIdToken");
175179

176-
internal static string GoogleSignIn_GetImageUrl(HandleRef self) => new AndroidJavaObject(self.Handle).Call<AndroidJavaObject>("getPhotoUrl").Call<string>("toString");
180+
internal static string GoogleSignIn_GetImageUrl(HandleRef self) => self.ToAndroidJavaObject().Call<AndroidJavaObject>("getPhotoUrl").Call<string>("toString");
177181

178-
internal static string GoogleSignIn_GetUserId(HandleRef self) => new AndroidJavaObject(self.Handle).Call<string>("getId");
182+
internal static string GoogleSignIn_GetUserId(HandleRef self) => self.ToAndroidJavaObject().Call<string>("getId");
179183
#else
180184
private const string DllName = "__Internal";
181185

@@ -312,6 +316,28 @@ private static IntPtr GetPlayerActivity() {
312316
return jc.GetStatic<AndroidJavaObject>("currentActivity").GetRawObject();
313317
#else
314318
return IntPtr.Zero;
319+
#endif
320+
}
321+
}
322+
323+
public static class Ext
324+
{
325+
#if UNITY_2022_2_OR_NEWER
326+
#else
327+
static ConstructorInfo constructorInfo;
328+
#endif
329+
330+
public static AndroidJavaObject ToAndroidJavaObject(in this HandleRef self) => self.Handle.ToAndroidJavaObject();
331+
public static AndroidJavaObject ToAndroidJavaObject(in this IntPtr intPtr)
332+
{
333+
#if UNITY_2022_2_OR_NEWER
334+
return new AndroidJavaObject(intPtr);
335+
#else
336+
if(constructorInfo == null)
337+
constructorInfo = typeof(AndroidJavaObject).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,null,new[] { typeof(IntPtr) },null);
338+
339+
Debug.Log(constructorInfo);
340+
return constructorInfo.Invoke(new object[] { intPtr }) as AndroidJavaObject;
315341
#endif
316342
}
317343
}

GoogleSignIn/link.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<linker>
2+
<assembly fullname="UnityEngine.AndroidJNIModule">
3+
<type fullname="UnityEngine.AndroidJNIModule.AndroidJavaObject" preserve="all" />
4+
</assembly>
5+
</linker>

GoogleSignIn/link.xml.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)