diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmservertest/TestMultipleAlarmsSuite/src/AlarmControlsManager.cpp --- /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(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 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(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); + } +