javauis/nokiauiapi_qt/src/os.cpp
changeset 79 2f468c1958d0
child 78 71ad690e91f5
--- /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 <QWidget>
+#include <coecntrl.h>
+#include <touchfeedback.h>
+#include <com_nokia_mid_ui_internal_OS.h>
+#include "autorelease.h"
+#include "csoftnotification.h"
+
+static CCoeControl* convertToSymbian(QWidget* window)
+    {
+    CCoeControl* control = 0;
+    if (window && window->winId())
+        {
+        control = reinterpret_cast<CCoeControl*> (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<TTouchLogicalFeedback> (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<QWidget*> (aControl));
+        TRect feedbackRect(aX, aY, aX + aWidth, aY + aHeight);
+        feedback->SetFeedbackArea(control, static_cast<TUint32> (aAreaIndex),
+                feedbackRect, static_cast<TTouchLogicalFeedback> (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<QWidget*> (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<QWidget*> (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<QWidget*> (aControl));
+        feedback->MoveFeedbackAreaToFirstPriority(control,
+                static_cast<TUint32> (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<jint> (softNote);
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_getId(JNIEnv* /*aJniEnv*/,
+        jclass /*aPeer*/, jint aSoftNotificationHandle)
+    {
+    CSoftNotification* softNotification =
+            reinterpret_cast<CSoftNotification*> (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<TText*> (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<CSoftNotification*> (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<CSoftNotification*> (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<CSoftNotification*> (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<CSoftNotification*> (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<CSoftNotification*> (aSoftNotificationHandle);
+        delete softNotification;
+        }
+    }