--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/utils/src/mmapiutils.cpp Tue May 11 16:07:20 2010 +0300
@@ -0,0 +1,59 @@
+#include "mmapiutils.h"
+#include "s60commonutils.h"
+using namespace java::util;
+
+enum TJavaArrayPanic
+{
+ EBadOffsetIntoJavaArray,
+ EWritingOverEndOfJavaArray,
+ EBadOffsetIntoJavaArrayForRead,
+ EReadingOverEndOfJavaArray,
+};
+
+
+/**
+ * Copies data from the native to the Java array.
+ * @return The number of bytes copied.
+ */
+TInt MMAPIUtils::CopyToJava(JNIEnv& aJni, const TDesC8& aNativeBuffer,
+ jbyteArray aJavaBuffer, TInt aOffset, TInt aLength)
+{
+ __ASSERT_DEBUG(aOffset <= aJni.GetArrayLength(aJavaBuffer),
+ User::Panic(_L("ArrayUtils"), EBadOffsetIntoJavaArray));
+ __ASSERT_DEBUG(aLength <= aJni.GetArrayLength(aJavaBuffer) - aOffset,
+ User::Panic(_L("ArrayUtils"), EWritingOverEndOfJavaArray));
+
+ TInt nativeBufferLength = aNativeBuffer.Length();
+ TInt length = (nativeBufferLength < aLength) ? nativeBufferLength : aLength;
+ TUint8* nativeBufferPtr = const_cast<TUint8*>(aNativeBuffer.Ptr());
+ jbyte* jNativeBufferPtr = reinterpret_cast<jbyte*>(nativeBufferPtr);
+ aJni.SetByteArrayRegion(aJavaBuffer, aOffset, length, jNativeBufferPtr);
+ return length;
+}
+
+jobjectArray MMAPIUtils::CopyToNewJavaStringArrayL(JNIEnv& aJni, const CDesCArray& aNativeArray)
+{
+ jclass stringClass = aJni.FindClass("java/lang/String");
+ User::LeaveIfNull(stringClass);
+ //
+ jobjectArray result = aJni.NewObjectArray(aNativeArray.Count(), stringClass, NULL);
+ if (result != NULL)
+ {
+ TPtrC item;
+ for (int i=0; i<aNativeArray.Count(); ++i)
+ {
+ item.Set(aNativeArray[i]);
+ AddToJavaStringArrayL(aJni, result, i, item);
+ }
+ }
+ return result;
+}
+
+void MMAPIUtils::AddToJavaStringArrayL(JNIEnv& aJni, jobjectArray& aContainer, TInt aPosition, const TDesC& aString)
+{
+ jstring javaString = S60CommonUtils::NativeToJavaString(aJni, aString);
+ User::LeaveIfNull(javaString);
+ //
+ aJni.SetObjectArrayElement(aContainer, aPosition, javaString);
+ aJni.DeleteLocalRef(javaString);
+}