// EIKALSUP.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKALSUP_H__)
#define __EIKALSUP_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__T32ALRT_H__)
#include <t32alrt.h>
#endif

const TInt KAlarmSnoozeIncrement=5;

class CEikAlarmControl;
class CEikAlmControlSupervisor : public CBase
	{
public:
	enum TFlags
		{
		EHasMessageRequest		=0x00000002,
		EShouldCompleteMessage	=0x00000004,
		EHasMessageLogon		=0x00000008
		};
	enum TPriority 
		{ 
		ESnoozeCountDownPriority=0x00000001
		};
public:
	CEikAlmControlSupervisor();
	virtual ~CEikAlmControlSupervisor();
	void CancelTimeCountDown();
	void SynchronizeCountDownTimer();
	inline TInt PauseSoundMinutes() const;
	inline TTime QuietPeriodEndTime() const;
public:
	void CmdAcknowledgeAlarm();
	void CmdPauseAlarmSound(TInt aNumMinutes=KAlarmSnoozeIncrement);
	void CmdSilenceAlarmSound();
	TBool CmdTaskAwayFromAlarm();
public:
    void ConstructL();
	void ServiceL(const RMessage& aMessage);
protected:
    void NotifyClient(TAlmAlertResponse aFlag);
private:
	void UpdateDisplay();
	void StartTimeCountDown();
	static TInt CallbackSnoozeDecrement(TAny *aAlarmAlert);
	void DecrementSnoozeMinutes();
	void UpdateAlarmInfo(const RMessage& aMessage);
	void UpdateSoundDeferTime(const RMessage& aMessage);
	void ReturnTimeToSnooze(const RMessage& aMessage);
	void SetAlertState(TInt aAlarmServerStateFlags);
private:
	TInt iAlarmControlState;
	TInt iPauseSoundMinutes;
	TTime iPauseSoundDueTime;
	TTime iQuietPeriodEndTime;
	RMessagePtr iMsgPtr;
	RMessagePtr iLogonPtr;
	CEikAlarmControl* iAlarmAlert;
	CPeriodic* iMinuteCountDown;
	};

inline TInt CEikAlmControlSupervisor::PauseSoundMinutes() const
	{
	return(iPauseSoundMinutes);
	}

inline TTime CEikAlmControlSupervisor::QuietPeriodEndTime() const
	{
	return(iQuietPeriodEndTime);
	}

#endif
