--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock2/clockui/uimodel/src/clkuialarmmodel.cpp Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is the source file for the CClkUiAlarmModel class.
+*
+*/
+
+// System includes
+#include <asclisession.h>
+#include <almconst.h>
+#include <wakeupalarm.h>
+
+// User includes
+#include "clkuimdlbase.h"
+#include "clkuialarmmodel.h"
+#include "clkuialarmlistener.h"
+
+// Constants
+
+// Literals
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::NewL
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C CClkUiAlarmModel* CClkUiAlarmModel::NewL( MClkModelObserver* aObserver,
+ TInt aListenerPriority )
+ {
+ CClkUiAlarmModel *self = new( ELeave ) CClkUiAlarmModel;
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aObserver, aListenerPriority );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::~CClkUiAlarmModel
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C CClkUiAlarmModel::~CClkUiAlarmModel()
+ {
+ // Stop the listener first and close the session with alarm server.
+ Stop();
+ iAlarmSrvSes.Close();
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ProcessListenerL
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void CClkUiAlarmModel::ProcessListenerL( TInt aStatus )
+ {
+ if( ( KErrNone != aStatus ) &&
+ ( KErrCancel != aStatus ) )
+ {
+ NotifyL( aStatus );
+ }
+ else
+ {
+ NotifyL( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::GetClkAlarmIds
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C void CClkUiAlarmModel::GetClkAlarmIds( RArray< TAlarmId >& aAlarmIds )
+ {
+ // Return the alarm ids of category clock.
+ TRAP_IGNORE( iAlarmSrvSes.GetAlarmIdListForCategoryL( KAlarmClockOne, aAlarmIds ) );
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::DeleteClockAlarm
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::DeleteClockAlarm( TAlarmId aAlarmId )
+ {
+ // Pass the request to the server.
+ TInt errorVal = iAlarmSrvSes.AlarmDelete( aAlarmId );
+
+ return errorVal;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmEnable
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::ClockAlarmEnable( TAlarmId aAlarmId, TAlarmStatus aStatus )
+ {
+ TInt returnVal( KErrNone );
+
+ // If the alarm is enabled, we first disable it and then enable it.
+ if( EAlarmStatusEnabled == aStatus )
+ {
+ returnVal = iAlarmSrvSes.SetAlarmStatus( aAlarmId, EAlarmStatusDisabled );
+
+ if( KErrNone == returnVal )
+ {
+ returnVal = iAlarmSrvSes.SetAlarmStatus( aAlarmId, aStatus );
+ }
+ }
+ // If the request is to disable the alarm, we just do the same.
+ else
+ {
+ returnVal = iAlarmSrvSes.SetAlarmStatus( aAlarmId, aStatus );
+ }
+
+ return returnVal;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmStatus
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TAlarmStatus CClkUiAlarmModel::ClockAlarmStatus( TAlarmId aAlarmId ) const
+ {
+ TAlarmStatus alarmStatus;
+
+ // Pass the request to the server.
+ iAlarmSrvSes.GetAlarmStatus( aAlarmId, alarmStatus );
+
+ return alarmStatus;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmType
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::ClockAlarmType( TAlarmCategory& aCategory, TAlarmId aAlarmId ) const
+ {
+ return ( iAlarmSrvSes.GetAlarmCategory( aAlarmId, aCategory ) );
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmSet
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::ClockAlarmSet( const SClkAlarmInfo& aAlarmInfo )
+ {
+ TASShdAlarm newAlarm;
+
+ // Build the alarm properties from the info provided.
+ newAlarm.Category() = KAlarmClockOne;
+ newAlarm.Message() = aAlarmInfo.iMessage;
+ newAlarm.OriginalExpiryTime() = aAlarmInfo.iAlarmTime;
+ newAlarm.RepeatDefinition() = aAlarmInfo.iRepeat;
+ newAlarm.SoundName() = aAlarmInfo.iSound;
+ newAlarm.NextDueTime() = aAlarmInfo.iAlarmTime;
+
+ // SSM related change.
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+ newAlarm.SetWakeup( ETrue );
+#else
+ newAlarm.ClientFlags().Set( KWakeupAlarmFlagIndex );
+#endif
+
+ TInt returnVal = iAlarmSrvSes.AlarmAdd( newAlarm );
+
+ if( KErrNone == returnVal )
+ {
+ iAlarmObject = newAlarm;
+ iAlarmId = newAlarm.Id();
+ }
+
+ return returnVal;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmInfo
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CClkUiAlarmModel::ClockAlarmInfo( TAlarmId aAlarmId, SClkAlarmInfo& aAlarmInfo ) const
+ {
+ TASShdAlarm tempAlarm;
+
+ if( !aAlarmId )
+ {
+ aAlarmInfo.iState = EAlarmStateInPreparation;
+ aAlarmInfo.iStatus = EAlarmStatusDisabled;
+
+ return KErrNone;
+ }
+
+ TInt returnVal = iAlarmSrvSes.GetAlarmDetails( aAlarmId, tempAlarm );
+
+ if( KErrNone == returnVal )
+ {
+ aAlarmInfo.iAlarmTime = tempAlarm.NextDueTime();
+ aAlarmInfo.iMessage = tempAlarm.Message();
+ aAlarmInfo.iOrigExpiryTime = tempAlarm.OriginalExpiryTime();
+ aAlarmInfo.iRepeat = tempAlarm.RepeatDefinition();
+ aAlarmInfo.iSound = tempAlarm.SoundName();
+ aAlarmInfo.iState = tempAlarm.State();
+ aAlarmInfo.iStatus = tempAlarm.Status();
+ iAlarmSrvSes.GetAlarmCategory( aAlarmId, aAlarmInfo.iCategory );
+ }
+
+ return returnVal;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmInfo
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C const TAlarmId& CClkUiAlarmModel::AlarmId()
+ {
+ return iAlarmId;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::SaveLatestAlarmId
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C void CClkUiAlarmModel::SaveLatestAlarmId( TAlarmId aAlarmId )
+ {
+ iAlarmId = aAlarmId;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ClockAlarmInfo
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CClkUiAlarmModel::GetAlarmQueuedOrSnoozedId( TAlarmId& aAlarmId, TBool aUpdatedId )
+ {
+ TBool alarmQueued( EFalse );
+ RArray< TAlarmId > alarmIds;
+
+ TRAP_IGNORE( iAlarmSrvSes.GetAlarmIdListForCategoryL( KAlarmClockOne, alarmIds ) );
+
+ TInt alarmCount( alarmIds.Count() );
+ for( TInt alarmIndex( KZerothIndex ); alarmIndex < alarmCount; alarmIndex++ )
+ {
+ const TAlarmId alarmId = alarmIds[ alarmIndex ];
+ TAlarmStatus alarmStatus;
+ TASShdAlarm tempAlarm;
+
+ // First get the alarm details.
+ TInt errorVal = iAlarmSrvSes.GetAlarmDetails( alarmId, tempAlarm );
+ // Then the status.
+ errorVal = iAlarmSrvSes.GetAlarmStatus( alarmId, alarmStatus );
+
+ // If the alarm status is enabled and the alarm is in either queued or snoozed state.
+ // The alarm ids we have received will be sorted based on the expiry time.
+ if( ( KErrNone == errorVal ) &&
+ ( EAlarmStatusEnabled == tempAlarm.Status() ) &&
+ ( EAlarmStateQueued == tempAlarm.State() ||
+ EAlarmStateSnoozed == tempAlarm.State() ) )
+ {
+ // The queued alarm is found.
+ aAlarmId = alarmId;
+ alarmQueued = ETrue;
+
+ if( aUpdatedId )
+ {
+ iAlarmId = alarmId;
+ }
+ break;
+ }
+ }
+
+ alarmIds.Close();
+
+ if( aUpdatedId && !alarmQueued )
+ {
+ iAlarmId = KZerothIndex;
+ }
+
+ return alarmQueued;
+ }
+
+// ---------------------------------------------------------
+// CClkUiAlarmModel::ConstructL
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void CClkUiAlarmModel::ConstructL( MClkModelObserver* aObserver,
+ TInt aListenerPriority )
+ {
+ // First Set the observer.
+ SetModelObserver( aObserver );
+
+ // Connect to the alarm server.
+ User::LeaveIfError( iAlarmSrvSes.Connect() );
+
+ // Construct the listener and make it active.
+ CClkUiMdlAlarmListener* alarmListener = new( ELeave ) CClkUiMdlAlarmListener( iAlarmSrvSes,
+ *this,
+ aListenerPriority );
+ SetListenerActive( alarmListener );
+
+ // Get the latest alarm and store it.
+ TAlarmId latestAlarm;
+ GetAlarmQueuedOrSnoozedId( latestAlarm, ETrue );
+ }
+
+// End of file