commonappservices/alarmserver/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp
Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414)
Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can
arrange to use the same source file name in sfimage, without having to export over the original
Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need
for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.
// Copyright (c) 1999-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:
//
#include "ConsoleAlarmAlertConsole.h"
#include <e32twin.h>
#include <e32base.h>
#include <e32svr.h>
#include <calsession.h>
#include <calentryview.h>
#include <asaltdefs.h>
#include "ConsoleAlarmAlertSession.h"
CConsoleAlarmAlertConsole::CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession)
: CActive(CActive::EPriorityLow), iSession(aSession), iInstructionIndex(0)
{
CActiveScheduler::Add(this);
}
CConsoleAlarmAlertConsole::~CConsoleAlarmAlertConsole()
{
Cancel();
Hide();
}
void CConsoleAlarmAlertConsole::GetKey()
{
if (iWin && !IsActive())
{
SetActive();
iWin->Read(iStatus);
}
}
void CConsoleAlarmAlertConsole::CancelKey()
{
if (IsActive())
Cancel();
}
void CConsoleAlarmAlertConsole::DecCounterL()
{
if (iTimeInterval > 0)
{
--iTimeInterval;
UpdateDisplayL();
}
}
CCAASHelperCallBack::CCAASHelperCallBack()
{
}
void CCAASHelperCallBack::Progress(TInt /*aPercentageCompleted*/)
{
}
void CCAASHelperCallBack::Completed(TInt /*aError*/)
{
}
TBool CCAASHelperCallBack::NotifyProgress()
{
return EFalse;
}
void CConsoleAlarmAlertConsole::UpdateDisplayL()
{
TBuf<180> buf;
_LIT(KEalwlAlarmSoundOff, "Off");
_LIT(KEalwlAlarmSoundOn, "On");
_LIT(KEalwlStatusEnabled, "Are");
_LIT(KEalwlStatusNotEnabled, "Are Not");
_LIT(KEalwlStatusIs, "Is");
_LIT(KEalwlStatusIsNo, "Is No");
_LIT(KFormatLocalTime,"\nDue Time:%D %H:%T:%S Local Time");
_LIT(KFormatUtcTime,"\nDue Time:%D %H:%T:%S UTC Time");
//
if (!iWin)
return;
iWin->SetCursorPosAbs(TPoint(0,0));
// MESSAGE
buf.Format(_L("Message : %S"), &iSession.Alarm().Message());
iWin->Write(buf);
iWin->ClearToEndOfLine();
if (iSession.Alarm().IsFloating())
{
(iSession.Alarm().NextDueTime()).FormatL(buf,KFormatLocalTime);
}
else
{
(iSession.Alarm().NextDueTime()).FormatL(buf,KFormatUtcTime);
}
iWin->Write(buf);
iWin->ClearToEndOfLine();
// DATA
if (iSession.Alarm().HasAssociatedData())
{
const TAgnAlarmInfo data = iSession.AlarmData();
const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
if (data.iAlarmCategory == KUidAgendaModelAlarmCategory)
{
_LIT(KEalwlAgendaData,"\ndata: agenda filename \"%S\"");
if (data.iFileName.Length() < 40)
{
buf.Format(KEalwlAgendaData,&data.iFileName);
}
else
{
TBuf<40> temp = data.iFileName.Left(40);
buf.Format(KEalwlAgendaData,&temp);
}
}
else
{
buf.Format(_L("\nAlarm has %d data bytes"), iSession.AlarmDataSize());
}
}
else
{
buf = _L("\nAlarm has no associated data");
}
iWin->Write(buf);
iWin->ClearToEndOfLine();
// DEFER TIME
if (iSession.DeferTime() != Time::NullTTime())
{
TDateTime dateTime(iSession.DeferTime().DateTime());
buf.Format(_L("\nDefer : %02d:%02d"), dateTime.Hour(), dateTime.Minute());
}
else
buf=_L("\nNULL defer time");
iWin->Write(buf);
iWin->ClearToEndOfLine();
// TIME INTERVAL
buf.Format(_L("\nCurrent time interval is %d minutes"), GetTimeInterval());
iWin->Write(buf);
iWin->ClearToEndOfLine();
// STATE FLAGS
buf.Format(_L("\nAlarm sounds are %S"),(iAlertState&EASAltStateFlagsSilentRunning)?&KEalwlAlarmSoundOff:&KEalwlAlarmSoundOn);
iWin->Write(buf);
iWin->ClearToEndOfLine();
buf.Format(_L("\nAlarm sounds %S paused"),(iAlertState&EASAltStateFlagsSoundIsPaused)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
iWin->Write(buf);
iWin->ClearToEndOfLine();
buf.Format(_L("\nAlarm sounds %S deferred"),(iAlertState&EASAltStateFlagsInQuietPeriod)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
iWin->Write(buf);
iWin->ClearToEndOfLine();
buf.Format(_L("\nThere %S more than one unacknowledged alarms"),(iAlertState&EASAltStateFlagsMoreThanOneDueAlarm)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
iWin->Write(buf);
iWin->ClearToEndOfLine();
buf.Format(_L("\nThere %S memory to snooze alarms"),(iAlertState&EASAltStateFlagsNoMemoryForSnoozeAlarm)?&KEalwlStatusIsNo:&KEalwlStatusIs);
iWin->Write(buf);
iWin->ClearToEndOfLine();
buf.Format(_L("\nThere %S an alarm sound to play"),(iAlertState&EASAltStateFlagsAlarmHasNoSoundFileName)?&KEalwlStatusIsNo:&KEalwlStatusIs);
iWin->Write(buf);
iWin->ClearToEndOfLine();
// COMMAND PROMPTS
iWin->Write(_L("\nENTER = Silence alarm SPACE = Quiet Period"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\nESCAPE = Acknowledge alarm A = Acknowledge all"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\nP = Pause alarm sound TAB = Snooze alarm"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\n1 = 1 min sound interval 0 = 0 mins sound interval"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\n+ = Increase int. and pause - = Decrease int. and pause"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\n! = Kill alarm alert server"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\n"));
iWin->ClearToEndOfLine();
iWin->Write(_L("\r"));
//
if(!iSession.InstructionSet()) //Get user input if instruction set unspecified.
GetKey();
else if (iInstructionIndex >= static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count()) //Get user input if program has already iterated thru entire instruction set.
GetKey();
else //Use the command in the instruction set, instead of waiting for user input.
{
if(!IsActive())
{
iStatus = KRequestPending;
TRequestStatus* ptrStatus = &iStatus;
User::RequestComplete( ptrStatus, KErrNone );
SetActive();
}
}
}
TInt CConsoleAlarmAlertConsole::GetTimeInterval() const
{
return(iTimeInterval);
}
void CConsoleAlarmAlertConsole::SetVisibilityL(TInt aVis)
{
if (!aVis)
Hide();
else if (!iWin)
{
// Create a new window, since cannot set order of console windows
CreateWinL();
UpdateDisplayL();
}
}
void CConsoleAlarmAlertConsole::SetAlertStateL(TInt aFlags)
{
iAlertState = aFlags;
UpdateDisplayL();
}
void CConsoleAlarmAlertConsole::RunL()
{
if (iStatus.Int() == KErrCancel)
return;
__ASSERT_DEBUG(iWin, User::Invariant());
TInt key = iWin->KeyCode();
if(iSession.InstructionSet() && iInstructionIndex < static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count())
{
RArray<TInt>* temp = static_cast<RArray<TInt>*>(iSession.InstructionSet());
key = (*temp)[iInstructionIndex++];
GetKey();
}
else
{
GetKey();
if ((key>=EKeyF1 && key<=EKeyF12) || key==EKeyTab)
{
DoDeferTime(EASAltAlertServerResponseSnooze);
}
}
switch (key)
{
// ACKNOWLEDGE CURRENT
case EKeyEscape:
iSession.Notify(EASAltAlertServerResponseClear);
return;
// ACKNOWLEDGE ALL
case 'a':
case 'A':
iSession.Notify(EASAltAlertServerResponseClearAll);
return;
// QUIET PERIOD
case EKeySpace:
DoDeferTime(EASAltAlertServerResponseQuietPeriod);
break;
// PAUSE SOUND
case 'p':
case 'P':
DoDeferTime(EASAltAlertServerResponsePauseSound);
break;
// SILENCE ALL SOUND
case EKeyEnter:
iSession.Notify(EASAltAlertServerResponseSilence);
break;
// INTERVAL 1 MINUTE
case '1':
iTimeInterval=1;
iSession.Notify(EASAltAlertServerResponsePauseSound);
break;
// INTERVAL 0 MINUTES
case '0':
iTimeInterval=0;
iSession.Notify(EASAltAlertServerResponsePauseSound);
break;
// PAUSE +
case '=':
case '+':
iTimeInterval++;
iSession.Notify(EASAltAlertServerResponsePauseSound);
break;
// PAUSE -
case '-':
iTimeInterval--;
iSession.Notify(EASAltAlertServerResponsePauseSound);
break;
// QUIT
case '!':
CActiveScheduler::Stop();
break;
}
TBuf<10> buf;
buf.Format(_L("'%c',"), key);
iWin->Write(buf);
}
void CConsoleAlarmAlertConsole::DoCancel()
{
__ASSERT_DEBUG(iWin, User::Invariant());
iWin->ReadCancel();
}
void CConsoleAlarmAlertConsole::Hide()
{
if (iWin)
CancelKey();
//
delete iWin;
iWin = NULL;
//
if (iCountDown)
iCountDown->Cancel();
//
delete iCountDown;
iCountDown=NULL;
}
void CConsoleAlarmAlertConsole::CreateWinL()
{
_LIT(KAlarmAlertConsoleCaption, "Test Alarm Alert Server Console");
//
__ASSERT_DEBUG(!iWin, User::Invariant());
__ASSERT_DEBUG(!iCountDown, User::Invariant());
//
TRAPD(trapCheck, iWin = Console::NewL(KAlarmAlertConsoleCaption, TSize(KConsFullScreen, KConsFullScreen)));
if (trapCheck)
{
iWin=NULL;
return;
}
TRAP(trapCheck, iCountDown = CPeriodic::NewL(CActive::EPriorityIdle));
if (trapCheck)
{
iCountDown=NULL;
return;
}
//
const TTimeIntervalMicroSeconds32 interval(60000000);
iCountDown->Start(interval, interval, TCallBack(&CountDownCallBackL, this));
}
void CConsoleAlarmAlertConsole::DoDeferTime(TASAltAlertServerResponse aResponse)
{
if (++iTimeInterval > 60)
{
iTimeInterval = 5;
User::Beep(440, 12);
}
//
TTime now;
now.UniversalTime();
now += TTimeIntervalMinutes(iTimeInterval);
//
iSession.Notify(aResponse, now);
}
TBool CConsoleAlarmAlertConsole::CountDownCallBackL(TAny* aSelf)
{
CConsoleAlarmAlertConsole& self = *reinterpret_cast<CConsoleAlarmAlertConsole*>(aSelf);
self.DecCounterL();
//
return EFalse;
}