721 lines
24 KiB
C#
721 lines
24 KiB
C#
using System;
|
|
using System.Text;
|
|
|
|
namespace UnityEngine
|
|
{
|
|
// Token: 0x02000002 RID: 2
|
|
public class AndroidJavaObject : IDisposable
|
|
{
|
|
// Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
|
|
public AndroidJavaObject(string className, params object[] args)
|
|
: this()
|
|
{
|
|
this._AndroidJavaObject(className, args);
|
|
}
|
|
|
|
// Token: 0x06000002 RID: 2 RVA: 0x00002064 File Offset: 0x00000264
|
|
internal AndroidJavaObject(IntPtr jobject)
|
|
: this()
|
|
{
|
|
if (jobject == IntPtr.Zero)
|
|
{
|
|
throw new Exception("JNI: Init'd AndroidJavaObject with null ptr!");
|
|
}
|
|
IntPtr objectClass = AndroidJNISafe.GetObjectClass(jobject);
|
|
this.m_jobject = new GlobalJavaObjectRef(jobject);
|
|
this.m_jclass = new GlobalJavaObjectRef(objectClass);
|
|
AndroidJNISafe.DeleteLocalRef(objectClass);
|
|
}
|
|
|
|
// Token: 0x06000003 RID: 3 RVA: 0x000020BC File Offset: 0x000002BC
|
|
internal AndroidJavaObject()
|
|
{
|
|
}
|
|
|
|
// Token: 0x06000004 RID: 4 RVA: 0x000020C8 File Offset: 0x000002C8
|
|
public void Dispose()
|
|
{
|
|
this._Dispose();
|
|
}
|
|
|
|
// Token: 0x06000005 RID: 5 RVA: 0x000020D4 File Offset: 0x000002D4
|
|
public void Call(string methodName, params object[] args)
|
|
{
|
|
this._Call(methodName, args);
|
|
}
|
|
|
|
// Token: 0x06000006 RID: 6 RVA: 0x000020E0 File Offset: 0x000002E0
|
|
public void CallStatic(string methodName, params object[] args)
|
|
{
|
|
this._CallStatic(methodName, args);
|
|
}
|
|
|
|
// Token: 0x06000007 RID: 7 RVA: 0x000020EC File Offset: 0x000002EC
|
|
public FieldType Get<FieldType>(string fieldName)
|
|
{
|
|
return this._Get<FieldType>(fieldName);
|
|
}
|
|
|
|
// Token: 0x06000008 RID: 8 RVA: 0x00002108 File Offset: 0x00000308
|
|
public void Set<FieldType>(string fieldName, FieldType val)
|
|
{
|
|
this._Set<FieldType>(fieldName, val);
|
|
}
|
|
|
|
// Token: 0x06000009 RID: 9 RVA: 0x00002114 File Offset: 0x00000314
|
|
public FieldType GetStatic<FieldType>(string fieldName)
|
|
{
|
|
return this._GetStatic<FieldType>(fieldName);
|
|
}
|
|
|
|
// Token: 0x0600000A RID: 10 RVA: 0x00002130 File Offset: 0x00000330
|
|
public void SetStatic<FieldType>(string fieldName, FieldType val)
|
|
{
|
|
this._SetStatic<FieldType>(fieldName, val);
|
|
}
|
|
|
|
// Token: 0x0600000B RID: 11 RVA: 0x0000213C File Offset: 0x0000033C
|
|
public IntPtr GetRawObject()
|
|
{
|
|
return this._GetRawObject();
|
|
}
|
|
|
|
// Token: 0x0600000C RID: 12 RVA: 0x00002158 File Offset: 0x00000358
|
|
public IntPtr GetRawClass()
|
|
{
|
|
return this._GetRawClass();
|
|
}
|
|
|
|
// Token: 0x0600000D RID: 13 RVA: 0x00002174 File Offset: 0x00000374
|
|
public ReturnType Call<ReturnType>(string methodName, params object[] args)
|
|
{
|
|
return this._Call<ReturnType>(methodName, args);
|
|
}
|
|
|
|
// Token: 0x0600000E RID: 14 RVA: 0x00002194 File Offset: 0x00000394
|
|
public ReturnType CallStatic<ReturnType>(string methodName, params object[] args)
|
|
{
|
|
return this._CallStatic<ReturnType>(methodName, args);
|
|
}
|
|
|
|
// Token: 0x0600000F RID: 15 RVA: 0x000021B4 File Offset: 0x000003B4
|
|
protected void DebugPrint(string msg)
|
|
{
|
|
if (AndroidJavaObject.enableDebugPrints)
|
|
{
|
|
Debug.Log(msg);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000010 RID: 16 RVA: 0x000021CC File Offset: 0x000003CC
|
|
protected void DebugPrint(string call, string methodName, string signature, object[] args)
|
|
{
|
|
if (AndroidJavaObject.enableDebugPrints)
|
|
{
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
foreach (object obj in args)
|
|
{
|
|
stringBuilder.Append(", ");
|
|
stringBuilder.Append((obj != null) ? obj.GetType().ToString() : "<null>");
|
|
}
|
|
Debug.Log(string.Concat(new string[]
|
|
{
|
|
call,
|
|
"(\"",
|
|
methodName,
|
|
"\"",
|
|
stringBuilder.ToString(),
|
|
") = ",
|
|
signature
|
|
}));
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000011 RID: 17 RVA: 0x00002278 File Offset: 0x00000478
|
|
private void _AndroidJavaObject(string className, params object[] args)
|
|
{
|
|
this.DebugPrint("Creating AndroidJavaObject from " + className);
|
|
if (args == null)
|
|
{
|
|
args = new object[1];
|
|
}
|
|
using (AndroidJavaObject androidJavaObject = AndroidJavaObject.FindClass(className))
|
|
{
|
|
this.m_jclass = new GlobalJavaObjectRef(androidJavaObject.GetRawObject());
|
|
jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
|
|
try
|
|
{
|
|
IntPtr constructorID = AndroidJNIHelper.GetConstructorID(this.m_jclass, args);
|
|
IntPtr intPtr = AndroidJNISafe.NewObject(this.m_jclass, constructorID, array);
|
|
this.m_jobject = new GlobalJavaObjectRef(intPtr);
|
|
AndroidJNISafe.DeleteLocalRef(intPtr);
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNIHelper.DeleteJNIArgArray(args, array);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000012 RID: 18 RVA: 0x0000233C File Offset: 0x0000053C
|
|
~AndroidJavaObject()
|
|
{
|
|
this.Dispose(true);
|
|
}
|
|
|
|
// Token: 0x06000013 RID: 19 RVA: 0x00002370 File Offset: 0x00000570
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
this.m_jobject.Dispose();
|
|
this.m_jclass.Dispose();
|
|
}
|
|
|
|
// Token: 0x06000014 RID: 20 RVA: 0x0000238C File Offset: 0x0000058C
|
|
protected void _Dispose()
|
|
{
|
|
this.Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
// Token: 0x06000015 RID: 21 RVA: 0x0000239C File Offset: 0x0000059C
|
|
protected void _Call(string methodName, params object[] args)
|
|
{
|
|
if (args == null)
|
|
{
|
|
args = new object[1];
|
|
}
|
|
IntPtr methodID = AndroidJNIHelper.GetMethodID(this.m_jclass, methodName, args, false);
|
|
jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
|
|
try
|
|
{
|
|
AndroidJNISafe.CallVoidMethod(this.m_jobject, methodID, array);
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNIHelper.DeleteJNIArgArray(args, array);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000016 RID: 22 RVA: 0x00002408 File Offset: 0x00000608
|
|
protected ReturnType _Call<ReturnType>(string methodName, params object[] args)
|
|
{
|
|
if (args == null)
|
|
{
|
|
args = new object[1];
|
|
}
|
|
IntPtr methodID = AndroidJNIHelper.GetMethodID<ReturnType>(this.m_jclass, methodName, args, false);
|
|
jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
|
|
ReturnType returnType;
|
|
try
|
|
{
|
|
if (AndroidReflection.IsPrimitive(typeof(ReturnType)))
|
|
{
|
|
if (typeof(ReturnType) == typeof(int))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallIntMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(bool))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallBooleanMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(byte))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallByteMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(short))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallShortMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(long))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallLongMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(float))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallFloatMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(double))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallDoubleMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(char))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallCharMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else
|
|
{
|
|
returnType = default(ReturnType);
|
|
}
|
|
}
|
|
else if (typeof(ReturnType) == typeof(string))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStringMethod(this.m_jobject, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(AndroidJavaClass))
|
|
{
|
|
IntPtr intPtr = AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, array);
|
|
returnType = ((!(intPtr == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJavaObject.AndroidJavaClassDeleteLocalRef(intPtr))) : default(ReturnType));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(AndroidJavaObject))
|
|
{
|
|
IntPtr intPtr2 = AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, array);
|
|
returnType = ((!(intPtr2 == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJavaObject.AndroidJavaObjectDeleteLocalRef(intPtr2))) : default(ReturnType));
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(ReturnType)))
|
|
{
|
|
throw new Exception("JNI: Unknown return type '" + typeof(ReturnType) + "'");
|
|
}
|
|
IntPtr intPtr3 = AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, array);
|
|
returnType = ((!(intPtr3 == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJNIHelper.ConvertFromJNIArray<ReturnType>(intPtr3))) : default(ReturnType));
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNIHelper.DeleteJNIArgArray(args, array);
|
|
}
|
|
return returnType;
|
|
}
|
|
|
|
// Token: 0x06000017 RID: 23 RVA: 0x000027E8 File Offset: 0x000009E8
|
|
protected FieldType _Get<FieldType>(string fieldName)
|
|
{
|
|
IntPtr fieldID = AndroidJNIHelper.GetFieldID<FieldType>(this.m_jclass, fieldName, false);
|
|
FieldType fieldType;
|
|
if (AndroidReflection.IsPrimitive(typeof(FieldType)))
|
|
{
|
|
if (typeof(FieldType) == typeof(int))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetIntField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(bool))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetBooleanField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(byte))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetByteField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(short))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetShortField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(long))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetLongField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(float))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetFloatField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(double))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetDoubleField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(char))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetCharField(this.m_jobject, fieldID));
|
|
}
|
|
else
|
|
{
|
|
fieldType = default(FieldType);
|
|
}
|
|
}
|
|
else if (typeof(FieldType) == typeof(string))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStringField(this.m_jobject, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaClass))
|
|
{
|
|
IntPtr objectField = AndroidJNISafe.GetObjectField(this.m_jobject, fieldID);
|
|
fieldType = ((!(objectField == IntPtr.Zero)) ? ((FieldType)((object)AndroidJavaObject.AndroidJavaClassDeleteLocalRef(objectField))) : default(FieldType));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaObject))
|
|
{
|
|
IntPtr objectField2 = AndroidJNISafe.GetObjectField(this.m_jobject, fieldID);
|
|
fieldType = ((!(objectField2 == IntPtr.Zero)) ? ((FieldType)((object)AndroidJavaObject.AndroidJavaObjectDeleteLocalRef(objectField2))) : default(FieldType));
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType)))
|
|
{
|
|
throw new Exception("JNI: Unknown field type '" + typeof(FieldType) + "'");
|
|
}
|
|
IntPtr objectField3 = AndroidJNISafe.GetObjectField(this.m_jobject, fieldID);
|
|
fieldType = ((!(objectField3 == IntPtr.Zero)) ? ((FieldType)((object)AndroidJNIHelper.ConvertFromJNIArray<FieldType>(objectField3))) : default(FieldType));
|
|
}
|
|
return fieldType;
|
|
}
|
|
|
|
// Token: 0x06000018 RID: 24 RVA: 0x00002B7C File Offset: 0x00000D7C
|
|
protected void _Set<FieldType>(string fieldName, FieldType val)
|
|
{
|
|
IntPtr fieldID = AndroidJNIHelper.GetFieldID<FieldType>(this.m_jclass, fieldName, false);
|
|
if (AndroidReflection.IsPrimitive(typeof(FieldType)))
|
|
{
|
|
if (typeof(FieldType) == typeof(int))
|
|
{
|
|
AndroidJNISafe.SetIntField(this.m_jobject, fieldID, (int)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(bool))
|
|
{
|
|
AndroidJNISafe.SetBooleanField(this.m_jobject, fieldID, (bool)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(byte))
|
|
{
|
|
AndroidJNISafe.SetByteField(this.m_jobject, fieldID, (byte)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(short))
|
|
{
|
|
AndroidJNISafe.SetShortField(this.m_jobject, fieldID, (short)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(long))
|
|
{
|
|
AndroidJNISafe.SetLongField(this.m_jobject, fieldID, (long)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(float))
|
|
{
|
|
AndroidJNISafe.SetFloatField(this.m_jobject, fieldID, (float)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(double))
|
|
{
|
|
AndroidJNISafe.SetDoubleField(this.m_jobject, fieldID, (double)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(char))
|
|
{
|
|
AndroidJNISafe.SetCharField(this.m_jobject, fieldID, (char)((object)val));
|
|
}
|
|
}
|
|
else if (typeof(FieldType) == typeof(string))
|
|
{
|
|
AndroidJNISafe.SetStringField(this.m_jobject, fieldID, (string)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaClass))
|
|
{
|
|
AndroidJNISafe.SetObjectField(this.m_jobject, fieldID, ((AndroidJavaClass)((object)val)).m_jclass);
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaObject))
|
|
{
|
|
AndroidJNISafe.SetObjectField(this.m_jobject, fieldID, ((AndroidJavaObject)((object)val)).m_jobject);
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType)))
|
|
{
|
|
throw new Exception("JNI: Unknown field type '" + typeof(FieldType) + "'");
|
|
}
|
|
IntPtr intPtr = AndroidJNIHelper.ConvertToJNIArray((Array)((object)val));
|
|
AndroidJNISafe.SetObjectField(this.m_jclass, fieldID, intPtr);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000019 RID: 25 RVA: 0x00002EB4 File Offset: 0x000010B4
|
|
protected void _CallStatic(string methodName, params object[] args)
|
|
{
|
|
if (args == null)
|
|
{
|
|
args = new object[1];
|
|
}
|
|
IntPtr methodID = AndroidJNIHelper.GetMethodID(this.m_jclass, methodName, args, true);
|
|
jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
|
|
try
|
|
{
|
|
AndroidJNISafe.CallStaticVoidMethod(this.m_jclass, methodID, array);
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNIHelper.DeleteJNIArgArray(args, array);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600001A RID: 26 RVA: 0x00002F20 File Offset: 0x00001120
|
|
protected ReturnType _CallStatic<ReturnType>(string methodName, params object[] args)
|
|
{
|
|
if (args == null)
|
|
{
|
|
args = new object[1];
|
|
}
|
|
IntPtr methodID = AndroidJNIHelper.GetMethodID<ReturnType>(this.m_jclass, methodName, args, true);
|
|
jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
|
|
ReturnType returnType;
|
|
try
|
|
{
|
|
if (AndroidReflection.IsPrimitive(typeof(ReturnType)))
|
|
{
|
|
if (typeof(ReturnType) == typeof(int))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticIntMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(bool))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticBooleanMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(byte))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticByteMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(short))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticShortMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(long))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticLongMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(float))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticFloatMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(double))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticDoubleMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(char))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticCharMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else
|
|
{
|
|
returnType = default(ReturnType);
|
|
}
|
|
}
|
|
else if (typeof(ReturnType) == typeof(string))
|
|
{
|
|
returnType = (ReturnType)((object)AndroidJNISafe.CallStaticStringMethod(this.m_jclass, methodID, array));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(AndroidJavaClass))
|
|
{
|
|
IntPtr intPtr = AndroidJNISafe.CallStaticObjectMethod(this.m_jclass, methodID, array);
|
|
returnType = ((!(intPtr == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJavaObject.AndroidJavaClassDeleteLocalRef(intPtr))) : default(ReturnType));
|
|
}
|
|
else if (typeof(ReturnType) == typeof(AndroidJavaObject))
|
|
{
|
|
IntPtr intPtr2 = AndroidJNISafe.CallStaticObjectMethod(this.m_jclass, methodID, array);
|
|
returnType = ((!(intPtr2 == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJavaObject.AndroidJavaObjectDeleteLocalRef(intPtr2))) : default(ReturnType));
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(ReturnType)))
|
|
{
|
|
throw new Exception("JNI: Unknown return type '" + typeof(ReturnType) + "'");
|
|
}
|
|
IntPtr intPtr3 = AndroidJNISafe.CallStaticObjectMethod(this.m_jclass, methodID, array);
|
|
returnType = ((!(intPtr3 == IntPtr.Zero)) ? ((ReturnType)((object)AndroidJNIHelper.ConvertFromJNIArray<ReturnType>(intPtr3))) : default(ReturnType));
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNIHelper.DeleteJNIArgArray(args, array);
|
|
}
|
|
return returnType;
|
|
}
|
|
|
|
// Token: 0x0600001B RID: 27 RVA: 0x00003300 File Offset: 0x00001500
|
|
protected FieldType _GetStatic<FieldType>(string fieldName)
|
|
{
|
|
IntPtr fieldID = AndroidJNIHelper.GetFieldID<FieldType>(this.m_jclass, fieldName, true);
|
|
FieldType fieldType;
|
|
if (AndroidReflection.IsPrimitive(typeof(FieldType)))
|
|
{
|
|
if (typeof(FieldType) == typeof(int))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticIntField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(bool))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticBooleanField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(byte))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticByteField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(short))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticShortField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(long))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticLongField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(float))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticFloatField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(double))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticDoubleField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(char))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticCharField(this.m_jclass, fieldID));
|
|
}
|
|
else
|
|
{
|
|
fieldType = default(FieldType);
|
|
}
|
|
}
|
|
else if (typeof(FieldType) == typeof(string))
|
|
{
|
|
fieldType = (FieldType)((object)AndroidJNISafe.GetStaticStringField(this.m_jclass, fieldID));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaClass))
|
|
{
|
|
IntPtr staticObjectField = AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID);
|
|
fieldType = ((!(staticObjectField == IntPtr.Zero)) ? ((FieldType)((object)AndroidJavaObject.AndroidJavaClassDeleteLocalRef(staticObjectField))) : default(FieldType));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaObject))
|
|
{
|
|
IntPtr staticObjectField2 = AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID);
|
|
fieldType = ((!(staticObjectField2 == IntPtr.Zero)) ? ((FieldType)((object)AndroidJavaObject.AndroidJavaObjectDeleteLocalRef(staticObjectField2))) : default(FieldType));
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType)))
|
|
{
|
|
throw new Exception("JNI: Unknown field type '" + typeof(FieldType) + "'");
|
|
}
|
|
IntPtr staticObjectField3 = AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID);
|
|
fieldType = ((!(staticObjectField3 == IntPtr.Zero)) ? ((FieldType)((object)AndroidJNIHelper.ConvertFromJNIArray<FieldType>(staticObjectField3))) : default(FieldType));
|
|
}
|
|
return fieldType;
|
|
}
|
|
|
|
// Token: 0x0600001C RID: 28 RVA: 0x00003694 File Offset: 0x00001894
|
|
protected void _SetStatic<FieldType>(string fieldName, FieldType val)
|
|
{
|
|
IntPtr fieldID = AndroidJNIHelper.GetFieldID<FieldType>(this.m_jclass, fieldName, true);
|
|
if (AndroidReflection.IsPrimitive(typeof(FieldType)))
|
|
{
|
|
if (typeof(FieldType) == typeof(int))
|
|
{
|
|
AndroidJNISafe.SetStaticIntField(this.m_jclass, fieldID, (int)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(bool))
|
|
{
|
|
AndroidJNISafe.SetStaticBooleanField(this.m_jclass, fieldID, (bool)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(byte))
|
|
{
|
|
AndroidJNISafe.SetStaticByteField(this.m_jclass, fieldID, (byte)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(short))
|
|
{
|
|
AndroidJNISafe.SetStaticShortField(this.m_jclass, fieldID, (short)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(long))
|
|
{
|
|
AndroidJNISafe.SetStaticLongField(this.m_jclass, fieldID, (long)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(float))
|
|
{
|
|
AndroidJNISafe.SetStaticFloatField(this.m_jclass, fieldID, (float)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(double))
|
|
{
|
|
AndroidJNISafe.SetStaticDoubleField(this.m_jclass, fieldID, (double)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(char))
|
|
{
|
|
AndroidJNISafe.SetStaticCharField(this.m_jclass, fieldID, (char)((object)val));
|
|
}
|
|
}
|
|
else if (typeof(FieldType) == typeof(string))
|
|
{
|
|
AndroidJNISafe.SetStaticStringField(this.m_jclass, fieldID, (string)((object)val));
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaClass))
|
|
{
|
|
AndroidJNISafe.SetStaticObjectField(this.m_jclass, fieldID, ((AndroidJavaClass)((object)val)).m_jclass);
|
|
}
|
|
else if (typeof(FieldType) == typeof(AndroidJavaObject))
|
|
{
|
|
AndroidJNISafe.SetStaticObjectField(this.m_jclass, fieldID, ((AndroidJavaObject)((object)val)).m_jobject);
|
|
}
|
|
else
|
|
{
|
|
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType)))
|
|
{
|
|
throw new Exception("JNI: Unknown field type '" + typeof(FieldType) + "'");
|
|
}
|
|
IntPtr intPtr = AndroidJNIHelper.ConvertToJNIArray((Array)((object)val));
|
|
AndroidJNISafe.SetStaticObjectField(this.m_jclass, fieldID, intPtr);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600001D RID: 29 RVA: 0x000039CC File Offset: 0x00001BCC
|
|
internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject)
|
|
{
|
|
AndroidJavaObject androidJavaObject;
|
|
try
|
|
{
|
|
androidJavaObject = new AndroidJavaObject(jobject);
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNISafe.DeleteLocalRef(jobject);
|
|
}
|
|
return androidJavaObject;
|
|
}
|
|
|
|
// Token: 0x0600001E RID: 30 RVA: 0x00003A04 File Offset: 0x00001C04
|
|
internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass)
|
|
{
|
|
AndroidJavaClass androidJavaClass;
|
|
try
|
|
{
|
|
androidJavaClass = new AndroidJavaClass(jclass);
|
|
}
|
|
finally
|
|
{
|
|
AndroidJNISafe.DeleteLocalRef(jclass);
|
|
}
|
|
return androidJavaClass;
|
|
}
|
|
|
|
// Token: 0x0600001F RID: 31 RVA: 0x00003A3C File Offset: 0x00001C3C
|
|
protected IntPtr _GetRawObject()
|
|
{
|
|
return this.m_jobject;
|
|
}
|
|
|
|
// Token: 0x06000020 RID: 32 RVA: 0x00003A5C File Offset: 0x00001C5C
|
|
protected IntPtr _GetRawClass()
|
|
{
|
|
return this.m_jclass;
|
|
}
|
|
|
|
// Token: 0x06000021 RID: 33 RVA: 0x00003A7C File Offset: 0x00001C7C
|
|
protected static AndroidJavaObject FindClass(string name)
|
|
{
|
|
return AndroidJavaObject.JavaLangClass.CallStatic<AndroidJavaObject>("forName", new object[] { name.Replace('/', '.') });
|
|
}
|
|
|
|
// Token: 0x17000001 RID: 1
|
|
// (get) Token: 0x06000022 RID: 34 RVA: 0x00003AB4 File Offset: 0x00001CB4
|
|
protected static AndroidJavaClass JavaLangClass
|
|
{
|
|
get
|
|
{
|
|
if (AndroidJavaObject.s_JavaLangClass == null)
|
|
{
|
|
AndroidJavaObject.s_JavaLangClass = new AndroidJavaClass(AndroidJNISafe.FindClass("java/lang/Class"));
|
|
}
|
|
return AndroidJavaObject.s_JavaLangClass;
|
|
}
|
|
}
|
|
|
|
// Token: 0x04000001 RID: 1
|
|
private static bool enableDebugPrints = false;
|
|
|
|
// Token: 0x04000002 RID: 2
|
|
internal GlobalJavaObjectRef m_jobject;
|
|
|
|
// Token: 0x04000003 RID: 3
|
|
internal GlobalJavaObjectRef m_jclass;
|
|
|
|
// Token: 0x04000004 RID: 4
|
|
private static AndroidJavaClass s_JavaLangClass;
|
|
}
|
|
}
|