--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src/managerimpl.cpp Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This class has ManagerImpl JNI functions
+*
+*/
+
+#include <logger.h>
+
+#include <JniEnvWrapper.h>
+
+#include "com_nokia_microedition_media_ManagerImpl.h"
+#include "cmmamanager.h"
+#include "cmmaplayer.h"
+#include "jstringutils.h"
+#include "s60commonutils.h"
+using namespace java::util;
+
+const TInt KMMADefaultArrayGranularity = 8;
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_ManagerImpl__1dispose
+(JNIEnv* /*aJni*/, jobject, jint aEventSourceHandle)
+{
+ LOG(EJavaMMAPI,EInfo,"MMA::ManagerImpl dispose");
+ MMAFunctionServer* eventSource =
+ reinterpret_cast< MMAFunctionServer* >(aEventSourceHandle);
+ delete eventSource;
+}
+
+LOCAL_C void ReleaseEventSource(MMAFunctionServer* aEventSource)
+{
+ aEventSource->Release();
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_ManagerImpl__1release
+(JNIEnv*, jobject, jint aEventSourceHandle)
+{
+ LOG(EJavaMMAPI, EInfo, "MMA::ManagerImpl release");
+ MMAFunctionServer* eventSource =
+ reinterpret_cast< MMAFunctionServer* >(aEventSourceHandle);
+ eventSource->ExecuteV(&ReleaseEventSource,
+ eventSource);
+}
+
+/*
+ * Class: javax_microedition_media_Manager
+ * Method: _createManager
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_ManagerImpl__1createManager
+(JNIEnv*, jobject, jint aEventSourceHandle, jint aMIDletSuiteID)
+{
+ MMAFunctionServer* eventSource = reinterpret_cast<MMAFunctionServer*>(aEventSourceHandle);
+
+ CMMAManager* manager = NULL;
+ TInt error = eventSource->ExecuteTrap(&CMMAManager::StaticCreateManagerL,
+ &manager,
+ aMIDletSuiteID);
+ ELOG1(EJavaMMAPI, "MMA::ManagerImpl createManager StaticCreateManagerL %d",
+ error);
+ if (error != KErrNone)
+ {
+ return error;
+ }
+
+ TInt managerHandle(reinterpret_cast<TInt>(manager));
+
+ error = eventSource->ExecuteTrap(MMAFunctionServer::StaticAddObjectFromHandleL,
+ eventSource,
+ managerHandle);
+
+ ELOG1(EJavaMMAPI, "MMA::ManagerImpl createManager StaticAddObjectFromHandleL %d",
+ error);
+
+ if (error != KErrNone)
+ {
+ // Adding manager to event source failed.
+ delete manager;
+
+ // Error code will be returned to java
+ managerHandle = error;
+ }
+ LOG1(EJavaMMAPI, EInfo, "MMA::ManagerImpl createManager %d",
+ managerHandle);
+ return managerHandle;
+}
+
+
+LOCAL_C void InvokeConstructSvrL(MMAFunctionServer* aEventSource)
+{
+ aEventSource->ConstructSvrL();
+}
+
+/*
+ * Class: javax_microedition_media_Manager
+ * Method: _getEventSource
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_ManagerImpl__1createEventSource
+(JNIEnv* aJni, jobject aPeer)
+{
+ TInt eventSourceHandle = -1;
+ TRAPD(err,eventSourceHandle = MMAFunctionServer::NewL(*aJni, aPeer));
+ if (err != KErrNone)
+ eventSourceHandle = err;
+ if (eventSourceHandle > KErrNone)
+ {
+ MMAFunctionServer* eventSource =
+ reinterpret_cast< MMAFunctionServer* >(eventSourceHandle);
+
+ // third phase construction
+ TInt error = eventSource->ExecuteTrap(&InvokeConstructSvrL,
+ eventSource);
+ if (error != KErrNone)
+ {
+ eventSourceHandle = error;
+ }
+ }
+ LOG1(EJavaMMAPI, EInfo, "MMA::ManagerImpl createEventSource %d",
+ eventSourceHandle);
+ return eventSourceHandle;
+}
+
+/**
+ * Local function which can be used to call CMMAManager class methods.
+ * Type of of the function pointer must be
+ * void CMMAManager::aFuncL( RPointerArray< HBufC >&, const TDesC& )
+ * Java String array will be created and set to aArray variable.
+ *
+ * @param aManager CMMAManager instance.
+ * @param aFuncL Pointer to the CMMAManager method.
+ * @param aJni Used to create an array.
+ * @param aArray Values got from aFuncL will be copied to this array.
+ * @param aParam Parameter that will be passed to aFuncL method.
+ */
+LOCAL_C void GetObjectArrayL(MMAFunctionServer* aEventSource,
+ CMMAManager* aManager,
+ void (CMMAManager::*aFuncL)(const TDesC&,
+ CDesC16Array&),
+ JNIEnv* aJni,
+ jobjectArray* aArray,
+ const TDesC* aParam)
+{
+ // Temporary descriptor array to be copied to Java array.
+ CDesC16ArrayFlat* values = new(ELeave) CDesC16ArrayFlat(
+ KMMADefaultArrayGranularity);
+ CleanupStack::PushL(values);
+
+ // Call void CMMAManager::aFuncL( const TDesC&, RPointerArray< HBufC >& )
+ // method. Method can leave.
+ // Elements of the array will be owned by this method.
+ (aManager->*aFuncL)(*aParam, *values);
+
+ // JNI interface pointer can't be passed to different thread, so
+ // it is needed to get valid JNI interface pointer for Event Server thread
+ aJni =aEventSource->getValidJniEnv();
+
+ // Create new java String array and copy values from the values array
+ *aArray = MMAPIUtils::CopyToNewJavaStringArrayL(*aJni, *values);
+ CleanupStack::PopAndDestroy(values);
+}
+
+
+/*
+ * Class: javax_microedition_media_Manager
+ * Method: _getSupportedContentTypes
+ * Signature: (II)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_nokia_microedition_media_ManagerImpl__1getSupportedContentTypes
+(JNIEnv* aJni,
+ jclass,
+ jint aEventSourceHandle,
+ jint aManagerHandle,
+ jstring aProtocol)
+{
+ MMAFunctionServer* eventSource =
+ reinterpret_cast< MMAFunctionServer * >(aEventSourceHandle);
+ CMMAManager* manager = reinterpret_cast< CMMAManager *>(aManagerHandle);
+
+ jobjectArray contentTypes = NULL;
+
+ // Create descritor from Java String.
+ // JStringUtils is derived from TPtrC16 and is save to cast to TDesC
+ JStringUtils tmp(*aJni, aProtocol);
+ const TDesC* protocol = &tmp;
+ if (aProtocol == NULL)
+ {
+ protocol = &KNullDesC;
+ }
+
+ // Call manager->GetSupportedContentTypesL and create Java array.
+ TInt err = eventSource->ExecuteTrap(&GetObjectArrayL,
+ eventSource,
+ manager,
+ &CMMAManager::GetSupportedContentTypesL,
+ aJni,
+ &contentTypes,
+ protocol);
+
+ if (err != KErrNone)
+ {
+ // Something failed. Returning NULL, because contentTypes array may not
+ // be complete. contentTypes array is left for carbage collertor,
+ // because it can't be released.
+ return NULL;
+ }
+ return contentTypes;
+}
+
+/*
+ * Class: javax_microedition_media_Manager
+ * Method: _getSupportedProtocols
+ * Signature: (II)[[B
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_nokia_microedition_media_ManagerImpl__1getSupportedProtocols
+(JNIEnv* aJni,
+ jclass,
+ jint aEventSourceHandle,
+ jint aManagerHandle,
+ jstring aContentType)
+{
+ MMAFunctionServer* eventSource =
+ reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+ CMMAManager* manager = reinterpret_cast< CMMAManager *>(aManagerHandle);
+
+ jobjectArray protocols = NULL;
+
+ // Create descritor from Java String.
+ // JStringUtils is derived from TPtrC16 and is save to cast to TDesC
+ JStringUtils tmp(*aJni, aContentType);
+ const TDesC* contentType = &tmp;
+ if (aContentType == NULL)
+ {
+ contentType = &KNullDesC;
+ }
+
+ // Call manager->GetSupportedProtocolsL and create Java array.
+ TInt err = eventSource->ExecuteTrap(&GetObjectArrayL,
+ eventSource,
+ manager,
+ &CMMAManager::GetSupportedProtocolsL,
+ aJni,
+ &protocols,
+ contentType);
+ if (err != KErrNone)
+ {
+ // Something failed. Returning NULL, because contentTypes array may not
+ // be complete. contentTypes array is left for carbage collertor,
+ // because it can't be released.
+ return NULL;
+ }
+ return protocols;
+}
+
+// END OF FILE