diff -r b01126ce0bec -r ba63c83f4716 menufw/hierarchynavigator/hnmetadatamodel/src/hnrepositoryobserver.cpp --- a/menufw/hierarchynavigator/hnmetadatamodel/src/hnrepositoryobserver.cpp Wed Sep 15 12:00:00 2010 +0300 +++ b/menufw/hierarchynavigator/hnmetadatamodel/src/hnrepositoryobserver.cpp Wed Oct 13 14:18:30 2010 +0300 @@ -227,8 +227,9 @@ { CHnRepositoryObserver::ConstructL( aRepositoryUid ); TInt ret = iRepository->Create( iId, KBlank ); - iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository, - CCenRepNotifyHandler::EStringKey, iId ); + iNotifyHandler = CCenRepNotifyHandler::NewL( + *this, *iRepository, + CCenRepNotifyHandler::EStringKey, iId ); iNotifyHandler->StartListeningL(); } @@ -272,128 +273,129 @@ //++Show Folder if( aId == iId && aNewValue.Length()) - { + { iNotifyType = 0; - ExtractCRKeyShowFolderName( aNewValue ); + ExtractCRKeyShowFolderName( aNewValue ); - // iCRKeyFolderItemUid can contain mcs id or uid - // in case of uid it will be replaced whith id in HandleNotifyL callback - if( iCRKeyFolderItemUid.Length()>0 ) + // iCRKeyFolderItemUid can contain mcs id or uid + // in case of uid it will be replaced whith id in HandleNotifyL callback + if( iCRKeyFolderItemUid.Length()>0 ) + { + if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 ) + { + iNotifyType |= EAPP_UID; + } + else + { + iNotifyType |= EAPP_ID; + } + } + + CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( + KInData8, KKeyTypeMap, KDefaultParentId8 ); + CleanupStack::PushL( inDataKey ); + + CHnMdBaseKey* filter( NULL ); + HBufC8* id( NULL ); + if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) ) { - if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 ) - { - iNotifyType |= EAPP_UID; - } - else - { - iNotifyType |= EAPP_ID; - } + // app group name is known + // id is optional + id = HnConvUtils::NumToStr8LC( KRootId ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); + + filter = HnMdKeyFactory::CreateL( + KFilter8, KKeyTypeMap, KStringTrue8 ); + CleanupStack::PushL( filter ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KMcsAppGroupName8, KKeyTypeString, iCRKeyFolderName ) ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); + } + else if( iNotifyType & EAPP_ID ) + { + // no app group name, id is known + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, iCRKeyFolderItemUid ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); + } + else if( iNotifyType & EAPP_UID ) + { + // uid is known + // app group name is optional + id = HnConvUtils::NumToStr8LC( KRootId ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); + + filter = HnMdKeyFactory::CreateL( + KFilter8, KKeyTypeMap, KStringTrue8 ); + CleanupStack::PushL( filter ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); + filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); + } + else + { + // No app group name, no uid. Search for root. + id = HnConvUtils::NumToStr8LC( KRootId ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); + inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); } - CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( - KInData8, KKeyTypeMap, KDefaultParentId8 ); - CleanupStack::PushL( inDataKey ); - - CHnMdBaseKey* filter( NULL ); - HBufC8* id( NULL ); - if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) ) - { - // app group name is known - // id is optional - id = HnConvUtils::NumToStr8LC( KRootId ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); + RPointerArray< CHnMdBaseKey > data; + CleanupClosePushL( data ); + data.AppendL( inDataKey ); + if ( filter ) + { + data.AppendL( filter ); + } - filter = HnMdKeyFactory::CreateL( - KFilter8, KKeyTypeMap, KStringTrue8 ); - CleanupStack::PushL( filter ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KMcsAppGroupName8, KKeyTypeString, iCRKeyFolderName ) ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); - } - else if( iNotifyType & EAPP_ID ) - { - // no app group name, id is known - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, iCRKeyFolderItemUid ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); - } - else if( iNotifyType & EAPP_UID ) - { - // uid is known - // app group name is optional - id = HnConvUtils::NumToStr8LC( KRootId ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); + CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL( + KServiceContentName, KKeyTypeString, KMatrixMenuData ); + CleanupStack::PushL( serviceData ); + + RPointerArray< CHnMdBaseKey> constructor; + CleanupClosePushL( constructor ); + constructor.AppendL( serviceData ); + CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC(); + CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC(); + HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw ); + HnLiwUtils::SetGenericParamListL( data, *commandLiw ); + + TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 ); - filter = HnMdKeyFactory::CreateL( - KFilter8, KKeyTypeMap, KStringTrue8 ); - CleanupStack::PushL( filter ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); - filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); - } - else - { - // No app group name, no uid. Search for root. - id = HnConvUtils::NumToStr8LC( KRootId ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); - inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); - } + delete iServiceHandler; + iServiceHandler = NULL; + iServiceHandler = CHnServiceHandler::NewL( + KMCSService8, interface, KCmdGetList8, + EServiceModeAsynchronous, constructorLiw, commandLiw ); - RPointerArray< CHnMdBaseKey > data; - CleanupClosePushL( data ); - data.AppendL( inDataKey ); - if ( filter ) - { - data.AppendL( filter ); - } + CleanupStack::Pop( commandLiw ); + CleanupStack::Pop( constructorLiw ); - CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL( - KServiceContentName, KKeyTypeString, KMatrixMenuData ); - CleanupStack::PushL( serviceData ); + iServiceHandler->ExecuteL( this ); - RPointerArray< CHnMdBaseKey> constructor; - CleanupClosePushL( constructor ); - constructor.AppendL( serviceData ); - CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC(); - CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC(); - HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw ); - HnLiwUtils::SetGenericParamListL( data, *commandLiw ); - - TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 ); - - delete iServiceHandler; - iServiceHandler = NULL; - iServiceHandler = CHnServiceHandler::NewL( - KMCSService8, interface, KCmdGetList8, - EServiceModeAsynchronous, constructorLiw, commandLiw ); - - CleanupStack::Pop( commandLiw ); - CleanupStack::Pop( constructorLiw ); - - iServiceHandler->ExecuteL( this ); - - CleanupStack::PopAndDestroy( &constructor ); - CleanupStack::PopAndDestroy( serviceData ); - CleanupStack::PopAndDestroy( &data ); - if( filter ) - { - CleanupStack::PopAndDestroy( filter ); - } - if( id ) - { - CleanupStack::PopAndDestroy( id ); - } - CleanupStack::PopAndDestroy( inDataKey ); - } + CleanupStack::PopAndDestroy( &constructor ); + CleanupStack::PopAndDestroy( serviceData ); + CleanupStack::PopAndDestroy( &data ); + if( filter ) + { + CleanupStack::PopAndDestroy( filter ); + } + if( id ) + { + CleanupStack::PopAndDestroy( id ); + } + CleanupStack::PopAndDestroy( inDataKey ); + } DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL OUT")); + } // --------------------------------------------------------------------------- @@ -401,91 +403,91 @@ // --------------------------------------------------------------------------- // void CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName( const TDesC& aNewValue ) - { - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" )); - iCRKeyFolderName.Copy( KBlank ); - iCRKeyFolderItemUid.Copy( KBlank ); + { + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" )); + iCRKeyFolderName.Copy( KBlank ); + iCRKeyFolderItemUid.Copy( KBlank ); - int keyValueLength = aNewValue.Length(); - if( keyValueLength ) - { - TApaAppGroupName folder; - TBuf tempBuf; - TBuf timeStamp; + int keyValueLength = aNewValue.Length(); + if( keyValueLength ) + { + TApaAppGroupName folder; + TBuf tempBuf; + TBuf timeStamp; - TInt ret = aNewValue.Find( KComma ); - if( ( ret == KErrNotFound ) || ( ret == ( keyValueLength - 1 ) ) ) - { - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" )); - return; //bad CR key value input - } - if( ret > KApaMaxAppGroupName ) - { - return; - } - folder.Copy( aNewValue.Left( ret ) ); - if( aNewValue.Length() - ret > tempBuf.MaxLength() ) - { - return; - } - tempBuf.Copy( aNewValue.Mid( ret + 1 ) ); + TInt ret = aNewValue.Find( KComma ); + if( (ret == KErrNotFound )|| ( ret == ( keyValueLength-1 ) ) ) + { + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" )); + return; //bad CR key value input + } + if( ret>KApaMaxAppGroupName ) + { + return; + } + folder.Copy(aNewValue.Left(ret)); + if( aNewValue.Length()-ret > tempBuf.MaxLength() ) + { + return; + } + tempBuf.Copy(aNewValue.Mid( ret + 1 ) ); - TInt posUid = tempBuf.Find( KComma ); - if( KErrNotFound != posUid ) - { - if( posUid > KTimeStampBufferLength ) - { - return; - } - timeStamp.Copy( tempBuf.Left( posUid ) ); - if( tempBuf.Length() - ( posUid + 1 ) > KUidStringLength ) - { - return; - } - iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) ); - } - else - { - if( tempBuf.Length() > KTimeStampBufferLength ) - { - return; - } - timeStamp.Copy( tempBuf ); - } + TInt posUid = tempBuf.Find( KComma ); + if ( KErrNotFound != posUid ) + { + if( posUid>KTimeStampBufferLength ) + { + return; + } + timeStamp.Copy( tempBuf.Left(posUid) ); + if( tempBuf.Length()-(posUid+1) > KUidStringLength ) + { + return; + } + iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) ); + } + else + { + if( tempBuf.Length()>KTimeStampBufferLength ) + { + return; + } + timeStamp.Copy( tempBuf ); + } - TTime currentTime; - currentTime.HomeTime(); - TTimeIntervalSeconds interval; + TTime currentTime; + currentTime.HomeTime(); + TTimeIntervalSeconds interval; - TTime timeStampTime; - ret = timeStampTime.Set( timeStamp ); + TTime timeStampTime; + ret = timeStampTime.Set(timeStamp); - if( ret == KErrGeneral ) - { - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" )); - return; // bad time stamp value - } + if(ret == KErrGeneral ) + { + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" )); + return; // bad time stamp value + } - ret = currentTime.SecondsFrom( timeStampTime, interval ); + ret = currentTime.SecondsFrom( timeStampTime, interval ); - if( interval.Int() < 0 ) - {//negative timestamp is set ahead of current time...! - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" )); - return; - } + if( interval.Int() < 0 ) + {//negative timestamp is set ahead of current time...! + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" )); + return; + } - if( ( interval.Int() ) > KTimeStampCutOff ) - {//positive timestamp but more than 5 seconds - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" )); - return; - } - else - { - iCRKeyFolderName.Copy( folder ); - } - } - DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" )); - } + if(( interval.Int()) > KTimeStampCutOff ) + {//positive timestamp but more than 5 seconds + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" )); + return; + } + else + { + iCRKeyFolderName.Copy(folder); + } + } + DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" )); + } // --------------------------------------------------------------------------- // @@ -545,6 +547,7 @@ // void CHnRepositoryShowFolderObserver::GetShowFolderGroupNameL() { + CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( KInData8, KKeyTypeMap, KDefaultParentId8 ); CleanupStack::PushL( inDataKey ); @@ -608,13 +611,13 @@ // --------------------------------------------------------------------------- // TInt CHnRepositoryShowFolderObserver::HandleNotifyL( - TInt /*aCmdId*/, - TInt aEventId, - CLiwGenericParamList& aEventParamList, - const CLiwGenericParamList& /*aInParamList*/) - { - DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL IN")); - if( aEventId == KLiwEventCanceled ) + TInt /*aCmdId*/, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& /*aInParamList*/) + { + DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL IN")); + if( aEventId == KLiwEventCanceled ) { return KErrNotFound; } @@ -729,6 +732,7 @@ if ( iCmnPtrs->iContainer->GetLastSuiteModel()->CustomId() != varId.AsTInt64() ) { iCmnPtrs->iModelEventObserver->HandleModelEventL( KNewSuiteLoadedMdEvent, *paramList ); + iCmnPtrs->iContainer->GetLastSuiteModel()->RegisterSuiteObserverL( this ); iCmnPtrs->iModel->QueueForeground( CHnMdModel::EWhenCurrentTopSuiteIsEvaluated ); } else @@ -765,252 +769,37 @@ CleanupStack::PopAndDestroy( &varId ); } - DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT")); - return KErrNone; - } - -// class CHnRepositoryOpenItemObserver -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewL( - THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId ) - { - CHnRepositoryOpenItemObserver * self = CHnRepositoryOpenItemObserver::NewLC( - aCmnPtrs, aRepositoryUid, aId ); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewLC( - THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId ) - { - CHnRepositoryOpenItemObserver * self = new (ELeave) CHnRepositoryOpenItemObserver( - aCmnPtrs, aId ); - CleanupStack::PushL(self); - self->ConstructL( aRepositoryUid ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnRepositoryOpenItemObserver::ConstructL( const TUid aRepositoryUid ) - { - CHnRepositoryObserver::ConstructL( aRepositoryUid ); - TInt ret = iRepository->Create( iId, KBlank ); - iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository, - CCenRepNotifyHandler::EStringKey, iId ); - iNotifyHandler->StartListeningL(); - } - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnRepositoryOpenItemObserver::CHnRepositoryOpenItemObserver( - THnMdCommonPointers* aCmnPtrs, TUint32 aId ) : - CHnRepositoryObserver( aCmnPtrs, aId ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnRepositoryOpenItemObserver::~CHnRepositoryOpenItemObserver() - { - iRepository->Delete( iId ); - delete iServiceHandler; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnRepositoryOpenItemObserver::HandleNotifyString( - TUint32 aId, const TDesC16& aNewValue ) - { - TRAP_IGNORE( HandleNotifyStringL( aId, aNewValue ) ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnRepositoryOpenItemObserver::HandleNotifyStringL( - TUint32 aId, const TDesC16& aNewValue ) - { - DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyStringL IN")); - DEBUG(("\tID: %d : %S", aId, &aNewValue)); - - // Open item - if( aId == iId && aNewValue.Length()) - { - ShowFolderL( aNewValue ); - } - } + DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT")); + return KErrNone; + } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -TInt CHnRepositoryOpenItemObserver::HandleNotifyL( - TInt /*aCmdId*/, - TInt aEventId, - CLiwGenericParamList& aEventParamList, - const CLiwGenericParamList& /*aInParamList*/) - { - DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyL IN")); - if( aEventId == KLiwEventCanceled ) - { - return KErrNotFound; - } - else - { - TInt pos( 0 ); - const TLiwGenericParam* first = aEventParamList.FindFirst( - pos, KReturnValue8() ); - if( pos == KErrNotFound ) - { - return KErrNotFound; - } - - TInt count = first->Value().AsList()->Count(); - if( count == 0 ) - { - return KErrNotFound; - } - - TLiwVariant varId; - varId.PushL(); - TLiwVariant varAppGroupName; - varAppGroupName.PushL(); - TLiwVariant varSuiteName; - varSuiteName.PushL(); - TLiwVariant varChildrenCount; - varChildrenCount.PushL(); +void CHnRepositoryShowFolderObserver::HandleSuiteEventL ( THnCustomSuiteEvent aCustomSuiteEvent, + CHnSuiteModel *aModel ) + { - HnLiwUtils::GetVariantL( aEventParamList, KIdPath8, 0, varId ); - HnLiwUtils::GetVariantL( aEventParamList, KAppGroupNamePath8, 0, varAppGroupName ); - HnLiwUtils::GetVariantL( aEventParamList, KTitleNamePath8, 0, varSuiteName ); - HnLiwUtils::GetVariantL( aEventParamList, KChildrenCountPath8, 0, varChildrenCount ); - - CLiwGenericParamList* paramList = CLiwGenericParamList::NewL(); - CleanupStack::PushL( paramList ); - - CLiwDefaultMap* map = CLiwDefaultMap::NewLC(); - - paramList->AppendL( TLiwGenericParam( KSuiteName8, TLiwVariant( - KFolderSuite ) ) ); - - map->InsertL( KSuiteName8, varSuiteName ); - map->InsertL( KFolderId8, varId ); - map->InsertL( KRemoveLocked8, TLiwVariant( KStringFalse8 ) ); - map->InsertL( KParentFolderId8, varId ); - map->InsertL( KTmpParentFolderId8, varId ); - map->InsertL( KMcsAppGroupName8, varAppGroupName ); - - paramList->AppendL( TLiwGenericParam( KParams8, TLiwVariant( map ) ) ); - - CleanupStack::PopAndDestroy( map ); - - while( iCmnPtrs->iModel->LoadedSuitesCount() > 1 ) + if ( aCustomSuiteEvent == ESuiteModelInitialized && iCRKeyFolderItemUid.Length() > 0 ) + { + if (iCRKeyFolderItemUid.Length() > 0 ) { - CHnMdSuite* suite = iCmnPtrs->iModel->GetLastSuite(); - iCmnPtrs->iContainer->PopSuiteModelL( suite->SuiteName() ); - iCmnPtrs->iModel->DeleteLastSuite(); - } - - if( iCmnPtrs->iContainer->GetLastSuiteModel()->CustomId() - != varId.AsTInt64() ) - { - iCmnPtrs->iModelEventObserver->HandleModelEventL( - KNewSuiteLoadedMdEvent, *paramList ); - iCmnPtrs->iModel->QueueForeground( - CHnMdModel::EWhenCurrentTopSuiteIsEvaluated ); + TLex8 lex( iCRKeyFolderItemUid ); + TInt64 id (0); + TInt err = lex.Val( id ); + TInt focus( KErrNotFound ); + // If suite is not null, then find matching item model. + CHnItemModel* itemModel = aModel->GetMatchingItemModelL( id, focus ); + aModel->SetSuiteHighlightL( focus ); } - else - { - iCmnPtrs->iContainer->GetLastSuiteModel()->NotifyObserversL( - ESuiteModelInitialized ); - CLiwGenericParamList* paramList = CLiwGenericParamList::NewL(); - CleanupStack::PushL( paramList ); - iCmnPtrs->iModelEventObserver->HandleModelEventL( - KAppGainForeground, *paramList ); - CleanupStack::PopAndDestroy( paramList ); - } - - iRepository->Set( iId, KBlank ); // reset key repository to empty string - - CleanupStack::PopAndDestroy( paramList ); - CleanupStack::PopAndDestroy( &varChildrenCount ); - CleanupStack::PopAndDestroy( &varSuiteName ); - CleanupStack::PopAndDestroy( &varAppGroupName ); - CleanupStack::PopAndDestroy( &varId ); - } - - DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyL OUT")); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnRepositoryOpenItemObserver::ShowFolderL( const TDesC16& aFolderId ) - { - CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( - KInData8, KKeyTypeMap, KDefaultParentId8 ); - CleanupStack::PushL( inDataKey ); - inDataKey->AddSubKeyL( - HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); - inDataKey->AddSubKeyL( - HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, aFolderId ) ); - inDataKey->AddSubKeyL( - HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); - - RPointerArray< CHnMdBaseKey > data; - CleanupClosePushL( data ); - data.Append( inDataKey ); - - CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL( - KServiceContentName, KKeyTypeString, KMatrixMenuData ); - CleanupStack::PushL( serviceData ); - - RPointerArray< CHnMdBaseKey> constructor; - CleanupClosePushL( constructor ); - constructor.Append( serviceData ); - CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC(); - CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC(); - HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw ); - HnLiwUtils::SetGenericParamListL( data, *commandLiw ); - - TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 ); - - delete iServiceHandler; - iServiceHandler = NULL; - iServiceHandler = CHnServiceHandler::NewL( - KMCSService8, interface, KCmdGetList8, - EServiceModeAsynchronous, constructorLiw, commandLiw ); - - CleanupStack::Pop( commandLiw ); - CleanupStack::Pop( constructorLiw ); - - iServiceHandler->ExecuteL( this ); - - CleanupStack::PopAndDestroy( &constructor ); - CleanupStack::PopAndDestroy( serviceData ); - CleanupStack::PopAndDestroy( &data ); - CleanupStack::PopAndDestroy( inDataKey ); - - } + iCRKeyFolderItemUid.Copy( KBlank ); + aModel->UnregisterSuiteObserver( this ); + CLiwGenericParamList* pl = CLiwGenericParamList::NewL(); + CleanupStack::PushL( pl ); + iCmnPtrs->iModelEventObserver->HandleModelEventL( KAppGainForeground, *pl ); + CleanupStack::PopAndDestroy( pl ); + } + } // End of File