--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/softnotification_akn/src/SoftNotification.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,490 @@
+/*
+* Copyright (c) 2008 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: JNI context for SoftNotificationImpl Java class.
+ *
+*/
+
+
+// INCLUDE FILES
+#include <jutils.h>
+#include <JniEnvWrapper.h>
+#include <jdebug.h>
+#include "com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl.h"
+#include "CSoftNotification.h"
+#include "CSoftNotificationEventSource.h"
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotification
+ * Method: _createEventSource
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1createEventSource(
+ JNIEnv* aJniEnv,
+ jobject aPeer,
+ jint aEventServerHandle)
+{
+ DEBUG("SoftNotification::_createEventSource +");
+
+ TInt eventSourceHandle = CSoftNotificationEventSource::New(
+ *aJniEnv,
+ aPeer,
+ aEventServerHandle);
+
+ DEBUG_INT("SoftNotification::_createEventSource -, handle=%d",
+ eventSourceHandle);
+
+ return eventSourceHandle;
+}
+
+/*
+ * Wrapper for CSoftNotification::NewL().
+ */
+LOCAL_C void CreateSoftNotificationL(
+ TInt* aSoftNotificationHandle,
+ CSoftNotificationEventSource* aEventSource,
+ jobject aPeer,
+ TInt aMidletId,
+ TInt aNotificationId)
+{
+ DEBUG("SoftNotification::CreateSoftNotificationL +");
+
+ JNIEnv* jniEnv = JniEnvWrapper::GetValidJniRef();
+
+ // Get method id for the notify function.
+ jclass classRef = jniEnv->GetObjectClass(aPeer);
+ jmethodID methodId = jniEnv->GetMethodID(
+ classRef, "notificationCallback", "(I)V");
+
+ // Handle possible exception occurred during the previous operation.
+ if (jniEnv->ExceptionCheck())
+ {
+ // Print the stack trace and clear the pending exception from
+ // the Java VM.
+ jniEnv->ExceptionDescribe();
+ jniEnv->ExceptionClear();
+ User::Leave(KErrGeneral);
+ }
+
+ // create a soft notification instance
+ CSoftNotification* softNote = CSoftNotification::NewL(
+ aMidletId,
+ aNotificationId,
+ *aEventSource);
+
+ // The weak reference is stored in the created soft notification object.
+ // The reference will be deleted when the object is destroyed.
+ softNote->SetPeerObserver(aPeer, methodId);
+
+ // Get handle to the created soft notification.
+ *aSoftNotificationHandle = JavaMakeHandle(softNote);
+
+ DEBUG("SoftNotification::CreateSoftNotificationL -");
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotification
+ * Method: _createNativePeer
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1createNativePeer(
+ JNIEnv* aJniEnv,
+ jobject aPeer,
+ jint aEventSourceHandle,
+ jint aMIDletID,
+ jint aNotificationId)
+{
+ DEBUG("SoftNotification::_createNativePeer +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ // Create a weak reference since the object is transferred between
+ // two threads. The reference is deleted when the native class is destroyed.
+ jobject peer = aJniEnv->NewWeakGlobalRef(aPeer);
+
+ // Handle possible exception occurred during the previous operation.
+ if (aJniEnv->ExceptionCheck())
+ {
+ // Print the stack trace and clear the pending exception from
+ // the Java VM.
+ aJniEnv->ExceptionDescribe();
+ aJniEnv->ExceptionClear();
+ return KErrNoMemory;
+ }
+
+ TInt softNotificationHandle = 0;
+
+ TInt error = eventSource->ExecuteTrap(
+ &CreateSoftNotificationL,
+ &softNotificationHandle,
+ eventSource,
+ peer,
+ aMIDletID,
+ aNotificationId);
+
+ // Delete the created global reference if object creation failed.
+ if (error != KErrNone)
+ {
+ softNotificationHandle = error;
+ aJniEnv->DeleteWeakGlobalRef((jweak)peer);
+ }
+
+ DEBUG_INT("SoftNotification::_createNativePeer -, handle=%d",
+ softNotificationHandle);
+
+ return softNotificationHandle;
+}
+
+/*
+ * Destroys the given soft notification and global reference that it owns.
+ */
+LOCAL_C void DestroyNotification(CSoftNotification* aNotification)
+{
+ DEBUG("SoftNotification::DestroyNotification +");
+
+ JNIEnv* jniEnv = JniEnvWrapper::GetValidJniRef();
+
+ // Delete the weak reference stored in the class.
+ aNotification->RemovePeerObserver(*jniEnv);
+
+ delete aNotification;
+
+ DEBUG("SoftNotification::DestroyNotification -");
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotification
+ * Method: _destroy
+ */
+JNIEXPORT void JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1destroy(
+ JNIEnv* aJniEnv,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle)
+{
+ DEBUG_INT("SoftNotification::_destroy +, handle=%d",
+ aSoftNotificationHandle);
+
+ // There are no native resources if event server is not yet created or
+ // is already destroyed.
+ if (aEventSourceHandle <= KErrNone)
+ {
+ DEBUG("SoftNotification::_destroy -, nothing to do");
+ return;
+ }
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ // Destroy the soft notification. The destruction has to be done in the
+ // event server thread because all used resources are not shared between
+ // different threads.
+ if (aSoftNotificationHandle > KErrNone)
+ {
+ CSoftNotification* notification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+ eventSource->Execute(&DestroyNotification, notification);
+ }
+
+ // Destroy the event source.
+ eventSource->Dispose(*aJniEnv);
+
+ DEBUG("SoftNotification::_destroy -");
+}
+
+/*
+ * wrapper for CSoftNotification::ShowSoftNotificationL()
+ */
+LOCAL_C void ShowSoftNotificationL(
+ CSoftNotification* aSoftNotification)
+{
+ aSoftNotification->ShowSoftNotificationL();
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotification
+ * Method: _showSoftNotification
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1showSoftNotification(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle)
+{
+ DEBUG("SoftNotification::_showSoftNotification +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+
+ TInt error = eventSource->ExecuteTrap(
+ &ShowSoftNotificationL,
+ softNotification);
+
+ DEBUG("SoftNotification::_showSoftNotification -");
+
+ return error;
+}
+
+/*
+ * wrapper for CSoftNotification::RemoveSoftNotificationL()
+ */
+LOCAL_C void RemoveSoftNotificationL(
+ CSoftNotification* aSoftNotification)
+{
+ aSoftNotification->RemoveSoftNotificationL();
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotification
+ * Method: _removeSoftNotification
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1removeSoftNotification(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle)
+{
+ DEBUG("SoftNotification::_removeSoftNotification +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+
+ TInt error = eventSource->ExecuteTrap(
+ &RemoveSoftNotificationL,
+ softNotification);
+
+ DEBUG("SoftNotification::_removeSoftNotification -");
+
+ return error;
+}
+
+/*
+ * wrapper for CSoftNotification::SetTextL()
+ */
+LOCAL_C void SetTextL(
+ CSoftNotification* aSoftNotification,
+ TDesC* aText,
+ TDesC* aGroupText)
+{
+ aSoftNotification->SetTextL(*aText, *aGroupText);
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotificationImpl
+ * Method: _setText
+ */
+JNIEXPORT int JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1setText(
+ JNIEnv* aJni,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle,
+ jstring aText,
+ jstring aGroupText)
+{
+ DEBUG("SoftNotification::_setText +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+
+ RJString text(*aJni, aText);
+ RJString grouptext(*aJni, aGroupText);
+
+ TInt error = eventSource->ExecuteTrap(
+ &SetTextL,
+ softNotification,
+ (TDesC*)&text,
+ (TDesC*)&grouptext);
+
+ DEBUG("SoftNotification::_setText -");
+
+ return error;
+}
+
+/*
+ * wrapper for CSoftNotification::SetSoftkeyLabels()
+ */
+LOCAL_C void SetSoftkeyLabelsL(
+ CSoftNotification* aSoftNotification,
+ TDesC* aSoftkey1Label,
+ TDesC* aSoftkey2Label)
+{
+ aSoftNotification->SetSoftkeyLabelsL(*aSoftkey1Label, *aSoftkey2Label);
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotificationImpl
+ * Method: _setSoftkeyLabels
+ */
+JNIEXPORT int JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1setSoftkeyLabels(
+ JNIEnv* aJni,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle,
+ jstring aSoftkey1Label,
+ jstring aSoftkey2Label)
+{
+ DEBUG("SoftNotification::_setSoftkeyLabels +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+
+ RJString softkey1Label(*aJni, aSoftkey1Label);
+ RJString softkey2Label(*aJni, aSoftkey2Label);
+
+ TInt error = eventSource->ExecuteTrap(
+ &SetSoftkeyLabelsL,
+ softNotification,
+ (TDesC*)&softkey1Label,
+ (TDesC*)&softkey2Label);
+
+ DEBUG("SoftNotification::_setSoftkeyLabels -");
+
+ return error;
+}
+
+/*
+ * wrapper for CSoftNotification::SetImage()
+ */
+LOCAL_C void SetImageL(
+ CSoftNotification* aSoftNotification,
+ const TDesC8* aImageData)
+{
+ aSoftNotification->SetImageL(*aImageData);
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotificationImpl
+ * Method: _setImage
+ */
+JNIEXPORT int JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1setImage(
+ JNIEnv* aJni,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle,
+ jbyteArray aImageData)
+{
+ DEBUG("SoftNotification::_setImage +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+
+ // Returning just KErrNone if there is no image data
+ TInt error = KErrNone;
+
+ if (aImageData)
+ {
+ // Image data: Get pointer to Java header data
+ jbyte* imageDataJava = aJni->GetByteArrayElements(aImageData, NULL);
+
+ // Handle possible exception occurred during the previous operation.
+ if (aJni->ExceptionCheck())
+ {
+ // Print the stack trace and clear the pending exception from
+ // the Java VM.
+ aJni->ExceptionDescribe();
+ aJni->ExceptionClear();
+ return KErrNoMemory;
+ }
+
+ TInt imageDataLength = aJni->GetArrayLength(aImageData);
+ TPtrC8 imageData((TUint8*)imageDataJava, imageDataLength);
+
+ error = eventSource->ExecuteTrap(
+ &SetImageL,
+ softNotification,
+ (const TDesC8*)&imageData);
+
+ // Release image bytes got with GetByteArrayElements.
+ // The function does not throw any exceptions.
+ aJni->ReleaseByteArrayElements(aImageData,
+ imageDataJava,
+ 0);
+ }
+ else
+ {
+ // No image data defined, reset previous image.
+ TPtrC8 imageData(KNullDesC8);
+ error = eventSource->ExecuteTrap(
+ &SetImageL,
+ softNotification,
+ (const TDesC8*)&imageData);
+ }
+
+ DEBUG("SoftNotification::_setImage -");
+
+ return error;
+}
+
+/*
+ * wrapper for CSoftNotification::GetId()
+ */
+LOCAL_C TInt GetId(CSoftNotification* aSoftNotification)
+{
+ return aSoftNotification->Id();
+}
+
+/*
+ * Class: com_nokia_mid_ui_SoftNotificationImpl
+ * Method: _getId
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_mj_impl_dynamicsoftnotification_SoftNotificationImpl__1getId(
+ JNIEnv* /*aJniEnv*/,
+ jobject /*aPeer*/,
+ jint aEventSourceHandle,
+ jint aSoftNotificationHandle)
+{
+ DEBUG("SoftNotification::_getId +");
+
+ CSoftNotificationEventSource* eventSource =
+ JavaUnhand< CSoftNotificationEventSource >(aEventSourceHandle);
+
+ CSoftNotification* softNotification =
+ JavaUnhand< CSoftNotification >(aSoftNotificationHandle);
+
+ TInt id = eventSource->Execute(&GetId, softNotification);
+
+ DEBUG("SoftNotification::_getId -");
+
+ return id;
+}
+
+// End of File