271 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL IN")); |
270 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL IN")); |
272 DEBUG(("\tID: %d : %S", aId, &aNewValue)); |
271 DEBUG(("\tID: %d : %S", aId, &aNewValue)); |
273 |
272 |
274 //++Show Folder |
273 //++Show Folder |
275 if( aId == iId && aNewValue.Length()) |
274 if( aId == iId && aNewValue.Length()) |
276 { |
275 { |
277 iNotifyType = 0; |
276 iNotifyType = 0; |
278 ExtractCRKeyShowFolderName( aNewValue ); |
277 ExtractCRKeyShowFolderName( aNewValue ); |
279 |
278 |
280 // iCRKeyFolderItemUid can contain mcs id or uid |
279 // iCRKeyFolderItemUid can contain mcs id or uid |
281 // in case of uid it will be replaced whith id in HandleNotifyL callback |
280 // in case of uid it will be replaced whith id in HandleNotifyL callback |
282 if( iCRKeyFolderItemUid.Length()>0 ) |
281 if( iCRKeyFolderItemUid.Length()>0 ) |
|
282 { |
|
283 if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 ) |
|
284 { |
|
285 iNotifyType |= EAPP_UID; |
|
286 } |
|
287 else |
|
288 { |
|
289 iNotifyType |= EAPP_ID; |
|
290 } |
|
291 } |
|
292 |
|
293 CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( |
|
294 KInData8, KKeyTypeMap, KDefaultParentId8 ); |
|
295 CleanupStack::PushL( inDataKey ); |
|
296 |
|
297 CHnMdBaseKey* filter( NULL ); |
|
298 HBufC8* id( NULL ); |
|
299 if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) ) |
|
300 { |
|
301 // app group name is known |
|
302 // id is optional |
|
303 id = HnConvUtils::NumToStr8LC( KRootId ); |
|
304 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
305 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); |
|
306 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
307 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
308 |
|
309 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 ); |
|
335 CleanupStack::PushL( filter ); |
|
336 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) ); |
|
337 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); |
|
338 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); |
|
339 } |
|
340 else |
|
341 { |
|
342 // No app group name, no uid. Search for root. |
|
343 id = HnConvUtils::NumToStr8LC( KRootId ); |
|
344 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
345 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); |
|
346 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
347 } |
|
348 |
|
349 RPointerArray< CHnMdBaseKey > data; |
|
350 CleanupClosePushL( data ); |
|
351 data.AppendL( inDataKey ); |
|
352 if ( filter ) |
|
353 { |
|
354 data.AppendL( filter ); |
|
355 } |
|
356 |
|
357 CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL( |
|
358 KServiceContentName, KKeyTypeString, KMatrixMenuData ); |
|
359 CleanupStack::PushL( serviceData ); |
|
360 |
|
361 RPointerArray< CHnMdBaseKey> constructor; |
|
362 CleanupClosePushL( constructor ); |
|
363 constructor.AppendL( serviceData ); |
|
364 CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC(); |
|
365 CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC(); |
|
366 HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw ); |
|
367 HnLiwUtils::SetGenericParamListL( data, *commandLiw ); |
|
368 |
|
369 TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 ); |
|
370 |
|
371 delete iServiceHandler; |
|
372 iServiceHandler = NULL; |
|
373 iServiceHandler = CHnServiceHandler::NewL( |
|
374 KMCSService8, interface, KCmdGetList8, |
|
375 EServiceModeAsynchronous, constructorLiw, commandLiw ); |
|
376 |
|
377 CleanupStack::Pop( commandLiw ); |
|
378 CleanupStack::Pop( constructorLiw ); |
|
379 |
|
380 iServiceHandler->ExecuteL( this ); |
|
381 |
|
382 CleanupStack::PopAndDestroy( &constructor ); |
|
383 CleanupStack::PopAndDestroy( serviceData ); |
|
384 CleanupStack::PopAndDestroy( &data ); |
|
385 if( filter ) |
|
386 { |
|
387 CleanupStack::PopAndDestroy( filter ); |
|
388 } |
|
389 if( id ) |
|
390 { |
|
391 CleanupStack::PopAndDestroy( id ); |
|
392 } |
|
393 CleanupStack::PopAndDestroy( inDataKey ); |
|
394 } |
|
395 |
|
396 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL OUT")); |
|
397 } |
|
398 |
|
399 // --------------------------------------------------------------------------- |
|
400 // |
|
401 // --------------------------------------------------------------------------- |
|
402 // |
|
403 void CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName( const TDesC& aNewValue ) |
|
404 { |
|
405 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" )); |
|
406 iCRKeyFolderName.Copy( KBlank ); |
|
407 iCRKeyFolderItemUid.Copy( KBlank ); |
|
408 |
|
409 int keyValueLength = aNewValue.Length(); |
|
410 if( keyValueLength ) |
283 { |
411 { |
284 if( iCRKeyFolderItemUid.FindF( KHexPrefix8 )==0 ) |
412 TApaAppGroupName folder; |
285 { |
413 TBuf<KTimeStampBufferLength + KUidStringLength + 1> tempBuf; |
286 iNotifyType |= EAPP_UID; |
414 TBuf<KTimeStampBufferLength> timeStamp; |
|
415 |
|
416 TInt ret = aNewValue.Find( KComma ); |
|
417 if( ( ret == KErrNotFound ) || ( ret == ( keyValueLength - 1 ) ) ) |
|
418 { |
|
419 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" )); |
|
420 return; //bad CR key value input |
|
421 } |
|
422 if( ret > KApaMaxAppGroupName ) |
|
423 { |
|
424 return; |
|
425 } |
|
426 folder.Copy( aNewValue.Left( ret ) ); |
|
427 if( aNewValue.Length() - ret > tempBuf.MaxLength() ) |
|
428 { |
|
429 return; |
|
430 } |
|
431 tempBuf.Copy( aNewValue.Mid( ret + 1 ) ); |
|
432 |
|
433 TInt posUid = tempBuf.Find( KComma ); |
|
434 if( KErrNotFound != posUid ) |
|
435 { |
|
436 if( posUid > KTimeStampBufferLength ) |
|
437 { |
|
438 return; |
|
439 } |
|
440 timeStamp.Copy( tempBuf.Left( posUid ) ); |
|
441 if( tempBuf.Length() - ( posUid + 1 ) > KUidStringLength ) |
|
442 { |
|
443 return; |
|
444 } |
|
445 iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) ); |
287 } |
446 } |
288 else |
447 else |
289 { |
448 { |
290 iNotifyType |= EAPP_ID; |
449 if( tempBuf.Length() > KTimeStampBufferLength ) |
|
450 { |
|
451 return; |
|
452 } |
|
453 timeStamp.Copy( tempBuf ); |
|
454 } |
|
455 |
|
456 TTime currentTime; |
|
457 currentTime.HomeTime(); |
|
458 TTimeIntervalSeconds interval; |
|
459 |
|
460 TTime timeStampTime; |
|
461 ret = timeStampTime.Set( timeStamp ); |
|
462 |
|
463 if( ret == KErrGeneral ) |
|
464 { |
|
465 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" )); |
|
466 return; // bad time stamp value |
|
467 } |
|
468 |
|
469 ret = currentTime.SecondsFrom( timeStampTime, interval ); |
|
470 |
|
471 if( interval.Int() < 0 ) |
|
472 {//negative timestamp is set ahead of current time...! |
|
473 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" )); |
|
474 return; |
|
475 } |
|
476 |
|
477 if( ( interval.Int() ) > KTimeStampCutOff ) |
|
478 {//positive timestamp but more than 5 seconds |
|
479 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" )); |
|
480 return; |
|
481 } |
|
482 else |
|
483 { |
|
484 iCRKeyFolderName.Copy( folder ); |
291 } |
485 } |
292 } |
486 } |
293 |
487 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" )); |
294 CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL( |
488 } |
295 KInData8, KKeyTypeMap, KDefaultParentId8 ); |
|
296 CleanupStack::PushL( inDataKey ); |
|
297 |
|
298 CHnMdBaseKey* filter( NULL ); |
|
299 HBufC8* id( NULL ); |
|
300 if ( iCRKeyFolderName.Length()>0 && !( iNotifyType & EAPP_UID ) ) |
|
301 { |
|
302 // app group name is known |
|
303 // id is optional |
|
304 id = HnConvUtils::NumToStr8LC( KRootId ); |
|
305 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
306 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); |
|
307 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
308 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
309 |
|
310 filter = HnMdKeyFactory::CreateL( |
|
311 KFilter8, KKeyTypeMap, KStringTrue8 ); |
|
312 CleanupStack::PushL( filter ); |
|
313 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KMcsAppGroupName8, KKeyTypeString, iCRKeyFolderName ) ); |
|
314 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
315 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); |
|
316 } |
|
317 else if( iNotifyType & EAPP_ID ) |
|
318 { |
|
319 // no app group name, id is known |
|
320 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); |
|
321 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, iCRKeyFolderItemUid ) ); |
|
322 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
323 } |
|
324 else if( iNotifyType & EAPP_UID ) |
|
325 { |
|
326 // uid is known |
|
327 // app group name is optional |
|
328 id = HnConvUtils::NumToStr8LC( KRootId ); |
|
329 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
330 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); |
|
331 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KRecursiveSearch8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
332 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KFlatResult8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
333 |
|
334 filter = HnMdKeyFactory::CreateL( |
|
335 KFilter8, KKeyTypeMap, KStringTrue8 ); |
|
336 CleanupStack::PushL( filter ); |
|
337 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KUid8, KKeyTypeInteger, iCRKeyFolderItemUid ) ); |
|
338 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuApplication8 ) ); |
|
339 filter->AddSubKeyL( HnMdKeyFactory::CreateL( KHidden8, KKeyTypeBoolean, KStringFalse8 ) ); |
|
340 } |
|
341 else |
|
342 { |
|
343 // No app group name, no uid. Search for root. |
|
344 id = HnConvUtils::NumToStr8LC( KRootId ); |
|
345 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KType8, KKeyTypeString, KMenuFolder8 ) ); |
|
346 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KIdParam, KKeyTypeInteger, *id ) ); |
|
347 inDataKey->AddSubKeyL( HnMdKeyFactory::CreateL( KParentOnly8, KKeyTypeBoolean, KStringTrue8 ) ); |
|
348 } |
|
349 |
|
350 RPointerArray< CHnMdBaseKey > data; |
|
351 CleanupClosePushL( data ); |
|
352 data.AppendL( inDataKey ); |
|
353 if ( filter ) |
|
354 { |
|
355 data.AppendL( filter ); |
|
356 } |
|
357 |
|
358 CHnMdBaseKey* serviceData = HnMdKeyFactory::CreateL( |
|
359 KServiceContentName, KKeyTypeString, KMatrixMenuData ); |
|
360 CleanupStack::PushL( serviceData ); |
|
361 |
|
362 RPointerArray< CHnMdBaseKey> constructor; |
|
363 CleanupClosePushL( constructor ); |
|
364 constructor.AppendL( serviceData ); |
|
365 CLiwGenericParamList* constructorLiw = CLiwGenericParamList::NewLC(); |
|
366 CLiwGenericParamList* commandLiw = CLiwGenericParamList::NewLC(); |
|
367 HnLiwUtils::SetGenericParamListL( constructor, *constructorLiw ); |
|
368 HnLiwUtils::SetGenericParamListL( data, *commandLiw ); |
|
369 |
|
370 TBuf8< KMaxLength > interface( KMCSDataSourceInterface8 ); |
|
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 } |
|
396 |
|
397 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyStringL OUT")); |
|
398 |
|
399 } |
|
400 |
|
401 // --------------------------------------------------------------------------- |
|
402 // |
|
403 // --------------------------------------------------------------------------- |
|
404 // |
|
405 void CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName( const TDesC& aNewValue ) |
|
406 { |
|
407 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName IN" )); |
|
408 iCRKeyFolderName.Copy( KBlank ); |
|
409 iCRKeyFolderItemUid.Copy( KBlank ); |
|
410 |
|
411 int keyValueLength = aNewValue.Length(); |
|
412 if( keyValueLength ) |
|
413 { |
|
414 TApaAppGroupName folder; |
|
415 TBuf<KTimeStampBufferLength + KUidStringLength + 1> tempBuf; |
|
416 TBuf<KTimeStampBufferLength> timeStamp; |
|
417 |
|
418 TInt ret = aNewValue.Find( KComma ); |
|
419 if( (ret == KErrNotFound )|| ( ret == ( keyValueLength-1 ) ) ) |
|
420 { |
|
421 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad CR key value input) OUT" )); |
|
422 return; //bad CR key value input |
|
423 } |
|
424 if( ret>KApaMaxAppGroupName ) |
|
425 { |
|
426 return; |
|
427 } |
|
428 folder.Copy(aNewValue.Left(ret)); |
|
429 if( aNewValue.Length()-ret > tempBuf.MaxLength() ) |
|
430 { |
|
431 return; |
|
432 } |
|
433 tempBuf.Copy(aNewValue.Mid( ret + 1 ) ); |
|
434 |
|
435 TInt posUid = tempBuf.Find( KComma ); |
|
436 if ( KErrNotFound != posUid ) |
|
437 { |
|
438 if( posUid>KTimeStampBufferLength ) |
|
439 { |
|
440 return; |
|
441 } |
|
442 timeStamp.Copy( tempBuf.Left(posUid) ); |
|
443 if( tempBuf.Length()-(posUid+1) > KUidStringLength ) |
|
444 { |
|
445 return; |
|
446 } |
|
447 iCRKeyFolderItemUid.Copy( tempBuf.Mid( posUid + 1 ) ); |
|
448 } |
|
449 else |
|
450 { |
|
451 if( tempBuf.Length()>KTimeStampBufferLength ) |
|
452 { |
|
453 return; |
|
454 } |
|
455 timeStamp.Copy( tempBuf ); |
|
456 } |
|
457 |
|
458 TTime currentTime; |
|
459 currentTime.HomeTime(); |
|
460 TTimeIntervalSeconds interval; |
|
461 |
|
462 TTime timeStampTime; |
|
463 ret = timeStampTime.Set(timeStamp); |
|
464 |
|
465 if(ret == KErrGeneral ) |
|
466 { |
|
467 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (bad timestamp) OUT" )); |
|
468 return; // bad time stamp value |
|
469 } |
|
470 |
|
471 ret = currentTime.SecondsFrom( timeStampTime, interval ); |
|
472 |
|
473 if( interval.Int() < 0 ) |
|
474 {//negative timestamp is set ahead of current time...! |
|
475 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (negative interval) OUT" )); |
|
476 return; |
|
477 } |
|
478 |
|
479 if(( interval.Int()) > KTimeStampCutOff ) |
|
480 {//positive timestamp but more than 5 seconds |
|
481 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName (more than 5 seconds) OUT" )); |
|
482 return; |
|
483 } |
|
484 else |
|
485 { |
|
486 iCRKeyFolderName.Copy(folder); |
|
487 } |
|
488 } |
|
489 DEBUG(( "_MM_:CHnRepositoryShowFolderObserver::ExtractCRKeyShowFolderName OUT" )); |
|
490 } |
|
491 |
489 |
492 // --------------------------------------------------------------------------- |
490 // --------------------------------------------------------------------------- |
493 // |
491 // |
494 // --------------------------------------------------------------------------- |
492 // --------------------------------------------------------------------------- |
495 // |
493 // |
770 |
767 |
771 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT")); |
768 DEBUG(("_MM_:CHnRepositoryShowFolderObserver::HandleNotifyL OUT")); |
772 return KErrNone; |
769 return KErrNone; |
773 } |
770 } |
774 |
771 |
|
772 // class CHnRepositoryOpenItemObserver |
|
773 // --------------------------------------------------------------------------- |
|
774 // |
|
775 // --------------------------------------------------------------------------- |
|
776 // |
|
777 CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewL( |
|
778 THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId ) |
|
779 { |
|
780 CHnRepositoryOpenItemObserver * self = CHnRepositoryOpenItemObserver::NewLC( |
|
781 aCmnPtrs, aRepositoryUid, aId ); |
|
782 CleanupStack::Pop(self); |
|
783 return self; |
|
784 } |
|
785 |
|
786 // --------------------------------------------------------------------------- |
|
787 // |
|
788 // --------------------------------------------------------------------------- |
|
789 // |
|
790 CHnRepositoryOpenItemObserver * CHnRepositoryOpenItemObserver::NewLC( |
|
791 THnMdCommonPointers* aCmnPtrs, const TUid aRepositoryUid, const TUint32 aId ) |
|
792 { |
|
793 CHnRepositoryOpenItemObserver * self = new (ELeave) CHnRepositoryOpenItemObserver( |
|
794 aCmnPtrs, aId ); |
|
795 CleanupStack::PushL(self); |
|
796 self->ConstructL( aRepositoryUid ); |
|
797 return self; |
|
798 } |
|
799 |
|
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 |
775 // End of File |
1016 // End of File |