|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include "mmapiutils.h" |
|
18 #include "s60commonutils.h" |
|
19 using namespace java::util; |
|
20 |
|
21 enum TJavaArrayPanic |
|
22 { |
|
23 EBadOffsetIntoJavaArray, |
|
24 EWritingOverEndOfJavaArray, |
|
25 EBadOffsetIntoJavaArrayForRead, |
|
26 EReadingOverEndOfJavaArray, |
|
27 }; |
|
28 |
|
29 |
|
30 /** |
|
31 * Copies data from the native to the Java array. |
|
32 * @return The number of bytes copied. |
|
33 */ |
|
34 TInt MMAPIUtils::CopyToJava(JNIEnv& aJni, const TDesC8& aNativeBuffer, |
|
35 jbyteArray aJavaBuffer, TInt aOffset, TInt aLength) |
|
36 { |
|
37 __ASSERT_DEBUG(aOffset <= aJni.GetArrayLength(aJavaBuffer), |
|
38 User::Panic(_L("ArrayUtils"), EBadOffsetIntoJavaArray)); |
|
39 __ASSERT_DEBUG(aLength <= aJni.GetArrayLength(aJavaBuffer) - aOffset, |
|
40 User::Panic(_L("ArrayUtils"), EWritingOverEndOfJavaArray)); |
|
41 |
|
42 TInt nativeBufferLength = aNativeBuffer.Length(); |
|
43 TInt length = (nativeBufferLength < aLength) ? nativeBufferLength : aLength; |
|
44 TUint8* nativeBufferPtr = const_cast<TUint8*>(aNativeBuffer.Ptr()); |
|
45 jbyte* jNativeBufferPtr = reinterpret_cast<jbyte*>(nativeBufferPtr); |
|
46 aJni.SetByteArrayRegion(aJavaBuffer, aOffset, length, jNativeBufferPtr); |
|
47 return length; |
|
48 } |
|
49 |
|
50 jobjectArray MMAPIUtils::CopyToNewJavaStringArrayL(JNIEnv& aJni, const CDesCArray& aNativeArray) |
|
51 { |
|
52 jclass stringClass = aJni.FindClass("java/lang/String"); |
|
53 User::LeaveIfNull(stringClass); |
|
54 // |
|
55 jobjectArray result = aJni.NewObjectArray(aNativeArray.Count(), stringClass, NULL); |
|
56 if (result != NULL) |
|
57 { |
|
58 TPtrC item; |
|
59 for (int i=0; i<aNativeArray.Count(); ++i) |
|
60 { |
|
61 item.Set(aNativeArray[i]); |
|
62 AddToJavaStringArrayL(aJni, result, i, item); |
|
63 } |
|
64 } |
|
65 return result; |
|
66 } |
|
67 |
|
68 void MMAPIUtils::AddToJavaStringArrayL(JNIEnv& aJni, jobjectArray& aContainer, TInt aPosition, const TDesC& aString) |
|
69 { |
|
70 jstring javaString = S60CommonUtils::NativeToJavaString(aJni, aString); |
|
71 User::LeaveIfNull(javaString); |
|
72 // |
|
73 aJni.SetObjectArrayElement(aContainer, aPosition, javaString); |
|
74 aJni.DeleteLocalRef(javaString); |
|
75 } |