diff -r 000000000000 -r 164170e6151a securitydialogs/lockapp/src/lockappecsdetector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockapp/src/lockappecsdetector.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2007 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: Provides emergency call support for keyguard/devicelock + * +*/ + + +#include "lockappecsdetector.h" +#include "lockappecsnote.h" +#include "lockapputils.h" +#include +#include + +// --------------------------------------------------------------------------- +// Standard Symbian OS construction sequence +// --------------------------------------------------------------------------- +CLockAppEcsDetector* CLockAppEcsDetector::NewL( ) + { + CLockAppEcsDetector* self = new (ELeave) CLockAppEcsDetector(); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Standard C++ constructor +// --------------------------------------------------------------------------- +CLockAppEcsDetector::CLockAppEcsDetector( ) + { + } + +// --------------------------------------------------------------------------- +// Constructs the emergency detector and the note. +// --------------------------------------------------------------------------- +void CLockAppEcsDetector::ConstructL( ) + { + // emergency call support + iEcsDetector = CAknEcsDetector::NewL( ); + iEcsDetector->SetObserver( this ); + + // emergency call note + iEcsNote = new (ELeave) CLockAppEcsNote(); + iEcsNote->ConstructSleepingNoteL( R_AVKON_EMERGENCY_CALL_NOTE ); + iEcsNote->ButtonGroupContainer().ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition( 0, 2 ); + + // needs to be called for ecs detector to work/receive events. + iAvkonAppUi->EventMonitor()->Enable( ETrue ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +CLockAppEcsDetector::~CLockAppEcsDetector( ) + { + delete iEcsDetector; + delete iEcsNote; + } + +// --------------------------------------------------------------------------- +// Detector starts/stops listening to key events if keys are locked/unlocked. +// The detector key event queue is always reseted when lock status is changed. +// --------------------------------------------------------------------------- +void CLockAppEcsDetector::HandleLockStatusChangedL( TLockStatus aLockStatus ) + { + iEcsDetector->Reset( ); + switch ( aLockStatus ) + { + case ELockNotActive: + { + iEcsDetector->CloseEventSource( ); + } + break; + case EKeyguardActive: + case EDevicelockActive: + { + iEcsDetector->ConnectToEventSource( ); + } + break; + default: + DoPanic( ELockUnknownValue ); + break; + } + } + +// --------------------------------------------------------------------------- +// The main state controller needs to know if emergency call note is +// on the screen. +// --------------------------------------------------------------------------- +TBool CLockAppEcsDetector::EcsNoteOnScreen( ) const + { + return iEcsNote->iNoteOnScreen; + } + +// --------------------------------------------------------------------------- +// From @c MAknEcsObserver.. Handles changes in emergency the emergency number +// queue (i.e. if the user has dialed emergency numbers or not). +// --------------------------------------------------------------------------- +void CLockAppEcsDetector::HandleEcsEvent( CAknEcsDetector* aEcsDetector, + CAknEcsDetector::TState aState ) + { + switch ( aState ) + { + case CAknEcsDetector::ECompleteMatchThenSendKey: + // Do nothing since note will be removed on ECallAttempted event + break; + // user has successfully dialed emergency numbers + case CAknEcsDetector::ECompleteMatch: + iEcsNote->SetEmergencyNumber( aEcsDetector->CurrentMatch( ) ); + // Tell sysAp to switch lights on + SendMessageToSysAp( EEikEcsQueryLights ); + iEcsNote->ShowNote( ); + break; + case CAknEcsDetector::EPartialMatch: + iEcsNote->SleepNote( ); + break; + case CAknEcsDetector::ECallAttempted: + iEcsNote->SleepNote( ); + break; + case CAknEcsDetector::EEmpty: + iEcsNote->SleepNote( ); + break; + case CAknEcsDetector::ENoMatch: + iEcsNote->SleepNote( ); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// Tests the emergency note ui. Only used for testing purposes, +// Created, because emergency detector does not work in emulator. +// --------------------------------------------------------------------------- +TInt CLockAppEcsDetector::TestEcsNote( ) + { +#ifdef _DEBUG + HandleEcsEvent( iEcsDetector, CAknEcsDetector::EEmpty ); + HandleEcsEvent( iEcsDetector, CAknEcsDetector::ENoMatch ); + HandleEcsEvent( iEcsDetector, CAknEcsDetector::EPartialMatch ); + HandleEcsEvent( iEcsDetector, CAknEcsDetector::ECompleteMatch ); + _LIT( NText, "112Test"); + iEcsNote->SetEmergencyNumber( NText ); + SendMessageToSysAp( EEikEcsQueryLights ); + iEcsNote->ShowNote( ); +#endif + return KErrNone; + }