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 // |
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 |