commonuisupport/uikon/test/tmultiplealarm/TRemoteFactory.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/test/tmultiplealarm/TRemoteFactory.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,284 @@
+// 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:
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "TRemoteFactory.h"
+
+#include <asaltdefs.h>
+#include "eikalsup.h"
+#include <uikon/eikalsrv.h>
+
+CTRemoteFactory* CTRemoteFactory::NewL()
+	{
+	CTRemoteFactory *self = new (ELeave) CTRemoteFactory;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+	
+CTRemoteFactory::CTRemoteFactory() :
+	iMaxAlarms(1),
+	iResponse(EFalse),
+	iId(-1),
+	iResponseCode(-1),
+	iCount(0),
+	iSnoozeTime(0)
+	{
+	}
+	
+void CTRemoteFactory::ConstructL()
+	{
+	User::LeaveIfError(iMsgQ.OpenGlobal(KRemoteQName, EOwnerThread));
+	iMaxAlarms = ReadInt();
+	iState = ReadInt();
+	iResponse = ReadBool();
+	
+	if(iResponse) 
+		{
+		iId = ReadInt();
+		iResponseCode = ReadInt();
+		
+		iSnoozeTime = ReadInt();
+		iUpdateSnooze = ReadBool();
+			
+		iQuietPeriod = TTime(MAKE_TUINT64(ReadInt(), ReadInt()));
+		}
+	}
+	
+CTRemoteFactory::~CTRemoteFactory()
+	{
+	}
+	
+MEikServAlarm* CTRemoteFactory::NewAlarmL(CEikAlmControlSupervisor& aSupervisor)
+	{
+	return CTRemoteAlarm::NewL(aSupervisor, this, iState);
+	}
+
+TInt CTRemoteFactory::ReadInt()
+	{
+	TRemoteMsg msg;
+	iMsgQ.ReceiveBlocking(msg);
+	return msg.Int();
+	}
+
+TBool CTRemoteFactory::ReadBool()
+	{
+	TRemoteMsg msg;
+	iMsgQ.ReceiveBlocking(msg);
+	
+	return msg.Bool();
+	}
+	
+void CTRemoteFactory::SendInt(const TInt aValue)
+	{
+	TRemoteMsg msg(aValue);
+	iMsgQ.SendBlocking(msg);
+	}
+	
+void CTRemoteFactory::SendData(const TDesC8& aData)
+	{
+	for(TInt i = 0; i < aData.Size(); i += KRemoteQMaxDataSize)
+		{
+		TPtrC8 mid = aData.Mid(i);
+		
+		TRemoteMsg msg(mid.Ptr(), KRemoteQMaxDataSize);		
+		iMsgQ.SendBlocking(msg);
+		}
+	}
+
+CTRemoteAlarm* CTRemoteAlarm::NewL(CEikAlmControlSupervisor& aSupervisor, CTRemoteFactory* aFactory, TInt aState)
+	{
+	return new (ELeave) CTRemoteAlarm(aSupervisor, aFactory, aState);
+	}
+
+CTRemoteAlarm::CTRemoteAlarm(CEikAlmControlSupervisor& aSupervisor, CTRemoteFactory* aFactory, TInt aState) :
+	iSupervisor(aSupervisor), iFactory(aFactory), iAlarmId(KNullAlarmId), iState(aState)
+	{
+	}
+
+CTRemoteAlarm::~CTRemoteAlarm()
+	{
+	iFactory->SendInt(iAlarmId);
+	}
+	
+void CTRemoteAlarm::Release()
+	{
+	delete this;
+	}
+	
+void CTRemoteAlarm::ShowAlarm()
+	{
+	iFactory->SendInt(EASAltOpCodeVisible);
+	iFactory->SendInt(iAlarmId);
+
+	if(iFactory->Server()->AlarmAlertIsVisible() == EFalse) // Already showing
+		{
+		iFactory->SendInt(ETrue);
+		}
+
+	else // Will be updated on completion.
+		{
+		iFactory->SendInt(!iFactory->Server()->AlarmAlertIsVisible());
+		}
+	
+	// If we are testing TaskKeyPressedL do this here since we will only be notified for visible alarms.
+	if (iFactory->Response() && 
+		iFactory->ResponseId() == iAlarmId &&
+		iFactory->ResponseCode() == ETestActionTaskKey) // We are in response mode
+		{
+		TRAP_IGNORE(iFactory->Server()->TaskKeyPressedL());
+		}	
+	}
+	
+void CTRemoteAlarm::HideAlarm()
+	{
+	iFactory->SendInt(EASAltOpCodeVisible);
+	iFactory->SendInt(iAlarmId);
+
+	if(iFactory->Server()->AlarmAlertIsVisible() == EFalse) // Already hidden
+		{
+		iFactory->SendInt(EFalse);
+		}
+
+	else // Will be updated on completion.
+		{
+		iFactory->SendInt(!iFactory->Server()->AlarmAlertIsVisible());
+		}
+	}
+	
+TInt CTRemoteAlarm::CurrentServerState() const
+	{
+	return iState;
+	}
+	
+void CTRemoteAlarm::UpdateSoundPauseTimeInterval(TInt aMinutes)
+	{
+	if (iFactory->Response())
+		{
+		switch(iFactory->ResponseCode())
+			{
+		case ETestActionHandleSwitch: // If we are testing HandleSwitchOnEvent
+		case ETestActionHandleSwitchAndPause: // or we are testing ETestActionHandleSwitchAndPause tell test step we got the update
+			iFactory->SendInt(iFactory->ResponseCode());
+			iFactory->SendInt(aMinutes);
+			break;
+		case EASAltAlertServerResponseSnooze: // Send update snooze interval in case someone is waiting
+			if(aMinutes != iFactory->SnoozeTime() && iFactory->UpdateSnooze())  // Only send if it has been updated
+				{
+				iFactory->SendInt(aMinutes);
+				}
+			break;
+		default:
+			break;
+			}
+		}
+	}
+	
+void CTRemoteAlarm::UpdateForAlarmServerState(TInt aNewAlarmServerState)
+	{
+	iState = aNewAlarmServerState;
+	iFactory->SendInt(EASAltOpCodeSetState);
+	iFactory->SendInt(aNewAlarmServerState);
+	iFactory->SendInt(iAlarmId);
+	
+	if (iFactory->Response() && iFactory->ResponseId() == iAlarmId) // We are in response mode
+		{
+		switch(iFactory->ResponseCode())
+			{
+		case EASAltAlertServerResponseSnooze:
+			if(iFactory->SnoozeTime() >= 0)
+				{
+				TRAP_IGNORE(iSupervisor.CmdTaskAwayFromAlarmL(iFactory->SnoozeTime()));
+				}
+			else 
+				{
+				TRAP_IGNORE(iSupervisor.CmdTaskAwayFromAlarmL());
+				}
+			
+			break;
+				
+		case EASAltAlertServerResponseClear:
+			iSupervisor.CmdAcknowledgeAlarm();
+			break;
+			
+		case EASAltAlertServerResponsePauseSound:
+			TRAP_IGNORE(iSupervisor.CmdPauseAlarmSoundL(iFactory->SnoozeTime()));
+			break;
+		case EASAltAlertServerResponseClearAll:
+			TRAP_IGNORE(iFactory->Server()->ClearAllAlarmsL());
+			break;
+			
+		case ETestActionSetQuietPeriod:
+			TRAP_IGNORE(iFactory->Server()->SetQuietPeriodL(iFactory->QuietPeriod()));
+			break;			
+		case EASAltAlertServerResponseSilence:
+			iSupervisor.CmdSilenceAlarmSound();
+			break;
+			
+		case ETestActionHandleSwitch:
+			iFactory->Server()->HandleSwitchOnEvent();
+			break;
+			
+
+			
+		case ETestActionDie:
+			CActiveScheduler::Stop();
+			break;
+			
+		case ETestActionHandleSwitchAndPause:
+			TRAP_IGNORE(iSupervisor.CmdPauseAlarmSoundL(iFactory->SnoozeTime()));
+			iFactory->Server()->HandleSwitchOnEvent();
+			break;
+		
+		default:
+			break;
+			}
+		}
+	}
+	
+void CTRemoteAlarm::UpdateAlarmInfo(const TASShdAlarm& aAlarm,const TFullName& /*aOwner*/)
+	{
+	iAlarmId = aAlarm.Id();
+	
+	iFactory->SendInt(EASAltOpCodeSetAlarm);
+	iFactory->SendInt(iAlarmId);
+
+	const TDesC8& data = iSupervisor.AlarmData();
+	
+	iFactory->SendInt(data.Size());	
+	iFactory->SendData(data);
+	
+	}
+	
+void CTRemoteAlarm::StartPlayAlarmL(const TDesC& aAlarmName)
+	{
+	iFactory->SendInt(EASAltOpCodeStartPlayingSound);
+	iFactory->SendInt(iAlarmId);
+	
+	TBuf8<KMaxAlarmSoundNameLength> buf;
+	buf.Copy(aAlarmName);
+	iFactory->SendData(buf);
+	}
+	
+void CTRemoteAlarm::StopPlayAlarm()
+	{
+	iFactory->SendInt(EASAltOpCodeStopPlayingSound);
+	iFactory->SendInt(iAlarmId); 
+	}