javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp
branchRCL_3
changeset 24 6c158198356e
parent 18 9ac0a0a7da70
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp	Thu Jul 15 18:31:06 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp	Thu Aug 19 09:48:13 2010 +0300
@@ -21,21 +21,11 @@
 #include "javasymbianoslayer.h" // for CleanupResetAndDestroyPushL
 #include "logger.h"
 
-#if defined(SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK) && defined(RD_JAVA_USIF_NOTIFY_PROGRESS)
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 #include <usif/sif/sifnotification.h>
 #include <usif/usifcommon.h>
 
-// Helper macro for logging a TDesC.
-#define LOG_TDESC_L(compIdParam, logLevelParam, msgParam, tdescParam) \
-    {                                                               \
-        HBufC8* tdescBuf = HBufC8::NewLC(tdescParam.Length() + 1);  \
-        TPtr8 tdescPtr(tdescBuf->Des());                            \
-        tdescPtr.Append(tdescParam);                                \
-        LOG1(compIdParam, logLevelParam, msgParam, tdescPtr.PtrZ());\
-        CleanupStack::PopAndDestroy(tdescBuf);                      \
-    }
-
 // NAMESPACE DECLARATION
 using namespace java;
 using namespace Usif;
@@ -101,6 +91,7 @@
                 HBufC *appIcon = CreateHBufCFromJavaStringLC(aEnv, tmpAppIcon);
                 applicationIcons.AppendL(appIcon);
                 CleanupStack::Pop(appIcon);
+                aEnv->DeleteLocalRef(tmpAppIcon);
             }
             else
             {
@@ -161,7 +152,7 @@
     jstring aGlobalComponentId, jint aErrCategory, jint aErrCode,
     jstring aErrMsg, jstring aErrMsgDetails)
 {
-    __UHEAP_MARK;
+    //__UHEAP_MARK;
     HBufC *globalComponentId = CreateHBufCFromJavaStringLC(aEnv, aGlobalComponentId);
     HBufC *errMsg = NULL;
     if (NULL != aErrMsg)
@@ -174,24 +165,29 @@
         errMsgDetails = CreateHBufCFromJavaStringLC(aEnv, aErrMsgDetails);
     }
 
-    CSifOperationEndData *endData = CSifOperationEndData::NewLC(
-                                        *globalComponentId, (TErrorCategory)aErrCategory, aErrCode,
-                                        *errMsg, *errMsgDetails);
+    CSifOperationEndData *endData =
+        CSifOperationEndData::NewLC(
+            *globalComponentId, (TErrorCategory)aErrCategory, aErrCode,
+            (NULL != errMsg? *errMsg: KNullDesC()),
+            (NULL != errMsgDetails? *errMsgDetails: KNullDesC()));
 
+    // Do not use UHEAP macros around PublishCompletionL() because it
+    // creates a timer object which gets deleted only when the notifier
+    // object is deleted.
     aNotifier->PublishCompletionL(*endData);
 
     CleanupStack::PopAndDestroy(endData);
 
-    if (NULL != aErrMsg)
+    if (NULL != errMsgDetails)
+    {
+        CleanupStack::PopAndDestroy(errMsgDetails);
+    }
+    if (NULL != errMsg)
     {
         CleanupStack::PopAndDestroy(errMsg);
     }
-    if (NULL != aErrMsgDetails)
-    {
-        CleanupStack::PopAndDestroy(errMsgDetails);
-    }
     CleanupStack::PopAndDestroy(globalComponentId);
-    __UHEAP_MARKEND;
+    //__UHEAP_MARKEND;
 }
 
 /*
@@ -203,10 +199,25 @@
 (JNIEnv *aEnv, jclass, jint aHandle, jstring aGlobalComponentId,
  jint aErrCategory, jint aErrCode, jstring aErrMsg, jstring aErrMsgDetails)
 {
+    CActiveScheduler* newScheduler = 0;
+    if (0 == CActiveScheduler::Current())
+    {
+        // Create ActiveScheduler as it does not yet exist.
+        newScheduler = new CActiveScheduler;
+        CActiveScheduler::Install(newScheduler);
+    }
+
     CPublishSifOperationInfo *pNotifier =
         reinterpret_cast<CPublishSifOperationInfo*>(aHandle<<2);
     TRAPD(err, NotifyEndL(aEnv, pNotifier, aGlobalComponentId,
                           aErrCategory, aErrCode, aErrMsg, aErrMsgDetails));
+
+    if (newScheduler)
+    {
+        delete newScheduler;
+        newScheduler = 0;
+    }
+
     return err;
 }
 
@@ -286,7 +297,7 @@
     return KErrNone;
 }
 
-#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK && RD_JAVA_USIF_NOTIFY_PROGRESS
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 /*
  * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifNotifier
@@ -370,4 +381,4 @@
     return KErrNone;
 }
 
-#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK && RD_JAVA_USIF_NOTIFY_PROGRESS
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK