williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __ASSHDALARM_H__ williamr@2: #define __ASSHDALARM_H__ williamr@2: williamr@2: williamr@2: // System includes williamr@2: #include williamr@2: #include williamr@2: williamr@2: // User includes williamr@2: #include williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: // ----> TASShdAlarm (header) williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: /** The Alarm publish and subscribe category williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: const TUid KAlarmServerPubSubCategory = { 0x101f5027 }; williamr@2: williamr@2: /** Used for subcribing missed alarms or time zone changes williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: const TUint KMissingAlarmPubSubKey = 100; williamr@2: williamr@2: /** The publish and subscribe data for KMissingAlarmPubSubKey williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: struct TMissedAlarmPubSubData williamr@2: { williamr@2: /** The value indicating the changes. williamr@2: 1 - Time zone has been changes but there are no missed alarms williamr@2: 2 - Some alarms have been missed after system time or time zone has changed. williamr@2: */ williamr@2: TUint8 iValue; williamr@2: williamr@2: /** The time that system time change took place, in universal (UTC) time */ williamr@2: TTime iTimeOfChangeUtc; williamr@2: }; williamr@2: williamr@2: /** Used for subscribing to data used when searching for instances in Calendar williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: const TUint KSkippedAlarmInstancesPubSubKey = 101; williamr@2: williamr@2: /** The publish and subscribe data for KMissingAlarmInstancesPubSubKey williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: struct TASShdAlarmedInstanceParams williamr@2: { williamr@2: /** The start of the time range in local time. */ williamr@2: TTime iLocalStartTime; williamr@2: williamr@2: /** The end of the time range in local time. */ williamr@2: TTime iLocalEndTime; williamr@2: williamr@2: /** The alarm time types to include. */ williamr@2: TASShdAlarmTimeType iTimeType; williamr@2: }; williamr@2: williamr@2: williamr@2: class TASShdAlarm williamr@2: /** A client-side alarm object. williamr@2: williamr@2: It contains all of the information needed to create an alarm in williamr@2: the Alarm Server. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: public: // CONSTRUCT williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: IMPORT_C TASShdAlarm(); williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: public: // INTERNALIZE / EXTERNALIZE williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: public: // READ-ONLY ACCESS williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: inline TAlarmStatus Status() const williamr@2: /** Returns the alarm status. williamr@2: williamr@2: @return Alarm status. */ williamr@2: { return iStatus; } williamr@2: williamr@2: inline TAlarmState State() const williamr@2: /** Returns the alarm state. williamr@2: williamr@2: @return Alarm state. */ williamr@2: { return iState; } williamr@2: williamr@2: inline TBool HasAssociatedData() const; williamr@2: williamr@2: inline TBool HasOwningSession() const; williamr@2: williamr@2: inline TBool HasBecomeOrphaned() const; williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: public: // READ-ONLY & MODIFIABLE williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: IMPORT_C void Reset(); williamr@2: williamr@2: inline TAlarmId& Id() williamr@2: /** Returns a writable version of the alarm's unique identifier. williamr@2: williamr@2: @return Reference to the unique identifier. */ williamr@2: { return iAlarmId; } williamr@2: williamr@2: inline TAlarmId Id() const williamr@2: /** Return the alarm's unique identifier. williamr@2: williamr@2: @return The unique identifier. */ williamr@2: { return iAlarmId; } williamr@2: williamr@2: //The Secure ID is only used in the secured platform williamr@2: williamr@2: // adds a SID to the alarms private field williamr@2: inline void SetSid(const TSecureId& aSecureID) williamr@2: {iTASShdAlarmSID = aSecureID;} williamr@2: williamr@2: // returns the SID of the alarm's creator williamr@2: inline TSecureId GetSid() const williamr@2: {return iTASShdAlarmSID;} williamr@2: williamr@2: inline TTime& NextDueTime() williamr@2: /** Returns a writable version of the next time the alarm is scheduled to expire. williamr@2: williamr@2: @return Next expiry time. */ williamr@2: { return iNextDueTime; } williamr@2: williamr@2: inline const TTime& NextDueTime() const williamr@2: /** Returns the next time that the alarm is scheduled to expire. williamr@2: williamr@2: @return Next expiry time. */ williamr@2: { return iNextDueTime; } williamr@2: williamr@2: inline TTime& OriginalExpiryTime() williamr@2: /** Returns a writable version of the alarm's original expiry time. williamr@2: williamr@2: @return Original expiry time. */ williamr@2: { return iOriginalExpiryTime; } williamr@2: williamr@2: inline const TTime& OriginalExpiryTime() const williamr@2: /** Returns the alarm's original expiry time. williamr@2: williamr@2: The original expiry time is the same as the next due time, unless the alarm williamr@2: has been snoozed. In that case, the original expiry time is the time when williamr@2: the alarm first expired, and the next due time is when it is to re-awaken williamr@2: after the snooze. williamr@2: williamr@2: @return Original expiry time. */ williamr@2: { return iOriginalExpiryTime; } williamr@2: williamr@2: inline TAlarmCategory& Category() williamr@2: /** Returns a writable version of the alarm's category. williamr@2: williamr@2: Clients can use the category to tag each alarm with a specific code. This williamr@2: allows clients to identify all related alarms, such as all alarms associated williamr@2: with a particular application or application engine. williamr@2: williamr@2: @return Alarm category. */ williamr@2: { return iCategory; } williamr@2: williamr@2: inline TAlarmCategory Category() const williamr@2: /** Return this alarm's category. williamr@2: williamr@2: @return Alarm category. */ williamr@2: { return iCategory; } williamr@2: williamr@2: inline TAlarmCharacteristicsFlags& Characteristics() williamr@2: /** Returns a writable version of the alarm's characteristics. williamr@2: williamr@2: @return Alarm characteristics bit flags. */ williamr@2: { return iCharacteristics; } williamr@2: williamr@2: inline TAlarmCharacteristicsFlags Characteristics() const williamr@2: /** Returns the alarm's characteristics williamr@2: williamr@2: @return Alarm characteristics bit flags. */ williamr@2: { return iCharacteristics; } williamr@2: williamr@2: inline TAlarmRepeatDefinition& RepeatDefinition() williamr@2: /** Returns a writable version of the alarm's repeat definition. williamr@2: williamr@2: The repeat definition controls the alarm's behaviour after it has expired. williamr@2: For example, you can set the repeat definition so that the server automatically williamr@2: queues the alarm to expire again in exactly 24 hours time. williamr@2: williamr@2: @return Alarm repeat definition. */ williamr@2: { return iRepeatDefinition; } williamr@2: williamr@2: inline TAlarmRepeatDefinition RepeatDefinition() const williamr@2: /** Returns the repeat definition for the alarm. williamr@2: williamr@2: @return The alarm's repeat definition. */ williamr@2: { return iRepeatDefinition; } williamr@2: williamr@2: inline TAlarmMessage& Message() williamr@2: /** Returns a writable version of the alarm's message. williamr@2: williamr@2: The message is usually displayed in the application UI williamr@2: when the alarm expires. williamr@2: williamr@2: @return Reference to the alarm's associated message. */ williamr@2: { return iMessage; } williamr@2: williamr@2: inline const TAlarmMessage& Message() const williamr@2: /** Returns the alarm's message. williamr@2: williamr@2: The message is usually displayed in the application UI when the alarm expires. williamr@2: williamr@2: @return Reference to the alarm's associated message. */ williamr@2: { return iMessage; } williamr@2: williamr@2: inline TAlarmSoundName& SoundName() williamr@2: /** Return a writable version of the alarm sound's filename. williamr@2: williamr@2: @return Reference to the alarm's sound filename. */ williamr@2: { return iSoundName; } williamr@2: williamr@2: inline const TAlarmSoundName& SoundName() const williamr@2: /** Returns the alarm's sound filename. williamr@2: williamr@2: @return Sound filename. */ williamr@2: { return iSoundName; } williamr@2: williamr@2: inline TAlarmDayOrTimed DayOrTimed() const williamr@2: /** Returns the alarm session type. williamr@2: williamr@2: @return Alarm session type. */ williamr@2: { return iDayOrTimed; } williamr@2: williamr@2: williamr@2: inline TAlarmDayOrTimed& DayOrTimed() williamr@2: /** Returns a writable version of the alarm type, i.e. day, timed williamr@2: williamr@2: @return iDayOrTimed. */ williamr@2: { return iDayOrTimed; } williamr@2: williamr@2: williamr@2: IMPORT_C void SetUtcNextDueTime(TTime aUtcTime); williamr@2: williamr@2: IMPORT_C void SetDeQueueIfDueTimeInPast(); williamr@2: williamr@2: IMPORT_C TInt SetAlarmDays(TUint8 aAlarmDays); williamr@2: IMPORT_C TUint8 AlarmDays() const; williamr@2: IMPORT_C void SetContinuous(TBool aContinuous); williamr@2: IMPORT_C TBool Continuous(); williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: public: // CLIENT DATA ACCESS williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: inline TBitFlags16& ClientFlags() williamr@2: /** Returns a writable version of the alarm's client flags. williamr@2: williamr@2: The client flags may be used for any client-specific data - williamr@2: the alarm server does not use them. williamr@2: williamr@2: @return Reference to the alarm's bit flags. */ williamr@2: { return iClientFlags; } williamr@2: williamr@2: inline TBitFlags16 ClientFlags() const williamr@2: /** Returns this alarm's client flags. williamr@2: williamr@2: @return Reference to the alarm's bit flags. */ williamr@2: { return iClientFlags; } williamr@2: williamr@2: inline TInt ClientData1() const williamr@2: /** Returns the client data from slot 1 for this alarm. williamr@2: williamr@2: @return The first client-specific integer. */ williamr@2: { return iClientData1; } williamr@2: williamr@2: inline TInt& ClientData1() williamr@2: /** Returns a writable version of the client data from slot 1 for this alarm. williamr@2: williamr@2: @return Reference to the first client-specific integer. */ williamr@2: { return iClientData1; } williamr@2: williamr@2: inline TInt ClientData2() const williamr@2: /** Returns the client data from slot 2 for this alarm. williamr@2: williamr@2: @return The second client-specific integer. */ williamr@2: { return iClientData2; } williamr@2: williamr@2: inline TInt& ClientData2() williamr@2: /** Returns the client data from slot 2 for this alarm. williamr@2: williamr@2: @return The second client-specific integer. */ williamr@2: { return iClientData2; } williamr@2: williamr@2: inline TBool IsFloating() const williamr@2: /** Tests whether the alarm is floating. williamr@2: williamr@2: Floating alarms expire at a given wall-clock time regardless of the current locale and williamr@2: whether any daylight saving time rules are in force. williamr@2: williamr@2: @return True if the alarm is floating. williamr@2: */ williamr@2: { return iCharacteristics.IsClear(EAlarmCharacteristicsIsFixed); } williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: protected: // INTERNAL FLAGS williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: /* williamr@2: * @internalAll williamr@2: */ williamr@2: enum TASShdAlarmFlags williamr@2: { williamr@2: williamr@2: /* williamr@2: * @internalAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasAssociatedData = 0, williamr@2: williamr@2: /* williamr@2: * @internalAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasOwningSession = 1, williamr@2: williamr@2: /* williamr@2: * @internalAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasBecomeOrphaned = 2, williamr@2: williamr@2: /* williamr@2: * @internalAll Set if alarm is disabled manually so that can not be enabled when williamr@2: * locale changes. williamr@2: */ williamr@2: EASShdAlarmFlagsPermanentDisabled = 4 williamr@2: williamr@2: }; williamr@2: williamr@2: private: williamr@2: /* williamr@2: * @internalComponent williamr@2: */ williamr@2: enum TASShdAlarmFlags2 williamr@2: { williamr@2: EASShdAlarmFlag2Wakeup = 0, williamr@2: }; williamr@2: williamr@2: enum TASShdAlarmFlags2AlarmRepeatExtensions williamr@2: { williamr@2: EASShdAlarmFlag2AlarmDayMonday = 1, williamr@2: EASShdAlarmFlag2AlarmDayTuesday = 2, williamr@2: EASShdAlarmFlag2AlarmDayWednesday = 3, williamr@2: EASShdAlarmFlag2AlarmDayThursday = 4, williamr@2: EASShdAlarmFlag2AlarmDayFriday = 5, williamr@2: EASShdAlarmFlag2AlarmDaySaturday = 6, williamr@2: EASShdAlarmFlag2AlarmDaySunday = 7, williamr@2: EASShdAlarmFlag2Continuous = 8 williamr@2: }; williamr@2: williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: protected: // MEMBER DATA williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: /* williamr@2: * Various flags - used internally by the alarm object williamr@2: */ williamr@2: TBitFlags8 iFlags; williamr@2: williamr@2: /* williamr@2: * This represents the desired behaviour for a given alarm. williamr@2: * The Alarm Server uses this information to control the williamr@2: * behaviour of the alarm. williamr@2: * williamr@2: * @see TAlarmCharacteristics williamr@2: */ williamr@2: TAlarmCharacteristicsFlags iCharacteristics; williamr@2: williamr@2: /* williamr@2: * The unique identifier assoicated with each alarm maintained williamr@2: * by the alarm world server. williamr@2: */ williamr@2: TAlarmId iAlarmId; williamr@2: williamr@2: /* williamr@2: * The status of this alarm (e.g. enabled, disabled) williamr@2: */ williamr@2: TAlarmStatus iStatus; williamr@2: williamr@2: /* williamr@2: * The state of this alarm (e.g. queued, notifying, notified, snoozed etc) williamr@2: */ williamr@2: TAlarmState iState; williamr@2: williamr@2: /* williamr@2: * The type of this alarm (e.g. day, timed) williamr@2: */ williamr@2: TAlarmDayOrTimed iDayOrTimed; williamr@2: williamr@2: /* williamr@2: * Controls how the alarm repeats after it has expired. Note that williamr@2: * session alarms are not allowed to repeat (they must be "once williamr@2: * only"). williamr@2: */ williamr@2: TAlarmRepeatDefinition iRepeatDefinition; williamr@2: williamr@2: /* williamr@2: * This UID is supplied by the client and is used to indicate williamr@2: * the category that this alarm is part of. The Alarm Server williamr@2: * is category-agnostic, that is, this information is for williamr@2: * the client's use only williamr@2: */ williamr@2: TAlarmCategory iCategory; williamr@2: williamr@2: /* williamr@2: * The date and time at which this alarm is next due. For alarms williamr@2: * that haven't been snoozed, then this is the original due time. williamr@2: * williamr@2: * For alarms that have been snoozed, this is the time at which williamr@2: * the alarm will reawaken. williamr@2: */ williamr@2: TTime iNextDueTime; williamr@2: williamr@2: /* williamr@2: * This attribute is only used in the instance whereby an alarm williamr@2: * is snoozed. It represents the time at which the alarm first williamr@2: * expired. williamr@2: */ williamr@2: TTime iOriginalExpiryTime; williamr@2: williamr@2: /* williamr@2: * The message associated with this alarm, typically used williamr@2: * in an application UI to inform the user as to the reason williamr@2: * for the alarm. williamr@2: */ williamr@2: TAlarmMessage iMessage; williamr@2: williamr@2: /* williamr@2: * A descriptor which holds the name of the sound file which williamr@2: * should be played when the alarm expires. williamr@2: */ williamr@2: TAlarmSoundName iSoundName; williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: protected: // CLIENT SPECIFIC DATA williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: /* williamr@2: * Flags for use by any particular client. These will williamr@2: * only be relevant to a client who can interpret them. williamr@2: */ williamr@2: TBitFlags16 iClientFlags; williamr@2: williamr@2: /* williamr@2: * For arbitrary client data 1 williamr@2: */ williamr@2: TInt iClientData1; williamr@2: williamr@2: /* williamr@2: * For arbitrary client data 2 williamr@2: */ williamr@2: TInt iClientData2; williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: private: // BC PROOFING williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: TSecureId iTASShdAlarmSID; williamr@2: /* williamr@2: * Various flags - used internally by the alarm object williamr@2: */ williamr@2: TBitFlags16 iFlags2; williamr@2: TUint16 iTASShdAlarm_2; williamr@2: TAny* iTASShdAlarm_3; williamr@2: }; williamr@2: williamr@2: williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: // ----> TASShdAlarm (inline) williamr@2: /////////////////////////////////////////////////////////////////////////////////////// williamr@2: williamr@2: williamr@2: /** Tests whether the alarm has any associated data. williamr@2: williamr@2: @return True if the alarm has associated data. */ williamr@2: inline TBool TASShdAlarm::HasAssociatedData() const williamr@2: williamr@2: { williamr@2: return iFlags.IsSet(EASShdAlarmFlagsHasAssociatedData); williamr@2: } williamr@2: williamr@2: williamr@2: /** Tests whether the alarm has an active owning session. williamr@2: williamr@2: @return True if the alarm has an active owning session. */ williamr@2: inline TBool TASShdAlarm::HasOwningSession() const williamr@2: williamr@2: { williamr@2: return iFlags.IsSet(EASShdAlarmFlagsHasOwningSession); williamr@2: } williamr@2: williamr@2: inline TBool TASShdAlarm::HasBecomeOrphaned() const williamr@2: /** Tests whether the alarm is orphaned. williamr@2: williamr@2: An alarm is ophaned if it used to have an owning session, but no longer does. williamr@2: If an alarm is owned by a session, it is removed from the queue when the session williamr@2: disconnects. However, orphaned alarms stay in the queue. williamr@2: williamr@2: @return True if the alarm has becomed orphaned. */ williamr@2: { williamr@2: return iFlags.IsSet(EASShdAlarmFlagsHasBecomeOrphaned); williamr@2: } williamr@2: williamr@2: williamr@2: williamr@2: #endif // #ifndef __ASSHDALARM_H__