diff -r b276298d5729 -r edd621764147 homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp --- a/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp Tue Apr 27 16:57:49 2010 +0300 +++ b/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp Tue May 11 16:30:05 2010 +0300 @@ -198,7 +198,7 @@ { // remove widget data when widget removed from screen CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); - InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll ); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); // removal may fail if the client has already removed the data TRAP_IGNORE( RemoveFromCpsL( cpdatamap, KCpData ) ); mWidgetContentIds.erase( aWidget.getIdentifier() ); @@ -411,54 +411,45 @@ // --------------------------------------------------------------------------- // void HsWidgetPublisherImpl::PublishWidgetDataL( HsWidget& aWidget ) - { - CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL()); - CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL()); - TLiwGenericParam type(KType, TLiwVariant(KCpData)); - - int count = aWidget.itemsCount(); - for( int i = 0; i < count; i++ ) - { - inParam->AppendL(type); - CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); - - HsWidgetItem* const widgetItem = aWidget.getWidgetItem( i ); - - // insert widget data identifiers - HBufC* itemName = StdStringToUnicodeLC( widgetItem->getItemName()); - InsertWidgetDataIdentifiersL( aWidget, cpdatamap, *itemName ); - CleanupStack::PopAndDestroy( itemName ); - - // insert widget item - CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC(); - InsertWidgetItemL( *widgetItem, datamap ); - cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) ); - - // insert widget access control list - InsertWidgetACLL( cpdatamap ); - - // insert item triggers - CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC(); - InsertItemTriggerL( *widgetItem, triggermap ); - cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) ); - CleanupStack::PopAndDestroy( triggermap ); + { + CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL()); + CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL()); + + TLiwGenericParam type(KType, TLiwVariant(KCpData)); + inParam->AppendL(type); + + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); + + CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC(); + InsertWidgetItemsL( aWidget, datamap ); + cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) ); + InsertWidgetACLL( cpdatamap ); + + int count = aWidget.itemsCount(); + if( count > 0 ) + { + CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC(); + InsertItemsTriggersL( aWidget, triggermap ); + cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) ); + CleanupStack::PopAndDestroy( triggermap ); + } // add to CPS - TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); - inParam->AppendL( item ); - mServiceInterface->ExecuteCmdL( KAdd, - *inParam, *outParam); - TInt ret= ObtainErrorCode( *outParam ); - - CleanupStack::PopAndDestroy( datamap ); - CleanupStack::PopAndDestroy( cpdatamap ); - - item.Reset(); - outParam->Reset(); - inParam->Reset(); - User::LeaveIfError( ret ); - } - type.Reset(); + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + inParam->AppendL( item ); + mServiceInterface->ExecuteCmdL( KAdd, + *inParam, *outParam); + TInt ret= ObtainErrorCode( *outParam ); + + CleanupStack::PopAndDestroy( datamap ); + CleanupStack::PopAndDestroy( cpdatamap ); + + item.Reset(); + type.Reset(); + outParam->Reset(); + inParam->Reset(); + User::LeaveIfError( ret ); } // --------------------------------------------------------------------------- @@ -572,7 +563,7 @@ CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); TRAPD( err, - InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll ); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); RemoveFromCpsL( cpdatamap, KCpData ) ); if ( err != KErrNotFound ) { @@ -783,7 +774,7 @@ // --------------------------------------------------------------------------- // void HsWidgetPublisherImpl::InsertWidgetDataIdentifiersL( HsWidget& aWidget, - CLiwDefaultMap* aDataMap, const TDesC& aContentType ) + CLiwDefaultMap* aDataMap ) { WidgetContentIdMapType::const_iterator contentIdIter = mWidgetContentIds.find( aWidget.getIdentifier() ); @@ -797,7 +788,7 @@ HBufC* publisherName = StdStringToUnicodeLC( GetPublisherNameL( aWidget ) ); aDataMap->InsertL( KPublisherId, TLiwVariant( *publisherName ) ); - aDataMap->InsertL( KContentType, TLiwVariant( aContentType ) ); + aDataMap->InsertL( KContentType, TLiwVariant( KAll ) ); aDataMap->InsertL( KContentId, TLiwVariant( contentId ) ); CleanupStack::PopAndDestroy( publisherName ); @@ -845,25 +836,31 @@ // // --------------------------------------------------------------------------- // -void HsWidgetPublisherImpl::InsertWidgetItemL ( HsWidgetItem& aWidgetItem, +void HsWidgetPublisherImpl::InsertWidgetItemsL ( HsWidget& aWidget, CLiwDefaultMap* aDataMap ) { - TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str()); - if( aWidgetItem.isStringValue() ) - { - TPtrC8 itemValue = ((TUint8*)aWidgetItem.getItemValue().c_str()); - HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() ); - TPtr dest( value->Des() ); - CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue ); - - aDataMap->InsertL( itemName, TLiwVariant(*value )); - CleanupStack::PopAndDestroy(value); - } - else - { - int itemValue = aWidgetItem.getItemValueInt(); - aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) )); - } + int count = aWidget.itemsCount(); + for (int index = 0; index < count; index++) + { + HsWidgetItem* const item = aWidget.getWidgetItem( index ); + + TPtrC8 itemName = ((TUint8*)item->getItemName().c_str()); + if( item->isStringValue() ) + { + TPtrC8 itemValue = ((TUint8*)item->getItemValue().c_str()); + HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() ); + TPtr dest( value->Des() ); + CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue ); + + aDataMap->InsertL( itemName, TLiwVariant(*value )); + CleanupStack::PopAndDestroy(value); + } + else + { + int itemValue = item->getItemValueInt(); + aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) )); + } + } } // --------------------------------------------------------------------------- @@ -941,9 +938,10 @@ // // --------------------------------------------------------------------------- // -void HsWidgetPublisherImpl::InsertItemTriggerL( HsWidgetItem& aWidgetItem, +void HsWidgetPublisherImpl::InsertItemsTriggersL( HsWidget& aWidget, CLiwDefaultMap* aTriggerMap ) { + int count = aWidget.itemsCount(); CLiwDefaultMap* activateAction = CLiwDefaultMap::NewLC(); activateAction->InsertL( KPluginId, TLiwVariant( KCASpaAppLauncherPlugin ) ); @@ -954,10 +952,13 @@ activate->InsertL( KApaCommand, TLiwVariant( KApaCommandBackground ) ); activateAction->InsertL( KData, TLiwVariant( activate ) ); - - TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str()); - aTriggerMap->InsertL( itemName, TLiwVariant( activateAction )); - + + for (int index = 0; index < count; index++) + { + HsWidgetItem* const item = aWidget.getWidgetItem( index ); + TPtrC8 itemName = ((TUint8*)item->getItemName().c_str()); + aTriggerMap->InsertL( itemName, TLiwVariant( activateAction )); + } CleanupStack::PopAndDestroy( activate ); CleanupStack::PopAndDestroy( activateAction ); }