menufw/hierarchynavigator/hnmetadatamodel/src/hnrepositoryobserver.cpp
branchRCL_3
changeset 102 ba63c83f4716
parent 93 b01126ce0bec
equal deleted inserted replaced
93:b01126ce0bec 102:ba63c83f4716
   225 //
   225 //
   226 void CHnRepositoryShowFolderObserver::ConstructL( const TUid aRepositoryUid )
   226 void CHnRepositoryShowFolderObserver::ConstructL( const TUid aRepositoryUid )
   227     {
   227     {
   228     CHnRepositoryObserver::ConstructL( aRepositoryUid );
   228     CHnRepositoryObserver::ConstructL( aRepositoryUid );
   229     TInt ret = iRepository->Create( iId, KBlank );
   229     TInt ret = iRepository->Create( iId, KBlank );
   230     iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository,
   230     iNotifyHandler = CCenRepNotifyHandler::NewL(
   231             CCenRepNotifyHandler::EStringKey, iId );
   231         *this, *iRepository,
       
   232     	CCenRepNotifyHandler::EStringKey, iId );
   232     iNotifyHandler->StartListeningL();
   233     iNotifyHandler->StartListeningL();
   233     }
   234     }
   234 
   235 
   235 
   236 
   236 // ---------------------------------------------------------------------------
   237 // ---------------------------------------------------------------------------
   270     DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL IN"));
   271     DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL IN"));
   271     DEBUG(("\tID: %d : %S", aId, &aNewValue));
   272     DEBUG(("\tID: %d : %S", aId, &aNewValue));
   272 
   273 
   273     //++Show Folder
   274     //++Show Folder
   274     if( aId == iId && aNewValue.Length())
   275     if( aId == iId && aNewValue.Length())
   275         {
   276 		{
   276         iNotifyType = 0;
   277         iNotifyType = 0;
   277         ExtractCRKeyShowFolderName( aNewValue );
   278 		ExtractCRKeyShowFolderName( aNewValue );
   278 
   279 
   279         // iCRKeyFolderItemUid can contain mcs id or uid
   280 		// iCRKeyFolderItemUid can contain mcs id or uid
   280         // in case of uid it will be replaced whith id in HandleNotifyL callback
   281 		// in case of uid it will be replaced whith id in HandleNotifyL callback
   281         if( iCRKeyFolderItemUid.Length()>0 )
   282 		if( iCRKeyFolderItemUid.Length()>0 )
   282             {
   283 		    {
   283             if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 )
   284 		    if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 )
   284                 {
   285 		        {
   285                 iNotifyType |= EAPP_UID;
   286 		        iNotifyType |= EAPP_UID;
   286                 }
   287 		        }
   287             else
   288 		    else
   288                 {
   289 		        {
   289                 iNotifyType |= EAPP_ID;
   290 		        iNotifyType |= EAPP_ID;
   290                 }
   291 		        }
   291             }
   292 		    }
   292 
   293 
   293             CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
   294         CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
   294                 KInData8, KKeyTypeMap, KDefaultParentId8 );
   295             KInData8, KKeyTypeMap, KDefaultParentId8 );
   295             CleanupStack::PushL( inDataKey );
   296         CleanupStack::PushL( inDataKey );
   296 
   297 
   297             CHnMdBaseKey* filter( NULL );
   298         CHnMdBaseKey* filter( NULL );
   298             HBufC8* id( NULL );
   299         HBufC8* id( NULL );
   299             if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) )
   300         if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) )
   300                 {
   301             {
   301                 // app group name is known
   302             // app group name is known
   302                 // id is optional
   303             // id is optional
   303                 id = HnConvUtils::NumToStr8LC( KRootId );
   304             id = HnConvUtils::NumToStr8LC( KRootId );
   304                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   305             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   305                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
   306             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
   306                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) );
   307             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) );
   307                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) );
   308             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) );
   308 
   309 
   309                 filter = HnMdKeyFactory::CreateL(
   310             filter = HnMdKeyFactory::CreateL(
   310                         KFilter8, KKeyTypeMap, KStringTrue8 );
       
   311                 CleanupStack::PushL( filter );
       
   312                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KMcsAppGroupName8, KKeyTypeString, iCRKeyFolderName ) );
       
   313                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
       
   314                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) );
       
   315                 }
       
   316             else if( iNotifyType & EAPP_ID )
       
   317                 {
       
   318                 // no app group name, id is known
       
   319                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) );
       
   320                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, iCRKeyFolderItemUid ) );
       
   321                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) );
       
   322                 }
       
   323             else if( iNotifyType & EAPP_UID )
       
   324                 {
       
   325                 // uid is known
       
   326                 // app group name is optional
       
   327                 id = HnConvUtils::NumToStr8LC( KRootId );
       
   328                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
       
   329                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
       
   330                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) );
       
   331                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) );
       
   332 
       
   333                 filter = HnMdKeyFactory::CreateL(
       
   334                     KFilter8, KKeyTypeMap, KStringTrue8 );
   311                     KFilter8, KKeyTypeMap, KStringTrue8 );
   335                 CleanupStack::PushL( filter );
   312             CleanupStack::PushL( filter );
   336                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) );
   313             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KMcsAppGroupName8, KKeyTypeString, iCRKeyFolderName ) );
   337                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) );
   314             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   338                 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) );
   315             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) );
   339                 }
   316             }
   340             else
   317         else if( iNotifyType & EAPP_ID )
   341                 {
   318             {
   342                 // No app group name, no uid. Search for root.
   319             // no app group name, id is known
   343                 id = HnConvUtils::NumToStr8LC( KRootId );
   320             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) );
   344                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   321             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, iCRKeyFolderItemUid ) );
   345                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
   322             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) );
   346                 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) );
   323             }
   347                 }
   324         else if( iNotifyType & EAPP_UID )
   348 
   325             {
   349             RPointerArray< CHnMdBaseKey > data;
   326             // uid is known
   350             CleanupClosePushL( data );
   327             // app group name is optional
   351             data.AppendL( inDataKey );
   328             id = HnConvUtils::NumToStr8LC( KRootId );
   352             if ( filter )
   329             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   353                 {
   330             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
   354                 data.AppendL( filter );
   331             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) );
   355                 }
   332             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) );
   356 
   333 
   357             CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL(
   334             filter = HnMdKeyFactory::CreateL(
   358                 KServiceContentName, KKeyTypeString, KMatrixMenuData );
   335                 KFilter8, KKeyTypeMap, KStringTrue8 );
   359             CleanupStack::PushL( serviceData );
   336             CleanupStack::PushL( filter );
   360 
   337             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) );
   361             RPointerArray< CHnMdBaseKey> constructor;
   338             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) );
   362             CleanupClosePushL( constructor );
   339             filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) );
   363             constructor.AppendL( serviceData );
   340             }
   364             CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC();
   341         else
   365             CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC();
   342             {
   366             HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw );
   343             // No app group name, no uid. Search for root.
   367             HnLiwUtils::SetGenericParamListL( data, *commandLiw );
   344             id = HnConvUtils::NumToStr8LC( KRootId );
   368 
   345             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   369             TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 );
   346             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) );
   370 
   347             inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) );
   371             delete iServiceHandler;
   348             }
   372             iServiceHandler = NULL;
   349 
   373             iServiceHandler = CHnServiceHandler::NewL(
   350         RPointerArray< CHnMdBaseKey > data;
   374                     KMCSService8, interface, KCmdGetList8,
   351         CleanupClosePushL( data );
   375                     EServiceModeAsynchronous, constructorLiw, commandLiw );
   352         data.AppendL( inDataKey );
   376 
   353         if ( filter )
   377             CleanupStack::Pop( commandLiw );
   354             {
   378             CleanupStack::Pop( constructorLiw );
   355             data.AppendL( filter );
   379 
   356             }
   380             iServiceHandler->ExecuteL( this );
   357 
   381 
   358         CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL(
   382             CleanupStack::PopAndDestroy( &constructor );
   359             KServiceContentName, KKeyTypeString, KMatrixMenuData );
   383             CleanupStack::PopAndDestroy( serviceData );
   360         CleanupStack::PushL( serviceData );
   384             CleanupStack::PopAndDestroy( &data );
   361 
   385             if( filter )
   362         RPointerArray< CHnMdBaseKey> constructor;
   386                 {
   363         CleanupClosePushL( constructor );
   387                 CleanupStack::PopAndDestroy( filter );
   364         constructor.AppendL( serviceData );
   388                 }
   365         CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC();
   389             if( id )
   366         CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC();
   390                 {
   367         HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw );
   391                 CleanupStack::PopAndDestroy( id );
   368         HnLiwUtils::SetGenericParamListL( data, *commandLiw );
   392                 }
   369 
   393             CleanupStack::PopAndDestroy( inDataKey );
   370         TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 );
   394         }
   371 
       
   372         delete iServiceHandler;
       
   373         iServiceHandler = NULL;
       
   374         iServiceHandler = CHnServiceHandler::NewL(
       
   375                 KMCSService8, interface, KCmdGetList8,
       
   376                 EServiceModeAsynchronous, constructorLiw, commandLiw );
       
   377 
       
   378         CleanupStack::Pop( commandLiw );
       
   379         CleanupStack::Pop( constructorLiw );
       
   380 
       
   381         iServiceHandler->ExecuteL( this );
       
   382 
       
   383         CleanupStack::PopAndDestroy( &constructor );
       
   384         CleanupStack::PopAndDestroy( serviceData );
       
   385         CleanupStack::PopAndDestroy( &data );
       
   386         if( filter )
       
   387             {
       
   388             CleanupStack::PopAndDestroy( filter );
       
   389             }
       
   390         if( id )
       
   391             {
       
   392             CleanupStack::PopAndDestroy( id );
       
   393             }
       
   394         CleanupStack::PopAndDestroy( inDataKey );
       
   395 		}
   395 
   396 
   396     DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL OUT"));
   397     DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL OUT"));
       
   398 
   397     }
   399     }
   398 
   400 
   399 // ---------------------------------------------------------------------------
   401 // ---------------------------------------------------------------------------
   400 //
   402 //
   401 // ---------------------------------------------------------------------------
   403 // ---------------------------------------------------------------------------
   402 //
   404 //
   403 void CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName( const TDesC& aNewValue )
   405 void CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName( const TDesC& aNewValue )
   404     {
   406 	{
   405     DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" ));
   407 	DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" ));
   406     iCRKeyFolderName.Copy( KBlank );
   408 	iCRKeyFolderName.Copy( KBlank );
   407     iCRKeyFolderItemUid.Copy( KBlank );
   409 	iCRKeyFolderItemUid.Copy( KBlank );
   408 
   410 
   409     int keyValueLength = aNewValue.Length();
   411 	int keyValueLength = aNewValue.Length();
   410     if( keyValueLength )
   412 	if( keyValueLength )
   411         {
   413 		{
   412         TApaAppGroupName folder;
   414 			TApaAppGroupName folder;
   413         TBuf<KTimeStampBufferLength + KUidStringLength + 1> tempBuf;
   415 	        TBuf<KTimeStampBufferLength + KUidStringLength + 1> tempBuf;
   414         TBuf<KTimeStampBufferLength> timeStamp;
   416 	        TBuf<KTimeStampBufferLength> timeStamp;
   415 
   417 
   416         TInt ret = aNewValue.Find( KComma );
   418 	        TInt ret = aNewValue.Find( KComma );
   417         if( ( ret == KErrNotFound ) || ( ret == ( keyValueLength - 1 ) ) )
   419 	        if( (ret == KErrNotFound )|| ( ret == ( keyValueLength-1 ) ) )
   418             {
   420 	            {
   419             DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" ));
   421 	            DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" ));
   420             return; //bad CR key value input
   422 	        	return;	//bad CR key value input
   421             }
   423 	            }
   422         if( ret > KApaMaxAppGroupName )
   424 	        if( ret>KApaMaxAppGroupName )
   423             {
   425 	            {
   424             return;
   426 	            return;
   425             }
   427 	            }
   426         folder.Copy( aNewValue.Left( ret ) );
   428 	        folder.Copy(aNewValue.Left(ret));
   427         if( aNewValue.Length() - ret > tempBuf.MaxLength() )
   429 	        if( aNewValue.Length()-ret > tempBuf.MaxLength() )
   428             {
   430 	            {
   429             return;
   431 	            return;
   430             }
   432 	            }
   431         tempBuf.Copy( aNewValue.Mid( ret + 1 ) );
   433 	        tempBuf.Copy(aNewValue.Mid( ret + 1 ) );
   432 
   434 
   433         TInt posUid = tempBuf.Find( KComma );
   435 	        TInt posUid = tempBuf.Find( KComma );
   434         if( KErrNotFound != posUid )
   436 	        if ( KErrNotFound != posUid )
   435             {
   437 	        	{
   436             if( posUid > KTimeStampBufferLength )
   438 	        	if( posUid>KTimeStampBufferLength )
   437                 {
   439 	        	    {
   438                 return;
   440 	        	    return;
   439                 }
   441 	        	    }
   440             timeStamp.Copy( tempBuf.Left( posUid ) );
   442 	        	timeStamp.Copy( tempBuf.Left(posUid) );
   441             if( tempBuf.Length() - ( posUid + 1 ) > KUidStringLength )
   443 	        	if( tempBuf.Length()-(posUid+1) > KUidStringLength )
   442                 {
   444 	        	    {
   443                 return;
   445 	        	    return;
   444                 }
   446 	        	    }
   445             iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) );
   447 	        	iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) );
   446             }
   448 	        	}
   447         else
   449 	        else
   448             {
   450 	        	{
   449             if( tempBuf.Length() > KTimeStampBufferLength )
   451                 if( tempBuf.Length()>KTimeStampBufferLength )
   450                 {
   452                     {
   451                 return;
   453                     return;
   452                 }
   454                     }
   453             timeStamp.Copy( tempBuf );
   455 	        	timeStamp.Copy( tempBuf );
   454             }
   456 	        	}
   455 
   457 
   456         TTime currentTime;
   458 	        TTime currentTime;
   457         currentTime.HomeTime();
   459 	        currentTime.HomeTime();
   458         TTimeIntervalSeconds interval;
   460 	        TTimeIntervalSeconds interval;
   459 
   461 
   460         TTime timeStampTime;
   462 	        TTime timeStampTime;
   461         ret = timeStampTime.Set( timeStamp );
   463 	        ret = timeStampTime.Set(timeStamp);
   462 
   464 
   463         if( ret == KErrGeneral )
   465 	        if(ret == KErrGeneral )
   464             {
   466 	            {
   465             DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" ));
   467 	            DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" ));
   466             return; // bad time stamp value
   468 	        	return; // bad time stamp value
   467             }
   469 	            }
   468 
   470 
   469         ret = currentTime.SecondsFrom( timeStampTime, interval );
   471 	        ret = currentTime.SecondsFrom( timeStampTime, interval );
   470 
   472 
   471         if( interval.Int() < 0 )
   473 	        if( interval.Int() < 0 )
   472             {//negative timestamp is set ahead of current time...!
   474 	            {//negative timestamp is set ahead of current time...!
   473             DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" ));
   475 	            DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" ));
   474             return;
   476 	        	return;
   475             }
   477 	            }
   476 
   478 
   477         if( ( interval.Int() ) > KTimeStampCutOff )
   479 	        if(( interval.Int()) > KTimeStampCutOff )
   478             {//positive timestamp but more than 5 seconds
   480 	            {//positive timestamp but more than 5 seconds
   479             DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" ));
   481 	            DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" ));
   480             return;
   482 	        	return;
   481             }
   483 	            }
   482         else
   484 	        else
   483             {
   485         	    {
   484             iCRKeyFolderName.Copy( folder );
   486 	        	iCRKeyFolderName.Copy(folder);
   485             }
   487         	    }
   486         }
   488 		}
   487     DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" ));
   489 	DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" ));
   488     }
   490 	}
   489 
   491 
   490 // ---------------------------------------------------------------------------
   492 // ---------------------------------------------------------------------------
   491 //
   493 //
   492 // ---------------------------------------------------------------------------
   494 // ---------------------------------------------------------------------------
   493 //
   495 //
   543 //
   545 //
   544 // ---------------------------------------------------------------------------
   546 // ---------------------------------------------------------------------------
   545 //
   547 //
   546 void CHnRepositoryShowFolderObserver::GetShowFolderGroupNameL()
   548 void CHnRepositoryShowFolderObserver::GetShowFolderGroupNameL()
   547     {
   549     {
       
   550 
   548     CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
   551     CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
   549         KInData8, KKeyTypeMap, KDefaultParentId8 );
   552         KInData8, KKeyTypeMap, KDefaultParentId8 );
   550     CleanupStack::PushL( inDataKey );
   553     CleanupStack::PushL( inDataKey );
   551     HBufC8* id = HnConvUtils::NumToStr8LC( KRootId );
   554     HBufC8* id = HnConvUtils::NumToStr8LC( KRootId );
   552     inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   555     inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
   606 // ---------------------------------------------------------------------------
   609 // ---------------------------------------------------------------------------
   607 //
   610 //
   608 // ---------------------------------------------------------------------------
   611 // ---------------------------------------------------------------------------
   609 //
   612 //
   610 TInt CHnRepositoryShowFolderObserver::HandleNotifyL(
   613 TInt CHnRepositoryShowFolderObserver::HandleNotifyL(
   611         TInt /*aCmdId*/,
   614     TInt /*aCmdId*/,
   612         TInt aEventId,
   615     TInt aEventId,
   613         CLiwGenericParamList& aEventParamList,
   616     CLiwGenericParamList& aEventParamList,
   614         const CLiwGenericParamList& /*aInParamList*/)
   617     const CLiwGenericParamList& /*aInParamList*/)
   615     {
   618 	{
   616     DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL IN"));
   619 	DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL IN"));
   617     if( aEventId == KLiwEventCanceled )
   620 	if( aEventId == KLiwEventCanceled )
   618         {
   621         {
   619         return KErrNotFound;
   622         return KErrNotFound;
   620         }
   623         }
   621     else
   624     else
   622         {
   625         {
   727                 }
   730                 }
   728 
   731 
   729             if ( iCmnPtrs->iContainer->GetLastSuiteModel()->CustomId() != varId.AsTInt64() )
   732             if ( iCmnPtrs->iContainer->GetLastSuiteModel()->CustomId() != varId.AsTInt64() )
   730                 {
   733                 {
   731                 iCmnPtrs->iModelEventObserver->HandleModelEventL( KNewSuiteLoadedMdEvent, *paramList );
   734                 iCmnPtrs->iModelEventObserver->HandleModelEventL( KNewSuiteLoadedMdEvent, *paramList );
       
   735                 iCmnPtrs->iContainer->GetLastSuiteModel()->RegisterSuiteObserverL( this );
   732                 iCmnPtrs->iModel->QueueForeground( CHnMdModel::EWhenCurrentTopSuiteIsEvaluated );
   736                 iCmnPtrs->iModel->QueueForeground( CHnMdModel::EWhenCurrentTopSuiteIsEvaluated );
   733                 }
   737                 }
   734             else
   738             else
   735                 {
   739                 {
   736                 iCmnPtrs->iContainer->GetLastSuiteModel()->NotifyObserversL( ESuiteModelInitialized );
   740                 iCmnPtrs->iContainer->GetLastSuiteModel()->NotifyObserversL( ESuiteModelInitialized );
   763             CleanupStack::PopAndDestroy( &varSuiteName );
   767             CleanupStack::PopAndDestroy( &varSuiteName );
   764             CleanupStack::PopAndDestroy( &varAppGroupName );
   768             CleanupStack::PopAndDestroy( &varAppGroupName );
   765             CleanupStack::PopAndDestroy( &varId );
   769             CleanupStack::PopAndDestroy( &varId );
   766         }
   770         }
   767 
   771 
   768   DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT"));
   772 	DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT"));
   769   return KErrNone;
   773 	return KErrNone;
   770   }
   774 	}
   771 
   775 
   772 // class CHnRepositoryOpenItemObserver
   776 // ---------------------------------------------------------------------------
   773 // ---------------------------------------------------------------------------
   777 //
   774 //
   778 // ---------------------------------------------------------------------------
   775 // ---------------------------------------------------------------------------
   779 //
   776 //
   780 void CHnRepositoryShowFolderObserver::HandleSuiteEventL ( THnCustomSuiteEvent aCustomSuiteEvent,
   777 CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewL(
   781         CHnSuiteModel *aModel )
   778         THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId )
   782 	{
   779     {
   783 
   780     CHnRepositoryOpenItemObserver * self = CHnRepositoryOpenItemObserver::NewLC(
   784 	if ( aCustomSuiteEvent == ESuiteModelInitialized && iCRKeyFolderItemUid.Length() > 0 )
   781             aCmnPtrs, aRepositoryUid, aId );
   785 		{
   782     CleanupStack::Pop(self);
   786 	      if (iCRKeyFolderItemUid.Length() > 0 )
   783     return self;
   787             {
   784     }
   788             TLex8 lex( iCRKeyFolderItemUid );
   785 
   789             TInt64 id (0);
   786 // ---------------------------------------------------------------------------
   790             TInt err = lex.Val( id );
   787 //
   791             TInt focus( KErrNotFound );
   788 // ---------------------------------------------------------------------------
   792             // If suite is not null, then find matching item model.
   789 //
   793             CHnItemModel* itemModel = aModel->GetMatchingItemModelL( id, focus );
   790 CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewLC(
   794             aModel->SetSuiteHighlightL( focus );
   791         THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId )
   795             }
   792     {
   796 		iCRKeyFolderItemUid.Copy( KBlank );
   793     CHnRepositoryOpenItemObserver * self = new (ELeave) CHnRepositoryOpenItemObserver(
   797 		aModel->UnregisterSuiteObserver( this );
   794             aCmnPtrs, aId );
   798 		CLiwGenericParamList* pl = CLiwGenericParamList::NewL();
   795     CleanupStack::PushL(self);
   799 		CleanupStack::PushL( pl );
   796     self->ConstructL( aRepositoryUid );
   800 		iCmnPtrs->iModelEventObserver->HandleModelEventL( KAppGainForeground, *pl );
   797     return self;
   801 		CleanupStack::PopAndDestroy( pl );
   798     }
   802 		}
   799 
   803 	}
   800 // ---------------------------------------------------------------------------
       
   801 //
       
   802 // ---------------------------------------------------------------------------
       
   803 //
       
   804 void CHnRepositoryOpenItemObserver::ConstructL( const TUid aRepositoryUid )
       
   805     {
       
   806     CHnRepositoryObserver::ConstructL( aRepositoryUid );
       
   807     TInt ret = iRepository->Create( iId, KBlank );
       
   808     iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository,
       
   809             CCenRepNotifyHandler::EStringKey, iId );
       
   810     iNotifyHandler->StartListeningL();
       
   811     }
       
   812 
       
   813 
       
   814 // ---------------------------------------------------------------------------
       
   815 //
       
   816 // ---------------------------------------------------------------------------
       
   817 //
       
   818 CHnRepositoryOpenItemObserver::CHnRepositoryOpenItemObserver( 
       
   819         THnMdCommonPointers* aCmnPtrs, TUint32 aId  ) :
       
   820             CHnRepositoryObserver( aCmnPtrs, aId )
       
   821     {
       
   822     }
       
   823 
       
   824 // ---------------------------------------------------------------------------
       
   825 //
       
   826 // ---------------------------------------------------------------------------
       
   827 //
       
   828 CHnRepositoryOpenItemObserver::~CHnRepositoryOpenItemObserver()
       
   829     {
       
   830     iRepository->Delete( iId );
       
   831     delete iServiceHandler;
       
   832     }
       
   833 
       
   834 // ---------------------------------------------------------------------------
       
   835 //
       
   836 // ---------------------------------------------------------------------------
       
   837 //
       
   838 void CHnRepositoryOpenItemObserver::HandleNotifyString(
       
   839         TUint32 aId, const TDesC16& aNewValue )
       
   840     {
       
   841     TRAP_IGNORE( HandleNotifyStringL( aId, aNewValue ) );
       
   842     }
       
   843 
       
   844 // ---------------------------------------------------------------------------
       
   845 //
       
   846 // ---------------------------------------------------------------------------
       
   847 //
       
   848 void CHnRepositoryOpenItemObserver::HandleNotifyStringL(
       
   849         TUint32 aId, const TDesC16& aNewValue )
       
   850     {
       
   851     DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyStringL IN"));
       
   852     DEBUG(("\tID: %d : %S", aId, &aNewValue));
       
   853 
       
   854     // Open item
       
   855     if( aId == iId && aNewValue.Length())
       
   856         {
       
   857         ShowFolderL( aNewValue );
       
   858         }
       
   859     }
       
   860 
       
   861 // ---------------------------------------------------------------------------
       
   862 //
       
   863 // ---------------------------------------------------------------------------
       
   864 //
       
   865 TInt CHnRepositoryOpenItemObserver::HandleNotifyL(
       
   866         TInt /*aCmdId*/,
       
   867         TInt aEventId,
       
   868         CLiwGenericParamList& aEventParamList,
       
   869         const CLiwGenericParamList& /*aInParamList*/)
       
   870     {
       
   871     DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyL IN"));
       
   872     if( aEventId == KLiwEventCanceled )
       
   873         {
       
   874         return KErrNotFound;
       
   875         }
       
   876     else
       
   877         {
       
   878         TInt pos( 0 );
       
   879         const TLiwGenericParam* first = aEventParamList.FindFirst(
       
   880                 pos, KReturnValue8() );
       
   881         if( pos == KErrNotFound )
       
   882             {
       
   883             return KErrNotFound;
       
   884             }
       
   885 
       
   886         TInt count = first->Value().AsList()->Count();
       
   887         if( count == 0 )
       
   888             {
       
   889             return KErrNotFound;
       
   890             }
       
   891 
       
   892         TLiwVariant varId;
       
   893         varId.PushL();
       
   894         TLiwVariant varAppGroupName;
       
   895         varAppGroupName.PushL();
       
   896         TLiwVariant varSuiteName;
       
   897         varSuiteName.PushL();
       
   898         TLiwVariant varChildrenCount;
       
   899         varChildrenCount.PushL();
       
   900 
       
   901         HnLiwUtils::GetVariantL( aEventParamList, KIdPath8, 0, varId );
       
   902         HnLiwUtils::GetVariantL( aEventParamList, KAppGroupNamePath8, 0, varAppGroupName );
       
   903         HnLiwUtils::GetVariantL( aEventParamList, KTitleNamePath8, 0, varSuiteName );
       
   904         HnLiwUtils::GetVariantL( aEventParamList, KChildrenCountPath8, 0, varChildrenCount );
       
   905 
       
   906         CLiwGenericParamList* paramList = CLiwGenericParamList::NewL();
       
   907         CleanupStack::PushL( paramList );
       
   908 
       
   909         CLiwDefaultMap* map = CLiwDefaultMap::NewLC();
       
   910 
       
   911         paramList->AppendL( TLiwGenericParam( KSuiteName8, TLiwVariant(
       
   912                 KFolderSuite ) ) );
       
   913 
       
   914         map->InsertL( KSuiteName8, varSuiteName );
       
   915         map->InsertL( KFolderId8, varId );
       
   916         map->InsertL( KRemoveLocked8, TLiwVariant( KStringFalse8 ) );
       
   917         map->InsertL( KParentFolderId8, varId );
       
   918         map->InsertL( KTmpParentFolderId8, varId );
       
   919         map->InsertL( KMcsAppGroupName8, varAppGroupName );
       
   920 
       
   921         paramList->AppendL( TLiwGenericParam( KParams8, TLiwVariant( map ) ) );
       
   922 
       
   923         CleanupStack::PopAndDestroy( map );
       
   924 
       
   925         while( iCmnPtrs->iModel->LoadedSuitesCount() > 1 )
       
   926             {
       
   927             CHnMdSuite* suite = iCmnPtrs->iModel->GetLastSuite();
       
   928             iCmnPtrs->iContainer->PopSuiteModelL( suite->SuiteName() );
       
   929             iCmnPtrs->iModel->DeleteLastSuite();
       
   930             }
       
   931 
       
   932         if( iCmnPtrs->iContainer->GetLastSuiteModel()->CustomId()
       
   933                 != varId.AsTInt64() )
       
   934             {
       
   935             iCmnPtrs->iModelEventObserver->HandleModelEventL(
       
   936                     KNewSuiteLoadedMdEvent, *paramList );
       
   937             iCmnPtrs->iModel->QueueForeground(
       
   938                     CHnMdModel::EWhenCurrentTopSuiteIsEvaluated );
       
   939             }
       
   940         else
       
   941             {
       
   942             iCmnPtrs->iContainer->GetLastSuiteModel()->NotifyObserversL(
       
   943                     ESuiteModelInitialized );
       
   944             CLiwGenericParamList* paramList = CLiwGenericParamList::NewL();
       
   945             CleanupStack::PushL( paramList );
       
   946             iCmnPtrs->iModelEventObserver->HandleModelEventL(
       
   947                     KAppGainForeground, *paramList );
       
   948             CleanupStack::PopAndDestroy( paramList );
       
   949             }
       
   950 
       
   951         iRepository->Set( iId, KBlank ); // reset key repository to empty string
       
   952 
       
   953         CleanupStack::PopAndDestroy( paramList );
       
   954         CleanupStack::PopAndDestroy( &varChildrenCount );
       
   955         CleanupStack::PopAndDestroy( &varSuiteName );
       
   956         CleanupStack::PopAndDestroy( &varAppGroupName );
       
   957         CleanupStack::PopAndDestroy( &varId );
       
   958         }
       
   959 
       
   960     DEBUG(("_MM_:CHnRepositoryOpenItemObserver::HandleNotifyL OUT"));
       
   961     return KErrNone;
       
   962     }
       
   963 
       
   964 // ---------------------------------------------------------------------------
       
   965 //
       
   966 // ---------------------------------------------------------------------------
       
   967 //
       
   968 void CHnRepositoryOpenItemObserver::ShowFolderL( const TDesC16& aFolderId )
       
   969     {
       
   970     CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
       
   971             KInData8, KKeyTypeMap, KDefaultParentId8 );
       
   972     CleanupStack::PushL( inDataKey );
       
   973     inDataKey->AddSubKeyL(
       
   974             HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) );
       
   975     inDataKey->AddSubKeyL(
       
   976             HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, aFolderId ) );
       
   977     inDataKey->AddSubKeyL(
       
   978             HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) );
       
   979 
       
   980     RPointerArray< CHnMdBaseKey > data;
       
   981     CleanupClosePushL( data );
       
   982     data.Append( inDataKey );
       
   983 
       
   984     CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL(
       
   985         KServiceContentName, KKeyTypeString, KMatrixMenuData );
       
   986     CleanupStack::PushL( serviceData );
       
   987 
       
   988     RPointerArray< CHnMdBaseKey> constructor;
       
   989     CleanupClosePushL( constructor );
       
   990     constructor.Append( serviceData );
       
   991     CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC();
       
   992     CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC();
       
   993     HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw );
       
   994     HnLiwUtils::SetGenericParamListL( data, *commandLiw );
       
   995 
       
   996     TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 );
       
   997 
       
   998     delete iServiceHandler;
       
   999     iServiceHandler = NULL;
       
  1000     iServiceHandler = CHnServiceHandler::NewL(
       
  1001             KMCSService8, interface, KCmdGetList8,
       
  1002             EServiceModeAsynchronous, constructorLiw, commandLiw );
       
  1003 
       
  1004     CleanupStack::Pop( commandLiw );
       
  1005     CleanupStack::Pop( constructorLiw );
       
  1006 
       
  1007     iServiceHandler->ExecuteL( this );
       
  1008 
       
  1009     CleanupStack::PopAndDestroy( &constructor );
       
  1010     CleanupStack::PopAndDestroy( serviceData );
       
  1011     CleanupStack::PopAndDestroy( &data );
       
  1012     CleanupStack::PopAndDestroy( inDataKey );
       
  1013 
       
  1014     }
       
  1015 
   804 
  1016 // End of File
   805 // End of File