commonappservices/alarmservertest/TestMultipleAlarmsSuite/src/AlarmControlsManager.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmservertest/TestMultipleAlarmsSuite/src/AlarmControlsManager.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,335 @@
+// Copyright (c) 2005-2009 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:
+// Contains implementation of CAlarmControlsManager class
+// 
+//
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+// User Includes
+#include "DummyAlarmControl.h"
+#include "AlarmActionPerformer.h"
+
+/**
+Constructor
+@param aTestServer Reference to the Test Server object
+@internalTechnology
+@test
+*/
+CAlarmControlsManager::CAlarmControlsManager(CTestMultipleAlarmsServer& aTestServer) : iTestServer(aTestServer)
+	{
+	}
+	
+/**
+First phase Constructor.
+@param aTestServer Reference to the Test Server object
+@return Pointer to self
+@internalTechnology
+@test
+*/
+CAlarmControlsManager* CAlarmControlsManager::NewL(CTestMultipleAlarmsServer& aTestServer)
+	{
+	CAlarmControlsManager *self = new (ELeave) CAlarmControlsManager(aTestServer);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+/**
+Second phase Constructor.
+Initializes Alarm Action Performer.
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::ConstructL()	
+	{
+	iAlarmActionPerformer = new (ELeave) CAlarmActionPerformer();
+	}
+	
+/**
+Destructor. Resets and destroys the alarm control list
+@internalTechnology
+@test
+*/
+CAlarmControlsManager::~CAlarmControlsManager()
+	{
+	iAlarmControlList.ResetAndDestroy();
+	iAlarmControlList.Close();
+	delete iAlarmActionPerformer;
+	}
+
+/**
+MEikServAlarmFactory implementation. Creates and returns an alarm control object
+Called by the Alarm Alert Supervisor
+@param aSupervisor Reference to the Alarm Alert supervisor object.
+@return A pointer to the Alarm Control object
+@internalTechnology
+@test
+*/
+MEikServAlarm* CAlarmControlsManager::NewAlarmL(CEikAlmControlSupervisor& aSupervisor)
+	{
+	CDummyAlarmControl* alarmControl = new (ELeave) CDummyAlarmControl(&aSupervisor, this);
+	CleanupStack::PushL(alarmControl);
+	iAlarmControlList.AppendL(alarmControl);
+	CleanupStack::Pop(alarmControl);
+	return alarmControl;
+	}
+
+/**
+Increments the Test Server's flag of currently notifying alarms
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::IncrementNoOfCurrentlyNotifyingAlarms()
+	{
+	iTestServer.NoOfCurrentlyNotifyingAlarms() += 1;
+	}
+	
+/**
+Decrements the Test Server's flag of currently notifying alarms
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::DecrementNoOfCurrentlyNotifyingAlarms()	
+	{
+	iTestServer.NoOfCurrentlyNotifyingAlarms() -= 1;	
+	}
+
+/**
+Updates the Test Server's flag of the currently playing alarm's ID
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::UpdateCurrentlyPlayingAlarmId(const TAlarmId& aAlarmId)
+	{
+	iTestServer.CurrentlyPlayingAlarmId() = aAlarmId;
+	}
+
+/**
+Returns the Test Server's flag of the currently supported no. of maxalarms
+Ereturn The Test Server's flag of the currently supported no. of maxalarms
+@internalTechnology
+@test
+*/
+TInt CAlarmControlsManager::CurrentMaxAlarms()
+	{
+	return iTestServer.CurrentMaxAlarms();
+	}
+
+/**
+Returns the string equivalent for the enumeration identifying the call-back
+@param aCallBack The enumeration identifying the call-back
+@return The string equivalent for the enumeration
+@internalTechnology
+@test
+*/
+const TDesC& CAlarmControlsManager::GetFunctionName(TInt aCallBack)
+	{
+	_LIT(KConstructed, "Constructed");
+	_LIT(KRelease, "Release");
+	_LIT(KShowAlarm, "ShowAlarm");
+	_LIT(KHideAlarm, "HideAlarm");
+	_LIT(KCurrentServerState, "CurrentServerState");
+	_LIT(KUpdateSoundPauseTimeInterval, "UpdateSoundPauseTimeInterval");
+	_LIT(KUpdateForAlarmServerState, "UpdateForAlarmServerState");
+	_LIT(KUpdateAlarmInfo, "UpdateAlarmInfo");
+	_LIT(KStartPlayAlarm, "StartPlayAlarm");
+	_LIT(KStopPlayAlarm, "StopPlayAlarm");
+	
+	switch(aCallBack) 
+		{
+		case TestMultipleAlarms::EConstructed:
+			return KConstructed();
+		case TestMultipleAlarms::ERelease:
+			return KRelease();
+		case TestMultipleAlarms::EShowAlarm:
+			return KShowAlarm();
+		case TestMultipleAlarms::EHideAlarm:
+			return KHideAlarm();
+		case TestMultipleAlarms::ECurrentServerState:
+			return KCurrentServerState();
+		case TestMultipleAlarms::EUpdateSoundPauseTimeInterval:
+			return KUpdateSoundPauseTimeInterval();
+		case TestMultipleAlarms::EUpdateForAlarmServerState:
+			return KUpdateForAlarmServerState();
+		case TestMultipleAlarms::EUpdateAlarmInfo:
+			return KUpdateAlarmInfo();
+		case TestMultipleAlarms::EStartPlayAlarm:
+			return KStartPlayAlarm();
+		case TestMultipleAlarms::EStopPlayAlarm:
+			return KStopPlayAlarm();
+		default:
+			return KNullDesC();	
+		}
+	}		
+	
+/**
+Prints the message using the Test Server's Logger
+@param aMessage The message to be printed
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::PrintLog(const TDesC& aMessage) const
+	{
+	if(iTestServer.LogSessionShared())
+		{
+		iTestServer.INFO_PRINTF1(aMessage);
+		}
+	}
+	
+/**
+Searches for the alarm control object associated with the message passed as 
+parameter and returns a pointer to it if found.
+@param aAlarmMessage The alarm message to identify its alarm control object
+@leave KErrNotFound If no alarm control object is found corresponding to the
+message
+@return A pointer to the alarm control object
+the message that was passed
+@internalTechnology
+@test
+*/
+MEikServAlarm* CAlarmControlsManager::GetAlarmControlObjectL(const TDesC& aAlarmMessage)
+	{
+	CDummyAlarmControl* alarmControl = NULL;
+	for(TInt ctr = 0; ctr < iAlarmControlList.Count(); ++ctr)
+		{
+		alarmControl = static_cast<CDummyAlarmControl*>(iAlarmControlList[ctr]);
+		if(alarmControl->AlarmMessage().Compare(aAlarmMessage) == KErrNone)
+			{
+			return iAlarmControlList[ctr];
+			}
+		}
+	User::Leave(KErrNotFound);
+	// To satisfy compilers
+	return NULL;
+	}
+
+/**
+Returns the count of the alarm control list that the alarm controls manager 
+maintains
+@return The count of the alarm control list
+@internalTechnology
+@test
+*/
+TInt CAlarmControlsManager::GetAlarmControlListCount()
+	{
+	return iAlarmControlList.Count();
+	}
+
+/**
+Returns the alarm control list that the alarm controls manager 
+maintains
+@return The alarm control list
+@internalTechnology
+@test
+*/
+RPointerArray<MEikServAlarm> CAlarmControlsManager::GetAlarmControlListL()
+	{
+	return iAlarmControlList;
+	}
+
+/**
+Removes the alarm control pointer from the alarm control list that the alarm 
+controls manager maintains
+@param aDummyAlarmControl The pointer to be removed
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::RemoveFromList(CDummyAlarmControl* aDummyAlarmControl)
+	{
+	TInt index = iAlarmControlList.Find(aDummyAlarmControl);
+	if(index >= 0)
+		{
+		iAlarmControlList.Remove(index);
+		}
+	}
+
+/**
+Sets up the Alarm Action Performer to perform an action
+@param aAlarmMessage The alarm message to identify its alarm control object
+@param aStatus Pointer to the request status which the Action Performer will 
+complete
+@param aAlarmAction The action to be performed, i.e, snooze/clear
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::SetAlarmActionCommonParamsL(const TDesC& aAlarmMessage, TRequestStatus* aStatus, const TestMultipleAlarms::TAlarmAction& aAlarmAction)	
+	{
+	CDummyAlarmControl* alarmControl = dynamic_cast<CDummyAlarmControl*>(GetAlarmControlObjectL(aAlarmMessage));
+	RThread thisThread;
+	thisThread.Duplicate(RThread());
+	iAlarmActionPerformer->SetCommonParams(alarmControl, aStatus, thisThread, aAlarmAction);
+	}
+	
+/**
+Requests the Alarm Action Performer to perform a Snooze
+@param aAlarmMessage The alarm message to identify its alarm control object
+@param aStatus Pointer to the request status which the Action Performer will 
+complete
+@param aMinsToSnooze Number of minutes to snooze the alarm
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::SnoozeAlarmL(const TDesC& aAlarmMessage, TRequestStatus* aStatus, const TInt& aMinsToSnooze)
+	{
+	SetAlarmActionCommonParamsL(aAlarmMessage, aStatus, TestMultipleAlarms::ESnooze);
+	iAlarmActionPerformer->SetMinsToSnooze(aMinsToSnooze);
+	SignalAlertServerThread();
+	}
+	
+/**
+Requests the Alarm Action Performer to perform a Clear
+@param aAlarmMessage The alarm message to identify its alarm control object
+@param aStatus Pointer to the request status which the Action Performer will 
+complete
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::ClearAlarmL(const TDesC& aAlarmMessage, TRequestStatus* aStatus)
+	{
+	SetAlarmActionCommonParamsL(aAlarmMessage, aStatus, TestMultipleAlarms::EClear);
+	SignalAlertServerThread();
+	}
+
+/**
+Requests the action performer to stop the active scheduler
+@param aStatus Pointer to the request status which the Action Performer will 
+complete
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::EndAlertServerThreadL(TRequestStatus* aStatus)
+	{
+	RThread thisThread;
+	thisThread.Duplicate(RThread());
+	iAlarmActionPerformer->SetCommonParams(NULL, aStatus, thisThread, TestMultipleAlarms::EStopActiveScheduler);
+	SignalAlertServerThread();
+	}
+
+/**
+Signals the Alert Server thread in whose scheduler Alarm Action Performer 
+is added
+@internalTechnology
+@test
+*/
+void CAlarmControlsManager::SignalAlertServerThread()
+	{
+	TRequestStatus* status = (iAlarmActionPerformer->Status());
+	iTestServer.AltSrvThread().RequestComplete(status, KErrNone);	
+	}
+