public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array)
{
Type elementType = typeof(ArrayType).GetElementType();
if (AndroidReflection.IsPrimitive(elementType))
{
if (elementType == typeof(int))
{
return((ArrayType)(object)AndroidJNISafe.FromIntArray(array));
}
if (elementType == typeof(bool))
{
return((ArrayType)(object)AndroidJNISafe.FromBooleanArray(array));
}
if (elementType == typeof(byte))
{
return((ArrayType)(object)AndroidJNISafe.FromByteArray(array));
}
if (elementType == typeof(short))
{
return((ArrayType)(object)AndroidJNISafe.FromShortArray(array));
}
if (elementType == typeof(long))
{
return((ArrayType)(object)AndroidJNISafe.FromLongArray(array));
}
if (elementType == typeof(float))
{
return((ArrayType)(object)AndroidJNISafe.FromFloatArray(array));
}
if (elementType == typeof(double))
{
return((ArrayType)(object)AndroidJNISafe.FromDoubleArray(array));
}
if (elementType == typeof(char))
{
return((ArrayType)(object)AndroidJNISafe.FromCharArray(array));
}
return(default(ArrayType));
}
if (elementType == typeof(string))
{
int arrayLength = AndroidJNISafe.GetArrayLength(array);
string[] array2 = new string[arrayLength];
for (int i = 0; i < arrayLength; i++)
{
IntPtr objectArrayElement = AndroidJNI.GetObjectArrayElement(array, i);
array2[i] = AndroidJNISafe.GetStringUTFChars(objectArrayElement);
AndroidJNISafe.DeleteLocalRef(objectArrayElement);
}
return((ArrayType)(object)array2);
}
if (elementType == typeof(AndroidJavaObject))
{
int arrayLength2 = AndroidJNISafe.GetArrayLength(array);
AndroidJavaObject[] array3 = new AndroidJavaObject[arrayLength2];
for (int j = 0; j < arrayLength2; j++)
{
IntPtr objectArrayElement2 = AndroidJNI.GetObjectArrayElement(array, j);
array3[j] = new AndroidJavaObject(objectArrayElement2);
AndroidJNISafe.DeleteLocalRef(objectArrayElement2);
}
return((ArrayType)(object)array3);
}
throw new Exception("JNI: Unknown generic array type '" + elementType + "'");
}