diff -r 4ad59aaee882 -r 2f468c1958d0 javauis/nokiauiapi_qt/src/os.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/nokiauiapi_qt/src/os.cpp Mon Oct 04 00:10:53 2010 +0300 @@ -0,0 +1,262 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Nokia Corporation - initial implementation + *******************************************************************************/ + +#include +#include +#include +#include +#include "autorelease.h" +#include "csoftnotification.h" + +static CCoeControl* convertToSymbian(QWidget* window) + { + CCoeControl* control = 0; + if (window && window->winId()) + { + control = reinterpret_cast (window->winId()); + } + return control; + } + +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1InstantFeedback( + JNIEnv *, jclass, jint aStyle) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + feedback->InstantFeedback(static_cast (aStyle)); + } + } + +JNIEXPORT jboolean JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1TouchFeedbackSupported( + JNIEnv *, jclass) + { + jboolean enabled = JNI_FALSE; + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + enabled = feedback->TouchFeedbackSupported() ? JNI_TRUE : JNI_FALSE; + } + return enabled; + } + +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1SetFeedbackArea( + JNIEnv *, jclass, jint aControl, jint aAreaIndex, jint aX, jint aY, + jint aWidth, jint aHeight, jint aStyle) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + CCoeControl* control = convertToSymbian( + reinterpret_cast (aControl)); + TRect feedbackRect(aX, aY, aX + aWidth, aY + aHeight); + feedback->SetFeedbackArea(control, static_cast (aAreaIndex), + feedbackRect, static_cast (aStyle), + ETouchEventStylusDown); + } + } + +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackArea( + JNIEnv *, jclass, jint aControl, jint aAreaIndex) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + CCoeControl* control = convertToSymbian( + reinterpret_cast (aControl)); + feedback->RemoveFeedbackArea(control, aAreaIndex); + } + } + +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackForControl( + JNIEnv *, jclass, jint aControl) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + CCoeControl* control = convertToSymbian( + reinterpret_cast (aControl)); + feedback->RemoveFeedbackForControl(control); + } + } + +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1MoveFeedbackAreaToFirstPriority( + JNIEnv *, jclass, jint aControl, jint aAreaIndex) + { + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if (feedback) + { + CCoeControl* control = convertToSymbian( + reinterpret_cast (aControl)); + feedback->MoveFeedbackAreaToFirstPriority(control, + static_cast (aAreaIndex)); + } + } + +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_internal_OS_createNativePeer( + JNIEnv* aJniEnv, jclass /*aClazz*/, jint aMidletId, + jint aNotificationId, jobject aPeer) + { + jobject peer = aJniEnv->NewWeakGlobalRef(aPeer); + if (!peer) + return KErrNoMemory; + + // creates soft notification instance + CSoftNotification* softNote = NULL; + TRAPD(err, softNote = CSoftNotification::NewL(aMidletId, + aNotificationId)); + if(err!=KErrNone) + { + aJniEnv->DeleteWeakGlobalRef((jweak)peer); + return err; + } + + // callback object class + jclass clazz = aJniEnv->GetObjectClass(peer); + jmethodID methodId = aJniEnv->GetMethodID(clazz, "notificationCallback", + "(I)V"); + + softNote->SetPeerObserver(peer, methodId, aJniEnv); + aJniEnv->DeleteLocalRef(clazz); + return reinterpret_cast (softNote); + } + +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_internal_OS_getId(JNIEnv* /*aJniEnv*/, + jclass /*aPeer*/, jint aSoftNotificationHandle) + { + CSoftNotification* softNotification = + reinterpret_cast (aSoftNotificationHandle); + return softNotification->Id(); + } + +HBufC* JavaStringToSymbianString(JNIEnv* aJniEnv, jstring aText) + { + HBufC* bufferText = NULL; + + jboolean isCopy; + const jchar* javaChars = aJniEnv->GetStringChars(aText, &isCopy); + if (javaChars) + { + AutoReleaseStringChars cleaner(aJniEnv, aText, javaChars); + jsize length = aJniEnv->GetStringLength(aText); + TRAPD(err, bufferText = HBufC::NewL(length)); + if (err == KErrNone) + { + TText* ptr = const_cast (bufferText->Des().Ptr()); + memcpy(ptr, javaChars, length * sizeof(jchar)); + bufferText->Des().SetLength(length); + } + else + { + return bufferText; + } + } + else + { + return bufferText; + } + + return bufferText; + } + +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_internal_OS_setText(JNIEnv* aJniEnv, jclass /*aPeer*/, + jint aSoftNotificationHandle, jstring aPrimaryText, jstring aSecondaryText) + { + CSoftNotification* softNotification = + reinterpret_cast (aSoftNotificationHandle); + // Convert from java string to Symbian descriptor + HBufC* bufferPrimaryText = NULL; + if (aPrimaryText != NULL) + { + bufferPrimaryText = JavaStringToSymbianString(aJniEnv, aPrimaryText); + if (bufferPrimaryText == NULL) + { + return KErrNoMemory; + } + } + + HBufC* bufferSecondaryText = NULL; + if (aSecondaryText != NULL) + { + bufferSecondaryText = JavaStringToSymbianString(aJniEnv, + aSecondaryText); + if (bufferSecondaryText == NULL) + { + return KErrNoMemory; + } + } + TRAPD(err,softNotification->SetTextL(*bufferPrimaryText, *bufferSecondaryText)); + return err; + } + +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_internal_OS_removeSoftNotification(JNIEnv* /*aJniEnv*/, + jclass /*aPeer*/, jint aSoftNotificationHandle) + { + CSoftNotification* softNotification = + reinterpret_cast (aSoftNotificationHandle); + TRAPD(err,softNotification->RemoveSoftNotificationL()); + delete softNotification; + return err; + } + +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_internal_OS_showSoftNotification(JNIEnv* /*aJniEnv*/, + jclass /*aPeer*/, jint aSoftNotificationHandle) + { + CSoftNotification* softNotification = + reinterpret_cast (aSoftNotificationHandle); + jboolean status(false); + TRAPD(err,status = softNotification->ShowSoftNotificationL()); + if(status) + { + return err; + } + else + { + return KErrNone; + } + } + +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_internal_OS_setImagePath(JNIEnv* aJniEnv, + jclass /*aPeer*/, jint aSoftNotificationHandle, jstring aImagePath ) + { + CSoftNotification* softNotification = + reinterpret_cast (aSoftNotificationHandle); + // Convert from java string to Symbian descriptor + HBufC* bufferImagePath = NULL; + if (aImagePath != NULL) + { + bufferImagePath = JavaStringToSymbianString(aJniEnv, aImagePath); + if (bufferImagePath == NULL) + { + return KErrNoMemory; + } + } + TRAPD(err,softNotification->SetImagePathL(*bufferImagePath)); + return err; + } + +JNIEXPORT void JNICALL +Java_com_nokia_mid_ui_internal_OS_destroy(JNIEnv* /*aJniEnv*/, + jclass /*clazz*/, jint aSoftNotificationHandle) + { + if (aSoftNotificationHandle > KErrNone) + { + CSoftNotification + * softNotification = + reinterpret_cast (aSoftNotificationHandle); + delete softNotification; + } + }