diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tmultiplealarm/TRemoteFactory.cpp --- /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 +#include "eikalsup.h" +#include + +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 buf; + buf.Copy(aAlarmName); + iFactory->SendData(buf); + } + +void CTRemoteAlarm::StopPlayAlarm() + { + iFactory->SendInt(EASAltOpCodeStopPlayingSound); + iFactory->SendInt(iAlarmId); + }