diff -r 2eacb6118286 -r ba76fc04e6c2 phoneuis/TelephonyDeviceMode/src/CTelDMCommandHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/TelephonyDeviceMode/src/CTelDMCommandHandler.cpp Fri Jun 04 10:19:18 2010 +0100 @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2006 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: Implementation of the CTelDMCommandHandler class. +* +*/ + + + +// INCLUDE FILES + +#include +#include +#include + +#include "cteldmcommandhandler.h" +#include "cteldmcallstatelistener.h" +#include "mteldmaccessory.h" +#include "cteldmdebug.h" +#include + +// MODULE DATA STRUCTURES + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::NewL +// +// ----------------------------------------------------------------------------- +// +CTelDMCommandHandler* CTelDMCommandHandler::NewL( + MPhoneDeviceModeObserver& aCallHandler, + MTelDMAccessory& aAccessory ) + { + CTelDMCommandHandler* self = + new ( ELeave ) CTelDMCommandHandler( aCallHandler, + aAccessory ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::CTelDMCommandHandler +// +// ----------------------------------------------------------------------------- +// +CTelDMCommandHandler::CTelDMCommandHandler( + MPhoneDeviceModeObserver& aCallHandler, + MTelDMAccessory& aAccessory ): + iCallHandler( aCallHandler ), + iAccessory ( aAccessory ), + iGripOpen ( EFalse ), + iGripOpenOnRingingState ( EFalse ) + { + } + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::~CTelDMCommandHandler +// +// ----------------------------------------------------------------------------- +// +CTelDMCommandHandler::~CTelDMCommandHandler() + { + iKeyLock.Close(); + } + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CTelDMCommandHandler::ConstructL() + { + User::LeaveIfError( iKeyLock.Connect() ); + } + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::CallStateChanged() +// +// ----------------------------------------------------------------------------- +// +void CTelDMCommandHandler::CallStateChangedL( TInt aCallState ) + { + FLOG( _L( "CTelDMCommandHandler::CallStateChanged<" ) ) + FTRACE( FPrint( _L( "CTelDMCommandHandler::CallStateChangedL.aCallState=%d"), + aCallState )) + iCallState = aCallState; + switch( aCallState ) + { + // Arriving call + case EPSCTsyCallStateRinging: + FLOG( _L( "CTelDMCommandHandler::CallStateChanged.Ringing" ) ) + RProperty::Set( KPSUidCoreApplicationUIs, + KCoreAppUIsSoftReject, + ECoreAppUIsSoftRejectUninitialized ); + iGripOpenOnRingingState = iGripOpen; + break; + // Answered + case EPSCTsyCallStateConnected: + { + FLOG( _L( "CTelDMCommandHandler::CallStateChanged.Connected" ) ) + if ( iGripOpenOnRingingState ) + { + OfferKeyLock(); + } + + // Clear the flag. + iGripOpenOnRingingState = EFalse; + } + break; + // Disconnected + case EPSCTsyCallStateNone: + { + FLOG( _L( "CTelDMCommandHandler::CallStateChanged.None" ) ) + if ( iGripOpenOnRingingState ) + { + OfferKeyLock(); + } + } + break; + default: + break; + } + FLOG( _L( "CTelDMCommandHandler::CallStateChanged>" ) ) + } +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::HandleEvent +// +// ----------------------------------------------------------------------------- +// +void CTelDMCommandHandler::HandleCommand( TCommands aCommand ) + { + FLOG( _L( "CTelDMCommandHandler::HandleCommand<" ) ) + switch( aCommand ) + { + case EGripOpen: + { + FLOG( _L( "CTelDMCommandHandler::HandleCommand.Open" ) ) + iGripOpen = ETrue; + if ( !IsSoftRejectOngoing() ) + { + iCallHandler.Answer(); + } + } + break; + // Do not end calls if accessory is connected. + case EGripClose: + { + FLOG( _L( "CTelDMCommandHandler::HandleCommand.Close" ) ) + iGripOpen = EFalse; + EndCalls(); + break; + } + default: + break; + } + FLOG( _L( "CTelDMCommandHandler::HandleCommand>" ) ) + } + +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::EndCalls +// +// ----------------------------------------------------------------------------- +// +void CTelDMCommandHandler::EndCalls() + + { + if ( IsEmergencyCall() ) + { + // None + } + else if ( iAccessory.IsAccessoryAttached() && + !iAccessory.IsAnyActiveAccessory() && + iCallState == EPSCTsyCallStateConnected ) + { + FLOG( _L( "CTelDMCommandHandler::EndCalls#1" ) ) + iCallHandler.EndVoiceCalls(); + } + else if ( !iAccessory.IsAccessoryAttached() ) + { + FLOG( _L( "CTelDMCommandHandler::EndCalls#2" ) ) + iCallHandler.EndVoiceCalls(); + } + } +// ----------------------------------------------------------------------------- +// CTelDMCommandHandler::OfferKeyLock +// +// ----------------------------------------------------------------------------- +// +void CTelDMCommandHandler::OfferKeyLock() + + { + //- AudioAccessory attached (BT headset, Wired headset etc.) + //- Arriving call and grip open. + //- Call terminated or answered + //-> KeyLock query is shown if not locked + if ( iAccessory.IsAccessoryAttached() && + !iGripOpen && + !iKeyLock.IsKeyLockEnabled() ) + { + FLOG( _L( "CTelDMCommandHandler::CallStateChanged -lock?" ) ) + //Lock keypad ? + iKeyLock.OfferKeyLock(); + } + } + +// --------------------------------------------------------- +// CTelDMCommandHandler::IsEmergencyCall +// --------------------------------------------------------- +// +TBool CTelDMCommandHandler::IsEmergencyCall() const + { + FLOG( _L( "CTelDMCommandHandler::IsEmergencyCall" ) ) + TBool retVal( EFalse ); + TInt err( KErrNone ); + TInt state( 0 ); + + err = RProperty::Get( + KPSUidCtsyEmergencyCallInfo, + KCTSYEmergencyCallInfo, + state ); + + if ( err == KErrNone && state ) + { + retVal = ETrue; + } + return retVal; + } + +// --------------------------------------------------------- +// CTelDMCommandHandler::IsSoftRejectOngoing +// --------------------------------------------------------- +// +TBool CTelDMCommandHandler::IsSoftRejectOngoing() const + { + FLOG( _L( "CTelDMCommandHandler::IsSoftRejectOngoing" ) ) + TBool retVal( EFalse ); + TInt err( KErrNone ); + TInt state( 0 ); + + err = RProperty::Get( + KPSUidCoreApplicationUIs, + KCoreAppUIsSoftReject, + state ); + + if ( err == KErrNone && state == ECoreAppUIsSoftReject ) + { + retVal = ETrue; + } + return retVal; + } + +// End of File