--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuistates/src/cphonegsmincall.cpp Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,430 @@
+/*
+* 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 CPhoneGsmInCall class.
+*
+*/
+
+
+// INCLUDES
+#include <mpeengineinfo.h>
+#include <pevirtualengine.h>
+#include <cpephonemodelif.h>
+#include <StringLoader.h>
+
+#include "cphonegsmincall.h"
+#include "phonerssbase.h"
+#include "phonelogger.h"
+#include "cphonegeneralgsmmessageshandler.h"
+#include "tphonecmdparamglobalnote.h"
+#include "tphonecmdparamboolean.h"
+#include "tphonecmdparaminteger.h"
+#include "mphonestatemachine.h"
+#include "cphonemainresourceresolver.h"
+#include "phoneui.hrh"
+
+#include "tphonecmdparamcallstatedata.h"
+#include "tphonecmdparamcallheaderdata.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CPhoneGsmInCall::CPhoneGsmInCall(
+ MPhoneStateMachine* aStateMachine,
+ MPhoneViewCommandHandle* aViewCommandHandle,
+ MPhoneCustomization* aPhoneCustomization ) :
+ CPhoneStateInCall( aStateMachine, aViewCommandHandle, aPhoneCustomization )
+ {
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::~CPhoneGsmInCall()
+// Destructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+
+CPhoneGsmInCall::~CPhoneGsmInCall()
+ {
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::ConstructL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::ConstructL()
+ {
+ __LOGMETHODSTARTEND( EPhoneUIStates, "CPhoneGsmInCall::ConstructL()");
+ CPhoneStateInCall::ConstructL();
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::NewL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+CPhoneGsmInCall* CPhoneGsmInCall::NewL(
+ MPhoneStateMachine* aStateMachine,
+ MPhoneViewCommandHandle* aViewCommandHandle,
+ MPhoneCustomization* aPhoneCustomization )
+ {
+ CPhoneGsmInCall* self = new (ELeave)
+ CPhoneGsmInCall( aStateMachine, aViewCommandHandle, aPhoneCustomization );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::HandlePhoneEngineMessageL
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::HandlePhoneEngineMessageL(
+ const TInt aMessage,
+ TInt aCallId )
+ {
+ __LOGMETHODSTARTEND( EPhoneUIStates,
+ "CPhoneGsmInCall::HandlePhoneEngineMessageL() ");
+ switch ( aMessage )
+ {
+ case MEngineMonitor::EPEMessageRemoteHeld:
+ CPhoneState::SendGlobalInfoNoteL(
+ EPhoneInformationRemotePutOnHoldNote );
+ break;
+
+ case MEngineMonitor::EPEMessageRemoteResumed:
+ CPhoneState::SendGlobalInfoNoteL(
+ EPhoneInformationConnectedNote );
+ break;
+
+ case MEngineMonitor::EPEMessageRemoteCreatedConference:
+ CPhoneState::SendGlobalInfoNoteL(
+ EPhoneInformationRemoteCreateConferenceNote );
+ break;
+ case MEngineMonitor::EPEMessageIncCallIsForw: // fall through
+ case MEngineMonitor::EPEMessageIssuingSSRequest: // fall through
+ case MEngineMonitor::EPEMessageCallBarred: // fall through
+ case MEngineMonitor::EPEMessageShowVersion: // fall through
+ case MEngineMonitor::EPEMessageIssuedSSRequest: // fall through
+ case MEngineMonitor::EPEMessageTempClirActivationUnsuccessful:
+ case MEngineMonitor::EPEMessageIncCallForwToC: // fall through
+ case MEngineMonitor::EPEMessageOutCallForwToC: // fall through
+ case MEngineMonitor::EPEMessageForwardUnconditionalModeActive: // fall through
+ case MEngineMonitor::EPEMessageForwardConditionallyModeActive:
+ {
+ CPhoneGeneralGsmMessagesHandler* gsmMsgHandler =
+ CPhoneGeneralGsmMessagesHandler::NewL( *iStateMachine,
+ *iViewCommandHandle,
+ *this );
+ CleanupStack::PushL( gsmMsgHandler );
+ gsmMsgHandler->HandlePhoneEngineMessageL( aMessage, aCallId );
+ CleanupStack::PopAndDestroy( gsmMsgHandler );
+
+ // Needed also in non-touch, if call waiting request (*43#)
+ // is sent during active call at least.
+ UpdateCbaL( EPhoneCallHandlingInCallCBA );
+ }
+ break;
+
+ default:
+ CPhoneStateInCall::HandlePhoneEngineMessageL(
+ aMessage, aCallId );
+ break;
+ }
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall:HandleCommandL
+// -----------------------------------------------------------
+//
+EXPORT_C TBool CPhoneGsmInCall::HandleCommandL( TInt aCommand )
+ {
+ __LOGMETHODSTARTEND( EPhoneUIStates,
+ "CPhoneGsmInCall::HandleCommandL() ");
+ TBool commandStatus = ETrue;
+
+ switch( aCommand )
+ {
+ case EPhoneCallComingCmdAnswer:
+ case EPhoneInCallCmdAnswer:
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageAnswer );
+ break;
+
+ // 'Replace' from menu
+ case EPhoneInCallCmdReplace:
+ ReplaceCallL();
+ break;
+
+ case EPhoneInCallCmdSwap:
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageSwap );
+ break;
+
+ case EPhoneInCallCmdEndAllCalls:
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageReleaseAll );
+ break;
+
+ case EPhoneInCallCmdCreateConference:
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageCreateConference );
+ break;
+
+ case EPhoneInCallCmdTransfer:
+ iStateMachine->SendPhoneEngineMessage(
+ CPEPhoneModelIF::EPEMessageTransfer );
+ break;
+
+ default:
+ CPhoneStateInCall::HandleCommandL( aCommand );
+ break;
+ }
+ return commandStatus;
+ }
+
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::ReplaceCallL
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::ReplaceCallL()
+ {
+ __LOGMETHODSTARTEND( EPhoneUIStates,
+ "CPhoneGsmInCall::ReplaceCallL() ");
+
+ iStateMachine->SendPhoneEngineMessage(
+ MPEPhoneModel::EPEMessageReplaceActive );
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::HandleColpNoteL
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::HandleColpNoteL(
+ TInt aCallId )
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneGsmInCall::HandleColpNoteL() ");
+
+ MPEEngineInfo* EngineInfo = CPhoneState::iStateMachine->PhoneEngineInfo();
+
+ if ( EngineInfo->RemoteColpNumber( aCallId ).Length() )
+ {
+ TPhoneCmdParamGlobalNote globalNoteParam;
+ globalNoteParam.SetText( EngineInfo->RemoteColpNumber( aCallId ) );
+ globalNoteParam.SetType( EAknGlobalInformationNote );
+ globalNoteParam.SetTextResourceId(
+ CPhoneMainResourceResolver::Instance()->
+ ResolveResourceID( EPhoneColpConnected ) );
+ globalNoteParam.SetTone( EAvkonSIDInformationTone );
+
+ iViewCommandHandle->ExecuteCommandL(
+ EPhoneViewShowGlobalNote, &globalNoteParam );
+ }
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::BringIncomingToForegroundL()
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::BringIncomingToForegroundL()
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneGsmInCall::BringIncomingToForegroundL( ) ");
+
+ // Close menu bar, if it is displayed
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+
+ // Remove any phone dialogs if they are displayed
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewRemovePhoneDialogs );
+
+ // Capture keys when there is an incoming call
+ CaptureKeysDuringCallNotificationL( ETrue );
+
+ // Bring Phone app in the foreground
+ TPhoneCmdParamInteger uidParam;
+ uidParam.SetInteger( KUidPhoneApplication.iUid );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewBringAppToForeground,
+ &uidParam );
+
+ // Set Phone as the top application
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetTopApplication,
+ &uidParam );
+
+ // Disable global notes when there is an incoming call
+ TPhoneCmdParamBoolean globalNotifierParam;
+ globalNotifierParam.SetBoolean( ETrue );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
+ &globalNotifierParam );
+ iViewCommandHandle->ExecuteCommandL( EPhoneViewSetEikonNotifiersDisabled,
+ &globalNotifierParam );
+
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::AllowShowingOfWaitingCallHeaderL
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::AllowShowingOfWaitingCallHeaderL(
+ TPhoneCmdParamBoolean& aCommandParam )
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneGsmInCall::AllowShowingOfWaitingCallHeaderL() ");
+
+ iViewCommandHandle->ExecuteCommandL(
+ EPhoneViewAllowWaitingCallHeader,
+ &aCommandParam );
+
+ // Non-touch :Hide number entry if it exists on
+ // Touch : an internal operation ongoing
+ // -> do not hide dialer
+ if ( !iOnScreenDialer )
+ {
+ SetNumberEntryVisibilityL(EFalse);
+ }
+ // If param is true and number entry is open only then
+ // hide number entry.
+ else if ( aCommandParam.Boolean() && IsNumberEntryUsedL() )
+ {
+ SetNumberEntryVisibilityL(EFalse);
+ }
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::HandlePhoneForegroundEventL
+// -----------------------------------------------------------
+//
+EXPORT_C void CPhoneGsmInCall::HandlePhoneForegroundEventL()
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneGsmInCall::HandlePhoneForegroundEventL( ) ");
+ if ( iOnScreenDialer && IsNumberEntryUsedL() )
+ {
+ // If numberentry is used then we need to call EPhoneViewSetDialerControlVisible
+ // to ensure that numberentry/dialler is drawn to UI.
+ TPhoneViewResponseId respond =
+ iViewCommandHandle->HandleCommandL( EPhoneViewSetDialerControlVisible );
+
+ if ( respond && IsNumberEntryVisibleL() )
+ {
+ // Set Number Entry CBA
+ iCbaManager->SetCbaL( EPhoneNumberAcqCBA );
+ }
+ }
+ }
+
+// -----------------------------------------------------------
+// CPhoneGsmInCall::HandleHoldNoteL
+// -----------------------------------------------------------
+//
+void CPhoneGsmInCall::HandleHoldNoteL(
+ TInt aCallId, TBool aHold )
+ {
+ __LOGMETHODSTARTEND(EPhoneControl, "CPhoneGsmInCall::HandleHoldNoteL( ) ");
+ TBuf< KPhoneContactNameMaxLength > holdText( KNullDesC );
+ TPhoneCmdParamGlobalNote globalNoteParam;
+ TInt resourceId(0);
+
+ if( iStateMachine->PhoneEngineInfo()->RemoteName( aCallId ).Length() ||
+ iStateMachine->PhoneEngineInfo()->RemoteCompanyName( aCallId ).Length())
+ {
+ TInt resource( EPhoneInformationCallActivetedCli );
+ if ( aHold )
+ {
+ resource = EPhoneInformationCallOnHoldCli;
+ }
+ GetRemoteInfoDataL ( aCallId, holdText );
+ resourceId = CPhoneMainResourceResolver::Instance()->
+ ResolveResourceID( resource );
+ globalNoteParam.SetTextResourceId( resourceId );
+ }
+ else
+ {
+ TInt resource( EPhoneInformationCallActiveted );
+ if ( aHold )
+ {
+ resource = EPhoneInformationCallOnHoldNoCli;
+ }
+ resourceId = CPhoneMainResourceResolver::Instance()->
+ ResolveResourceID( resource );
+
+ HBufC* tmp = StringLoader::LoadL( resourceId,
+ aCallId + 1 , CCoeEnv::Static() );
+
+ holdText = *tmp;
+ delete tmp;
+ tmp = NULL;
+ }
+
+ globalNoteParam.SetText( holdText );
+ globalNoteParam.SetType( EAknGlobalConfirmationNote );
+ globalNoteParam.SetTone( EAvkonSIDInformationTone );
+
+ iViewCommandHandle->ExecuteCommandL(
+ EPhoneViewShowGlobalNote, &globalNoteParam );
+ }
+
+
+// ---------------------------------------------------------
+// CPhoneGsmInCall::SetDivertIndication
+// ---------------------------------------------------------
+//
+EXPORT_C void CPhoneGsmInCall::SetDivertIndication( const TBool aDivertIndication )
+ {
+ __LOGMETHODSTARTEND( EPhoneControl, "CPhoneGsmInCall::SetDivertIndication()");
+
+ CPhoneState::SetDivertIndication( aDivertIndication );
+
+ TRAP_IGNORE( HandeDivertIndicationL() );
+ }
+
+// ---------------------------------------------------------
+// CPhoneGsmInCall::HandeDivertIndicationL
+// ---------------------------------------------------------
+//
+void CPhoneGsmInCall::HandeDivertIndicationL()
+ {
+ __LOGMETHODSTARTEND( EPhoneControl, "CPhoneGsmInCall::HandeDivertIndicationL()");
+
+ TBuf< KPhoneContactNameMaxLength > remoteInfoText( KNullDesC );
+ TInt ringingCallId ( KErrNotFound );
+
+ ringingCallId = GetRingingCallL();
+
+ if( ringingCallId > KErrNotFound )
+ {
+ TPhoneCmdParamCallHeaderData divertData;
+
+ divertData.SetDiverted( ETrue );
+
+ GetRemoteInfoDataL( ringingCallId, remoteInfoText );
+ divertData.SetCLIText(
+ remoteInfoText,
+ TPhoneCmdParamCallHeaderData::ERight );
+
+ divertData.SetCiphering(
+ iStateMachine->PhoneEngineInfo()->IsSecureCall( ringingCallId ) );
+ divertData.SetCipheringIndicatorAllowed(
+ iStateMachine->PhoneEngineInfo()->SecureSpecified() );
+
+ iViewCommandHandle->ExecuteCommandL(
+ EPhoneViewUpdateCallHeaderRemoteInfoData, ringingCallId,
+ &divertData );
+ }
+ }
+
+// End of File