phoneapp/phoneuivoipextension/src/cphonestatemachinevoip.cpp
changeset 0 5f000ab63145
child 23 40a3f856b14d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuivoipextension/src/cphonestatemachinevoip.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,221 @@
+/*
+* 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: Implementation of CPhoneStateMachineVoIP class.
+*
+*/
+
+// INCLUDE FILES
+#include "cphonestatemachinevoip.h"
+#include "phonelogger.h"
+#include "phonestatedefinitionsvoip.h"
+#include "cphonestateidlevoip.h"
+#include "cphonestateincomingvoip.h"
+#include "cphonestatecallsetupvoip.h"
+#include "cphonestatesinglevoip.h"
+#include "cphonestatealertingvoip.h"
+#include "cphonecustomizationvoip.h"
+#include "cphonevoiperrormessageshandler.h"
+#include "cphonestateutilsvoip.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::CPhoneStateMachineVoIP
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CPhoneStateMachineVoIP::CPhoneStateMachineVoIP(
+    MPhoneViewCommandHandle* aViewCommandHandle ) :
+    CPhoneStateMachineGSM( aViewCommandHandle )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::~CPhoneStateMachineVoIP()
+// Destructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CPhoneStateMachineVoIP::~CPhoneStateMachineVoIP()
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+        "CPhoneStateMachineVoIP::~CPhoneStateMachineVoIP()" );
+    
+    delete iVoipCustomization;
+    delete iStateUtils;
+    Dll::FreeTls();
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::ConstructL
+// Constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CPhoneStateMachineVoIP::ConstructL()
+    {
+    __LOGMETHODSTARTEND( 
+        PhoneUIVoIPExtension, "CPhoneStateMachineVoIP::ConstructL()" );
+    
+    iVoipCustomization = CPhoneCustomizationVoip::NewL( *this, *iViewCommandHandle );
+    iCustomization = iVoipCustomization;
+    iStateUtils = CPhoneStateUtilsVoip::NewL( *this, *iViewCommandHandle );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::State
+// ---------------------------------------------------------------------------
+//
+MPhoneState* CPhoneStateMachineVoIP::State()
+    {
+    __LOGMETHODSTARTEND( 
+        PhoneUIVoIPExtension, "CPhoneStateMachineVoIP::State()" );
+    
+    TInt err( KErrNone );
+    TBool madeStateTransition( EFalse );
+    TBool deleteOldState( ETrue );
+
+    if( iOldStateId != iNewStateId )
+        {
+        if( iOldStateId == EPhoneStateIdle ||
+            iOldStateId == EPhoneStateEmergency )
+            {
+            deleteOldState = EFalse;
+            }
+        if ( deleteOldState )
+            {
+            // Possible that derived class has been deleted iState,
+            // so this delete statement may be useless.
+            delete iState;
+            iState = NULL;	            		
+            }
+
+        // State transition need to be made - construct new state and
+        // destruct old
+        switch( iNewStateId )
+            {
+            case EPhoneStateCallSetup:
+                TRAP( err, iState = CPhoneStateCallSetupVoIP::NewL( 
+                	*this, *iViewCommandHandle, *iVoipCustomization ) );
+                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+                madeStateTransition = ETrue;
+                break;
+
+            case EPhoneStateIdle:
+                if( iIdleState == NULL )
+                    {
+                    TRAP( err, iIdleState = CPhoneStateIdleVoIP::NewL( 
+                    	*this, *iViewCommandHandle, *iVoipCustomization ) );
+                    __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+                    }
+                iState = iIdleState;
+                madeStateTransition = ETrue;
+                break;                     
+
+            case EPhoneStateIncoming:
+                TRAP( err, iState = CPhoneStateIncomingVoIP::NewL( 
+                	*this, *iViewCommandHandle, *iVoipCustomization ) );
+                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+                madeStateTransition = ETrue;
+                break;                     
+
+            case EPhoneStateSingle:
+                TRAP( err, iState = CPhoneStateSingleVoIP::NewL( 
+                	*this, *iViewCommandHandle, *iVoipCustomization ));
+                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+                madeStateTransition = ETrue;
+                break;
+
+            case EPhoneStateAlerting:
+                TRAP( err, iState = CPhoneStateAlertingVoIP::NewL(
+                	*this, *iViewCommandHandle, *iVoipCustomization ));
+                __ASSERT_ALWAYS( KErrNone == err, User::Invariant() );
+                madeStateTransition = ETrue;
+                break;
+
+            default:
+                iState = CPhoneStateMachineGSM::State();
+                break;
+            }
+        }
+
+    if ( madeStateTransition )
+        {
+        iOldStateId = iNewStateId;
+        }
+
+    return iState;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::SetVoipErrorMessageHandler
+// ---------------------------------------------------------------------------
+//
+void CPhoneStateMachineVoIP::SetVoipErrorMessageHandler( 
+        CPhoneVoIPErrorMessagesHandler& iErrorHandler )
+    {
+    iVoipErrorMessageHandler = &iErrorHandler;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::VoipErrorMessageHandler
+// ---------------------------------------------------------------------------
+//
+CPhoneVoIPErrorMessagesHandler& 
+        CPhoneStateMachineVoIP::VoipErrorMessageHandler() const
+    {
+    __ASSERT_DEBUG( NULL != iVoipErrorMessageHandler, User::Invariant() );
+    return *iVoipErrorMessageHandler;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::StateUtils
+// ---------------------------------------------------------------------------
+//
+CPhoneStateUtilsVoip& CPhoneStateMachineVoIP::StateUtils()
+    {
+    return *iStateUtils;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneStateMachineVoIP::NewL()
+// Constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CPhoneStateMachineVoIP* CPhoneStateMachineVoIP::NewL(
+        MPhoneViewCommandHandle* aViewCommandHandle )
+    {
+    __LOGMETHODSTARTEND( 
+        PhoneUIVoIPExtension, "CPhoneStateMachineVoIP::NewL()" );
+    
+    CPhoneStateMachineVoIP* self = 
+        new (ELeave) CPhoneStateMachineVoIP( aViewCommandHandle );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+// End of File