diff -r 773449708c84 -r 4ad59aaee882 javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp --- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp Thu Sep 02 20:20:40 2010 +0300 +++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp Fri Sep 17 08:28:21 2010 +0300 @@ -23,6 +23,9 @@ #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK +#include +#include +#include #include #include @@ -51,7 +54,7 @@ * This method makes calls that may leave (the actual notifying). */ void NotifyStartL( - JNIEnv *aEnv, CPublishSifOperationInfo *aNotifier, + JNIEnv *aEnv, CPublishSifOperationInfo *aNotifier, jint aOperation, jstring aGlobalComponentId, jstring aComponentName, jobjectArray aApplicationNames, jobjectArray aApplicationIcons, jint aComponentSize, jstring aIconDir, jstring /*aComponentIcon*/) @@ -106,7 +109,8 @@ CSifOperationStartData::NewLC( *globalComponentId, *componentName, applicationNames, applicationIcons, aComponentSize, /*aIconPath=*/ (NULL != aIconDir? *iconDir: KNullDesC()), - /*aComponentIcon=*/ KNullDesC(), Usif::KSoftwareTypeJava); + /*aComponentIcon=*/ KNullDesC(), Usif::KSoftwareTypeJava, + (TSifOperationPhase)aOperation); aNotifier->PublishStartL(*startData); @@ -130,16 +134,17 @@ * Signature: (IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1notifyStart -(JNIEnv *aEnv, jclass, jint aHandle, jstring aGlobalComponentId, - jstring aComponentName, jobjectArray aApplicationNames, - jobjectArray aApplicationIcons, jint aComponentSize, - jstring aIconDir, jstring aComponentIcon) +(JNIEnv *aEnv, jclass, jint aHandle, jint aOperation, + jstring aGlobalComponentId, jstring aComponentName, + jobjectArray aApplicationNames, jobjectArray aApplicationIcons, + jint aComponentSize, jstring aIconDir, jstring aComponentIcon) { CPublishSifOperationInfo *pNotifier = reinterpret_cast(aHandle<<2); - TRAPD(err, NotifyStartL(aEnv, pNotifier, aGlobalComponentId, aComponentName, - aApplicationNames, aApplicationIcons, - aComponentSize, aIconDir, aComponentIcon)); + TRAPD(err, NotifyStartL(aEnv, pNotifier, aOperation, aGlobalComponentId, + aComponentName, aApplicationNames, + aApplicationIcons, aComponentSize, + aIconDir, aComponentIcon)); return err; } @@ -297,6 +302,103 @@ return KErrNone; } +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _initIndicator + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1initIndicator +(JNIEnv *, jclass) +{ + CHbIndicatorSymbian *pIndicator = NULL; + TRAPD(err, pIndicator = CHbIndicatorSymbian::NewL()); + if (KErrNone != err) + { + ELOG1(EJavaInstaller, + "SifNotifier.initIndicator: Creating indicator failed, error %d", + err); + return err; + } + // Return handle to the object. Utilize the fact that in Symbian + // all pointer addresses are MOD 4 so the last 2 bits are 0 + // and can be shifted out. This way the returned handle is + // always positive whereas Symbian error codes are always negative. + return reinterpret_cast(pIndicator)>>2; +} + +/** + * See JNI method __1updateIndicator. + * This method makes calls that may leave (the actual notifying). + */ +void UpdateIndicatorL( + JNIEnv *aEnv, CHbIndicatorSymbian *pIndicator, jstring aName, jint aPhase, jint aProgress) +{ + HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aName); + + CHbSymbianVariantMap *variantMap = CHbSymbianVariantMap::NewL(); + CleanupStack::PushL(variantMap); + CHbSymbianVariant *variantName = CHbSymbianVariant::NewL(name, CHbSymbianVariant::EDes); + variantMap->Add(KSifUiInstallIndicatorAppName, variantName); + CHbSymbianVariant *variantPhase = CHbSymbianVariant::NewL(&aPhase, CHbSymbianVariant::EInt); + variantMap->Add(KSifUiInstallIndicatorPhase, variantPhase); + CHbSymbianVariant *variantProgress = CHbSymbianVariant::NewL(&aProgress, CHbSymbianVariant::EInt); + variantMap->Add(KSifUiInstallIndicatorProgress, variantProgress); + + CHbSymbianVariant *variant = CHbSymbianVariant::NewL(variantMap, CHbSymbianVariant::EVariantMap); + CleanupStack::PushL(variant); + + TInt err = KErrNone; + if (!pIndicator->Activate(KSifUiInstallIndicatorType, variant)) + { + err = pIndicator->Error(); + ELOG1(EJavaInstaller, + "SifNotifier.updateIndicator: activating indicator failed, error %d", + err); + err = KErrGeneral; + } + + CleanupStack::PopAndDestroy(variant); + CleanupStack::PopAndDestroy(variantMap); + CleanupStack::PopAndDestroy(name); +} + +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _updateIndicator + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1updateIndicator +(JNIEnv *aEnv, jclass, jint aHandle, jstring aName, jint aPhase, jint aProgress) +{ + CHbIndicatorSymbian *pIndicator = + reinterpret_cast(aHandle<<2); + TRAPD(err, UpdateIndicatorL(aEnv, pIndicator, aName, aPhase, aProgress)); + return err; +} + +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _destroyIndicator + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1destroyIndicator +(JNIEnv *, jclass, jint aHandle, jint aState) +{ + CHbIndicatorSymbian *pIndicator = + reinterpret_cast(aHandle<<2); + TInt err = KErrNone; + if (aState && !pIndicator->Deactivate(KSifUiInstallIndicatorType)) + { + err = pIndicator->Error(); + ELOG1(EJavaInstaller, + "SifNotifier.destroyIndicator: Deactivating indicator failed, error %d", + err); + err = KErrGeneral; + } + delete pIndicator; + return err; +} + #else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK /* @@ -316,7 +418,7 @@ * Signature: (IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1notifyStart -(JNIEnv *, jclass, jint, jstring, jstring, jobjectArray, jobjectArray, jint, jstring, jstring) +(JNIEnv *, jclass, jint, jint, jstring, jstring, jobjectArray, jobjectArray, jint, jstring, jstring) { LOG(EJavaInstaller, EInfo, "SifNotifier.notifyStart"); return KErrNone; @@ -381,4 +483,40 @@ return KErrNone; } +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _initIndicator + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1initIndicator +(JNIEnv *, jclass) +{ + LOG(EJavaInstaller, EInfo, "SifNotifier.initIndicator"); + return 1; // return dummy object handle +} + +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _updateIndicator + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1updateIndicator +(JNIEnv *, jclass, jint, jstring, jint, jint) +{ + LOG(EJavaInstaller, EInfo, "SifNotifier.updateIndicator"); + return KErrNone; +} + +/* + * Class: com_nokia_mj_impl_installer_applicationregistrator_SifNotifier + * Method: _destroyIndicator + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifNotifier__1destroyIndicator +(JNIEnv *, jclass, jint, jint) +{ + LOG(EJavaInstaller, EInfo, "SifNotifier.destroyIndicator"); + return KErrNone; +} + #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK