13 * |
13 * |
14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 |
18 // User includes. |
19 |
|
20 // INCLUDE FILES |
|
21 #include "alarmutils.h" |
19 #include "alarmutils.h" |
22 |
|
23 #include "AlmAlertVariant.hrh" |
20 #include "AlmAlertVariant.hrh" |
24 #include "pim_trace.h" |
21 #include "pim_trace.h" |
25 |
|
26 #include "AlmAlarmPlayer.h" |
22 #include "AlmAlarmPlayer.h" |
27 #include "AlmAlarmControl.h" |
23 #include "AlmAlarmControl.h" |
28 #include "AlmAlarmInfo.h" |
24 #include "AlmAlarmInfo.h" |
29 #include "AlarmService.h" |
25 #include "AlarmService.h" |
30 #include "alarmremconeventshandler.h" |
26 #include "alarmremconeventshandler.h" |
31 #ifdef RD_ALMALERT__SENSOR_SUPPORT |
27 #ifdef RD_ALMALERT__SENSOR_SUPPORT |
32 #include "alarmcontextfwsupport.h" |
28 #include "alarmcontextfwsupport.h" |
33 #endif // RD_ALMALERT__SENSOR_SUPPORT |
29 #endif // RD_ALMALERT__SENSOR_SUPPORT |
34 |
30 #include "alarmalertwrapper.h" |
35 #include <w32std.h> |
31 |
36 #include <almconst.h> |
32 // System includes. |
|
33 // #include <almconst.h> |
37 #include <eikenv.h> |
34 #include <eikenv.h> |
38 #include <AknCapServer.h> |
35 #include <AknCapServer.h> |
39 #include <e32property.h> |
36 #include <e32property.h> |
40 #include <centralrepository.h> |
37 #include <centralrepository.h> |
41 #include <MProfileEngine.h> |
38 #include <MProfileEngine.h> |
42 #include <MProfile.h> |
39 #include <MProfile.h> |
43 #include <MProfileTones.h> |
40 #include <MProfileTones.h> |
44 #include <ProfileEngineDomainConstants.h> |
41 #include <ProfileEngineDomainConstants.h> |
45 #include <sbdefs.h> |
42 #include <sbdefs.h> |
46 #include <coreapplicationuisdomainpskeys.h> |
43 #include <coreapplicationuisdomainpskeys.h> |
47 #include <clockdomaincrkeys.h> |
|
48 #include <CalendarInternalCRKeys.h> |
|
49 #include <wakeupalarm.h> |
44 #include <wakeupalarm.h> |
50 #include <calalarm.h> // KUidAgendaModelAlarmCategory - the alarm category id for calendar alarms |
45 #include <calalarm.h> // KUidAgendaModelAlarmCategory - the alarm category id for calendar alarms |
51 #include <AknUtils.h> |
46 #include <AknUtils.h> |
52 #include <hwrmpowerstatesdkpskeys.h> |
|
53 |
|
54 #ifndef SYMBIAN_CALENDAR_V2 |
47 #ifndef SYMBIAN_CALENDAR_V2 |
55 #include <agmalarm.h> // deprecated, use CalAlarm.h when SYMBIAN_CALENDAR_V2 flag is enabled |
48 #include <agmalarm.h> // deprecated, use CalAlarm.h when SYMBIAN_CALENDAR_V2 flag is enabled |
56 #endif // SYMBIAN_CALENDAR_V2 |
49 #endif // SYMBIAN_CALENDAR_V2 |
57 #include <calsession.h> |
50 #include <calsession.h> |
58 #include <calentryview.h> |
51 #include <calentryview.h> |
59 #include <calenlauncher.h> // for launching calendar entry view |
52 #include <clockdomaincrkeys.h> |
60 |
53 #include <calendardomaincrkeys.h> |
61 |
54 |
62 |
55 // Constants |
63 // CONSTANTS AND MACROS |
|
64 const TInt KAlmAlertMinSnooze( 100 ); |
56 const TInt KAlmAlertMinSnooze( 100 ); |
65 const TInt KAlmAlertMaxSnooze( 104 ); |
57 const TInt KAlmAlertMaxSnooze( 104 ); |
66 |
58 const TInt KDefaultSnoozeTime( 5 ); |
67 const TInt KDefaultSnoozeTime( 5 ); // 5 minutes |
59 const TUint KAlarmAutoHide( 60000000 ); |
68 |
60 const TUint KAlarmAutoHideCalendar( 30000000 ); |
69 const TUint KAlarmAutoHide( 60000000 ); // 60 s |
61 const TUint KKeyBlockTime( 500000 ); |
70 const TUint KAlarmAutoHideCalendar( 30000000 ); // 30 s |
62 const TUint KShutdownTime( 1500000 ); |
71 const TUint KKeyBlockTime( 500000 ); // 0.5 s |
63 const TUint KAlarmDelayTime( 1000000 ); |
72 const TUint KShutdownTime( 1500000 ); // 1.5 s |
64 const TUint KInactivityResetInterval( 1000000 ); |
73 const TUint KAlarmDelayTime( 1000000 ); // 1.0 s |
|
74 const TUint KInactivityResetInterval( 1000000 ); // 1.0 s |
|
75 |
|
76 const TInt KMaxProfileVolume( 10 ); |
65 const TInt KMaxProfileVolume( 10 ); |
77 const TInt KVolumeRampPeriod( 3000000 ); // 3 seconds |
66 const TInt KNoVolume(0); |
|
67 const TInt KVolumeRampPeriod( 3000000 ); |
|
68 const TUid KAlarmClockOne = { 0x101F793A }; |
|
69 const TUid KCRUidProfileEngine = {0x101F8798}; |
|
70 //const TUint32 KProEngActiveReminderTone = 0x7E00001C; |
|
71 const TUint32 KProEngActiveClockAlarmTone = 0x7E00001D; |
|
72 //const TUint32 KProEngActiveAlertVibra = 0x7E00001E; |
|
73 const TUint32 KProEngSilenceMode = {0x80000202}; |
|
74 const TUint32 KProEngActiveRingingType = {0x7E000002}; |
|
75 const TUint32 KProEngActiveRingingVolume = {0x7E000008}; |
|
76 |
|
77 // Literals |
78 _LIT( KRngMimeType, "application/vnd.nokia.ringing-tone" ); |
78 _LIT( KRngMimeType, "application/vnd.nokia.ringing-tone" ); |
79 |
|
80 |
79 |
81 // ========================================================== |
80 // ========================================================== |
82 // ================= MEMBER FUNCTIONS ======================= |
81 // ================= MEMBER FUNCTIONS ======================= |
83 |
82 |
84 |
83 |
108 User::LeaveIfError( iApaSession.Connect() ); |
107 User::LeaveIfError( iApaSession.Connect() ); |
109 |
108 |
110 iAlarmInfo = new( ELeave )CAlmAlarmInfo( this ); |
109 iAlarmInfo = new( ELeave )CAlmAlarmInfo( this ); |
111 |
110 |
112 // we can still work without profile engine |
111 // we can still work without profile engine |
113 PIM_TRAPD_ASSERT( iProfileEng = CreateProfileEngineL(); ) |
112 // PIM_TRAPD_ASSERT( iProfileEng = CreateProfileEngineL(); ) |
114 |
113 |
115 iNotifierDialogController = ((CAknCapServer*)CEikonEnv::Static()->AppServer())->GlobalNoteControllerL(); |
114 // iNotifierDialogController = ((CAknCapServer*)CEikonEnv::Static()->AppServer())->GlobalNoteControllerL(); |
116 iNotifierDialogController->SetNoteObserver( iAlarmControl ); |
115 // iNotifierDialogController->SetNoteObserver( iAlarmControl ); |
|
116 iAlarmAlert = new AlarmAlert(iAlarmControl); |
117 |
117 |
118 // create timers |
118 // create timers |
119 iShutdownTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
119 iShutdownTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
120 iAutoSnoozeTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
120 iAutoSnoozeTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
121 iKeyBlockTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
121 iKeyBlockTimer = CPeriodic::NewL( CActive::EPriorityStandard ); |
409 // ----------------------------------------------------------------------------- |
414 // ----------------------------------------------------------------------------- |
410 // Read alarm sound filenames from central repository. |
415 // Read alarm sound filenames from central repository. |
411 // ----------------------------------------------------------------------------- |
416 // ----------------------------------------------------------------------------- |
412 // |
417 // |
413 void CAlarmUtils::GetAlarmSoundFilenames() |
418 void CAlarmUtils::GetAlarmSoundFilenames() |
414 { |
419 { |
415 TRACE_ENTRY_POINT; |
420 TRACE_ENTRY_POINT; |
416 CRepository* repository = NULL; |
421 CRepository* profileRepository = NULL; |
417 |
422 CRepository* repository = NULL; |
418 if( IsClockAlarm() ) |
423 |
419 { |
424 if( IsClockAlarm() ) |
420 PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidClockApp ); ) |
425 { |
421 |
426 PIM_TRAPD_ASSERT( repository = CRepository::NewL( TUid::Uid(KCRUidClockApp) ); ) |
422 if( repository ) |
427 PIM_TRAPD_ASSERT( profileRepository = CRepository::NewL( |
423 { |
428 KCRUidProfileEngine ); ) |
424 PIM_ASSERT( repository->Get( KClockAppSoundFile, iAlarmData.iAlarmTone ); ) |
429 |
425 PIM_ASSERT( repository->Get( KClockAppDefaultSoundFile, iAlarmData.iDefaultAlarmTone ); ) |
430 if( repository ) |
426 } |
431 { |
427 } |
432 PIM_ASSERT( repository->Get( KClockAppDefaultSoundFile, |
428 else |
433 iAlarmData.iDefaultAlarmTone ); ) |
429 { |
434 } |
430 PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidCalendar ); ) |
435 if( profileRepository ) |
431 |
436 { |
432 if( repository ) |
437 // TODO: Need to use KProEngActiveClockAlarmTone once its released |
433 { |
438 //PIM_ASSERT( profileRepository->Get( KProEngActiveClockAlarmTone , iAlarmData.iAlarmTone); ) |
434 PIM_ASSERT( repository->Get( KCalendarSoundFile, iAlarmData.iAlarmTone ); ) |
439 PIM_ASSERT( repository->Get( KClockAppDefaultSoundFile, |
435 PIM_ASSERT( repository->Get( KCalendarDefaultSoundFile, iAlarmData.iDefaultAlarmTone ); ) |
440 iAlarmData.iAlarmTone ); ) |
436 } |
441 } |
437 } |
442 } |
438 delete repository; |
443 else |
439 TRACE_EXIT_POINT; |
444 { |
440 } |
445 PIM_TRAPD_ASSERT( repository = |
|
446 CRepository::NewL( TUid::Uid(KCRUidCalendar) ); ) |
|
447 PIM_TRAPD_ASSERT( profileRepository = |
|
448 CRepository::NewL( KCRUidProfileEngine ); ) |
|
449 |
|
450 if( repository ) |
|
451 { |
|
452 PIM_ASSERT( repository->Get( KCalendarDefaultSoundFile, |
|
453 iAlarmData.iDefaultAlarmTone ); ) |
|
454 } |
|
455 if( profileRepository ) |
|
456 { |
|
457 PIM_ASSERT( profileRepository->Get( KProEngActiveClockAlarmTone, iAlarmData.iAlarmTone ); ) |
|
458 } |
|
459 } |
|
460 delete repository; |
|
461 delete profileRepository; |
|
462 TRACE_EXIT_POINT; |
|
463 } |
441 |
464 |
442 // ----------------------------------------------------------------------------- |
465 // ----------------------------------------------------------------------------- |
443 // Check if the alarm sound file is a KRngMimeType file. |
466 // Check if the alarm sound file is a KRngMimeType file. |
444 // ----------------------------------------------------------------------------- |
467 // ----------------------------------------------------------------------------- |
445 // |
468 // |
484 iAlarmData.iRepeatValue = KMdaAudioToneRepeatForever; // KMdaRepeatForever |
507 iAlarmData.iRepeatValue = KMdaAudioToneRepeatForever; // KMdaRepeatForever |
485 iAlarmData.iVolume = KMaxProfileVolume; // clock alarms always ramp to maximum volume |
508 iAlarmData.iVolume = KMaxProfileVolume; // clock alarms always ramp to maximum volume |
486 iAlarmData.iVolumeRampTime = iAlarmData.iVolume * KVolumeRampPeriod; // volume ramp only for clock alarms |
509 iAlarmData.iVolumeRampTime = iAlarmData.iVolume * KVolumeRampPeriod; // volume ramp only for clock alarms |
487 |
510 |
488 if( !IsClockAlarm() ) |
511 if( !IsClockAlarm() ) |
489 { |
512 { |
490 if( iProfileEng ) |
513 CRepository* repository = NULL; |
491 { |
514 PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidProfileEngine ); ) |
492 MProfile* profile = NULL; |
515 |
493 PIM_TRAPD_ASSERT( profile = iProfileEng->ActiveProfileL(); ) |
516 TInt ringType; |
494 |
517 repository->Get( KProEngActiveRingingType , ringType); |
495 if( profile ) |
518 iAlarmData.iRingType = static_cast< TProfileRingingType >( ringType ); |
496 { |
519 |
497 const TProfileToneSettings& setting = profile->ProfileTones().ToneSettings(); |
520 TBool silentMode; |
498 iAlarmData.iRingType = setting.iRingingType; |
521 TInt ringingVolume; |
499 |
522 repository->Get( KProEngSilenceMode, silentMode); |
500 // calendar alarms: if profile is "silent" -> set volume to zero |
523 if(silentMode) |
501 iAlarmData.iVolume = (iAlarmData.iRingType == EProfileRingingTypeSilent ? 0 : setting.iRingingVolume); |
524 { |
502 |
525 ringingVolume = KNoVolume; |
503 profile->Release(); |
526 } |
504 } |
527 else |
505 } |
528 { |
506 |
529 // It seems the wrong key has been associated with calendar alarm tone |
507 if( iAlarmData.iRingType == EProfileRingingTypeRingingOnce ) |
530 // settings. It would be changed once it's rectified by profile team. |
508 { |
531 repository->Get( KProEngActiveRingingVolume , ringingVolume ); |
509 iAlarmData.iRepeatValue = 1; |
532 } |
510 } |
533 |
511 iAlarmData.iVolumeRampTime = 0; |
534 iAlarmData.iVolume = ringingVolume; |
512 } |
535 |
|
536 iAlarmData.iVolumeRampTime = 0; |
|
537 } else { |
|
538 TInt volumeOn = iAlarmData.iAlarm.ClientData2(); |
|
539 if (!volumeOn) { |
|
540 iAlarmData.iRingType = EProfileRingingTypeSilent; |
|
541 iAlarmData.iVolume = KNoVolume; |
|
542 } |
|
543 } |
513 TRACE_EXIT_POINT; |
544 TRACE_EXIT_POINT; |
514 } |
545 } |
515 |
546 |
516 // ----------------------------------------------------------------------------- |
547 // ----------------------------------------------------------------------------- |
517 // |
548 // |
1667 TBool CAlarmUtils::IsCalendarAlarmViewer() |
1693 TBool CAlarmUtils::IsCalendarAlarmViewer() |
1668 { |
1694 { |
1669 return iCalendarAlarmViewer; |
1695 return iCalendarAlarmViewer; |
1670 } |
1696 } |
1671 |
1697 |
1672 // --------------------------------------------------------- |
1698 SAlarmInfo* CAlarmUtils::GetAlarmInfo() |
1673 // Silence the notifying alarm |
1699 { |
1674 // --------------------------------------------------------- |
1700 return iAlarmInfo->GetAlarmInfo(iAlarmData.iAlarm, |
1675 // |
1701 iAlarmData.iAlarmType); |
1676 void CAlarmUtils::DoSilence() |
|
1677 { |
|
1678 TRACE_ENTRY_POINT; |
|
1679 |
|
1680 // silence only if snoozing is possible |
|
1681 // this way user must hear the last "call" |
|
1682 if( CanSnooze() ) |
|
1683 { |
|
1684 delete iAlarmPlayer; |
|
1685 iAlarmPlayer = NULL; |
|
1686 SetBackLight( EFalse ); |
|
1687 |
|
1688 if( IsCalendarAlarm() ) |
|
1689 { |
|
1690 |
|
1691 // calendar alarm needs extra handling due to having stop - silence |
|
1692 //simulate right softkey pressing |
|
1693 RWsSession wsSession=CCoeEnv::Static()->WsSession(); |
|
1694 TKeyEvent keyEvent; |
|
1695 keyEvent.iCode = EKeyCBA2; |
|
1696 keyEvent.iScanCode = EStdKeyDevice1; |
|
1697 keyEvent.iModifiers = 0; |
|
1698 keyEvent.iRepeats = 0; |
|
1699 wsSession.SimulateKeyEvent( keyEvent ); |
|
1700 wsSession.Flush(); |
|
1701 } |
|
1702 // clockalarm |
|
1703 else |
|
1704 { |
|
1705 StartAutoSnoozeTimer(); |
|
1706 } |
|
1707 |
|
1708 #if defined( RD_ALMALERT__SENSOR_SUPPORT ) |
|
1709 // notify the result through the context framework |
|
1710 if( iCFSupport ) |
|
1711 { |
|
1712 PIM_TRAPD_ASSERT( iCFSupport->PublishAlarmResultL( EResultAlarmSilenced ); ) |
|
1713 } |
|
1714 #endif // RD_ALMALERT__SENSOR_SUPPORT |
|
1715 } |
|
1716 TRACE_EXIT_POINT; |
|
1717 } |
1702 } |
1718 |
1703 |
1719 // End of File |
1704 // End of File |