public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array)
{
System.Type elementType = typeof(ArrayType).GetElementType();
if (elementType.IsPrimitive)
{
if (elementType == typeof(int))
{
return((ArrayType)AndroidJNISafe.FromIntArray(array));
}
if (elementType == typeof(bool))
{
return((ArrayType)AndroidJNISafe.FromBooleanArray(array));
}
if (elementType == typeof(byte))
{
return((ArrayType)AndroidJNISafe.FromByteArray(array));
}
if (elementType == typeof(short))
{
return((ArrayType)AndroidJNISafe.FromShortArray(array));
}
if (elementType == typeof(long))
{
return((ArrayType)AndroidJNISafe.FromLongArray(array));
}
if (elementType == typeof(float))
{
return((ArrayType)AndroidJNISafe.FromFloatArray(array));
}
if (elementType == typeof(double))
{
return((ArrayType)AndroidJNISafe.FromDoubleArray(array));
}
if (elementType != typeof(char))
{
return(default(ArrayType));
}
return((ArrayType)AndroidJNISafe.FromCharArray(array));
}
if (elementType == typeof(string))
{
IntPtr[] ptrArray = AndroidJNISafe.FromObjectArray(array);
int num = ptrArray.GetLength(0);
string[] strArray = new string[num];
for (int j = 0; j < num; j++)
{
strArray[j] = AndroidJNISafe.GetStringUTFChars(ptrArray[j]);
}
return((ArrayType)strArray);
}
if (elementType != typeof(AndroidJavaObject))
{
throw new Exception("JNI: Unknown generic array type '" + elementType + "'");
}
IntPtr[] ptrArray2 = AndroidJNISafe.FromObjectArray(array);
int length = ptrArray2.GetLength(0);
AndroidJavaObject[] objArray = new AndroidJavaObject[length];
for (int i = 0; i < length; i++)
{
objArray[i] = new AndroidJavaObject(ptrArray2[i]);
}
return((ArrayType)objArray);
}