javauis/mmapi_qt/baseline/src/videocontrol.cpp
branchRCL_3
changeset 65 ae942d28ec0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src/videocontrol.cpp	Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,339 @@
+/*
+* 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 JNI wrappers for CMMAVideoControl
+*
+*/
+
+
+//#include <jutils.h>
+//#include <lcdui.h>
+#include "com_nokia_microedition_media_control_VideoControl.h"
+#include "mmafunctionserver.h"
+#include "cmmavideocontrol.h"
+//#include "CMIDToolkit.h"
+#include "cmmadeleterefevent.h"
+#include <logger.h>
+
+#include <JniEnvWrapper.h>
+
+//#include <mswtclient.h>
+//#include <swtcliententry.h>
+#include "s60commonutils.h"
+#include "jstringutils.h"
+using namespace java::util;
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1construct
+(JNIEnv* aJni, jobject aControlObject, jint aControlHandle,
+ jint aEventSourceHandle)
+{
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1construct + ");
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl* >(aControlHandle);
+
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer* >(aEventSourceHandle);
+
+
+    __ASSERT_DEBUG(videoControl,
+                   User::Panic(_L("videocontrol::control is null"),
+                               KErrArgument));
+    __ASSERT_DEBUG(eventSource,
+                   User::Panic(_L("videocontrol::eventsource is null"),
+                               KErrArgument));
+
+    // reference must be done, that events can sent to java side
+    jobject controlObject = aJni->NewWeakGlobalRef(aControlObject);
+
+    // CMIDToolkit* ptoolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle);
+
+    //JNIENV_TO_VM(aJni);
+    TInt error = eventSource->ExecuteTrap(&CMMAVideoControl::ConstructL,
+                                          videoControl,
+                                          controlObject,
+                                          eventSource,
+                                          eventSource->getValidJniEnv(), //Passes JavaVM*, not JNIEnv*.
+                                          (MMMAEventPoster*)eventSource/*,
+                                          ptoolkit*/);
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1construct - ");
+    return error;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty
+(JNIEnv*, jobject, jint aControlHandle, jint aEventSourceHandle,
+ jint aPropertyA, jint aPropertyB, jint aPropertyType, jint aDisplayType)
+{
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty");
+
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl* >(aControlHandle);
+
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+
+    __ASSERT_DEBUG(videoControl,
+                   User::Panic(_L("videocontrol::control is null"),
+                               KErrArgument));
+    __ASSERT_DEBUG(eventSource,
+                   User::Panic(_L("videocontrol::eventsource is null"),
+                               KErrArgument));
+    TInt error = 0;
+    if (aDisplayType == CMMAVideoControl::EDISPLAY_ESWT)
+    {
+        TRAP(error,CMMAVideoControl::StaticSetPropertyL(videoControl, aPropertyType, aPropertyA, aPropertyB));
+    }
+    else
+    {
+        error = eventSource->ExecuteTrap(&CMMAVideoControl::StaticSetPropertyL,
+                                         videoControl,
+                                         aPropertyType,
+                                         aPropertyA,
+                                         aPropertyB);
+    }
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty -");
+    return error;
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty
+(JNIEnv*, jobject, jint aControlHandle, jint aEventSourceHandle,
+ jint aPropertyType, jint aDisplayType)
+{
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty");
+
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl* >(aControlHandle);
+
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+
+    __ASSERT_DEBUG(videoControl,
+                   User::Panic(_L("videocontrol::control is null"),
+                               KErrArgument));
+    __ASSERT_DEBUG(eventSource,
+                   User::Panic(_L("videocontrol::evetnsource is null"),
+                               KErrArgument));
+    TInt returnValue(KErrNone);
+    TInt error = 0;
+
+    if (aDisplayType == CMMAVideoControl::EDISPLAY_ESWT)
+    {
+        TRAP(error,CMMAVideoControl::StaticGetPropertyL(videoControl, aPropertyType, &returnValue));
+    }
+    else
+    {
+        error = eventSource->ExecuteTrap(&CMMAVideoControl::StaticGetPropertyL,
+                                         videoControl,
+                                         aPropertyType,
+                                         &returnValue);
+    }
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty - ");
+    if (error == KErrNone)
+    {
+        return returnValue;
+    }
+    return error;
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot
+(JNIEnv* aJni, jobject, jint aControlHandle, jint /*aEventSourceHandle*/,
+ jstring aProperties)
+{
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot + ");
+
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl* >(aControlHandle);
+
+    //MMAFunctionServer* eventSource =
+    //   reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+
+    __ASSERT_DEBUG(videoControl,
+                   User::Panic(_L("videocontrol::control is null"),
+                               KErrArgument));
+//    __ASSERT_DEBUG(eventSource,
+//                   User::Panic(_L("videocontrol::evetnsource is null"),
+//                               KErrArgument));
+
+    JStringUtils properties(*aJni, aProperties);
+
+    TInt error = 0;
+    TRAP(error,CMMAVideoControl::TakeSnapShotL(videoControl, (const TDesC*)&properties));
+
+    /*
+    TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::TakeSnapShotL,
+                                        videoControl,
+                                        (const TDesC*)&properties));
+     */
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot - ");
+    return error;
+}
+
+/**
+ * Initializes dynamic display mode
+ * @return handle to MMMADirectContent or error code
+ */
+LOCAL_C jint InitDynamicMode(MMAFunctionServer* aEventSource,
+                             JNIEnv* aJni,
+                             CMMAVideoControl* aVideoControl,
+                             jobject aGUIObject,
+                             CMMAEvent* aDeleteRefEvent)
+{
+    TInt contentHandle = 0;
+    /* TInt error = aEventSource->ExecuteTrap(
+                      &CMMAVideoControl::StaticInitDynamicModeL,
+                      aVideoControl,
+                      &contentHandle,
+                      aEventSource,
+                      aGUIObject,
+                      aDeleteRefEvent);
+    */
+    TRAPD(error,CMMAVideoControl::StaticInitDynamicModeL(aVideoControl, aJni, &contentHandle, aEventSource, aGUIObject, aDeleteRefEvent));
+
+    // if init failed return error code
+    if (error != KErrNone)
+    {
+        contentHandle = error;
+    }
+    return contentHandle;
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1initDisplayMode
+(JNIEnv* aJni, jobject aJavaVideoControl, jint aControlHandle, jint aEventSourceHandle,
+ jobject aJavaDisplayObj, jobject aComponent,jint aGuiType)
+{
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1initDisplayMode +");
+    LOG1(EJavaMMAPI, EInfo, "aControlHandle = %d", aControlHandle);
+    LOG1(EJavaMMAPI, EInfo, "aEventSourceHandle = %d", aEventSourceHandle);
+//    LOG1( EJavaMMAPI, EInfo, "aComponentHandle = %d", aComponentHandle);
+
+    TInt type = aGuiType;
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl* >(aControlHandle);
+
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+
+    jobject javaVideoControlPeer = aJni->NewWeakGlobalRef(aJavaVideoControl);
+
+    // Reference need to created to the component that component won't be deleted
+    // before display associated to it.
+    jobject componentRef = aJni->NewGlobalRef(aComponent);
+    if (componentRef == NULL)
+    {
+        return KErrNoMemory;
+    }
+    // Component reference need to be deleted in controls destructor. Created here to
+    // be sure that reference can be deleted. .
+    CMMAEvent* deleteRefEvent = new CMMADeleteRefEvent(componentRef);
+    // Cleanup stack is not needed, because static init takes the ownership and
+    // cannot leave before that.
+    if (!deleteRefEvent)
+    {
+        aJni->DeleteGlobalRef(componentRef);
+        return KErrNoMemory;
+    }
+
+// for javaside display object  // TODO:  delete this object after its not required in destructor of control
+
+    // Reference need to created to the component that component won't be deleted
+    // before display associated to it.
+    jobject javaDisplayRef = aJni->NewGlobalRef(aJavaDisplayObj);
+    if (javaDisplayRef == NULL)
+    {
+        return KErrNoMemory;
+    }
+
+    // other modes has component
+    if (type == CMMAVideoControl::EDISPLAY_ESWT)
+    {
+        return InitDynamicMode(eventSource,
+                               aJni,
+                               videoControl,
+                               javaDisplayRef,
+                               deleteRefEvent);
+    }
+
+    //  MMIDComponent* component = JavaUnhand< MMIDComponent >(aComponentHandle);
+
+
+    __ASSERT_DEBUG(videoControl,
+                   User::Panic(_L("videocontrol::control is null"),
+                               KErrArgument));
+//    __ASSERT_DEBUG(component,
+//                   User::Panic(_L("videocontrol::component is null"),
+//                               KErrArgument));
+    __ASSERT_DEBUG(eventSource,
+                   User::Panic(_L("videocontrol::eventsource is null"),
+                               KErrArgument));
+    TInt handle(0);
+
+    TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::StaticInitL,
+                                        videoControl,
+                                        javaDisplayRef,
+                                        eventSource,
+                                        &handle,
+                                        deleteRefEvent,
+                                        type));
+    LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1initDisplayMode - ");
+    if (error == KErrNone)
+    {
+        return handle;
+    }
+    return error;
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1setForeground
+(JNIEnv* /*aJni*/, jobject, jint aControlHandle, jint aEventSourceHandle, jint aIsForeground)
+{
+    LOG1(EJavaMMAPI, EInfo, "_1setForeground + FOREGROUND = %d",aIsForeground);
+    CMMAVideoControl* videoControl =
+        reinterpret_cast< CMMAVideoControl *>(aControlHandle);
+
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+
+    TInt handle(0);
+    TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::StaticSetForegroundL,
+                                        videoControl,
+                                        aIsForeground));
+    if (error == KErrNone)
+    {
+        LOG(EJavaMMAPI, EInfo, "_1setForeground -");
+        return handle;
+    }
+
+    LOG(EJavaMMAPI, EInfo, "_1setForeground -");
+    return error;
+}
+JNIEXPORT jboolean JNICALL Java_com_nokia_microedition_media_control_VideoControl__1isESWT
+(JNIEnv *, jobject)
+{
+    /*
+       MSwtClient* client = NULL;
+       TRAP_IGNORE(client = SWT::CreateClientL());
+
+       if (!client)
+       {
+           return false; // LCDUI midlet running
+       }
+       else
+       {
+           delete client;
+           client = NULL;
+           return true;  // eSWT midlet running
+       }
+    */
+    // enable above code once you have support for eswt in 3.2.3, it is already enable for 5.0
+    return false;
+}
+//  END OF FILE