menufw/hierarchynavigator/hnmetadatamodel/src/hnrepositoryobserver.cpp
branchRCL_3
changeset 102 ba63c83f4716
parent 93 b01126ce0bec
--- 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<KTimeStampBufferLength + KUidStringLength + 1> tempBuf;
-        TBuf<KTimeStampBufferLength> timeStamp;
+	int keyValueLength = aNewValue.Length();
+	if( keyValueLength )
+		{
+			TApaAppGroupName folder;
+	        TBuf<KTimeStampBufferLength + KUidStringLength + 1> tempBuf;
+	        TBuf<KTimeStampBufferLength> 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