phoneapp/phoneuistates/src/cphonesingleandalerting.cpp
changeset 37 ba76fc04e6c2
child 45 6b911d05207e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuistates/src/cphonesingleandalerting.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2005-2008 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 CPhoneSingleAndAlerting class.
+*
+*/
+
+
+// INCLUDES
+#include <pevirtualengine.h>
+#include <cpephonemodelif.h>
+#include "cphonesingleandalerting.h"
+#include "tphonecmdparamboolean.h"
+#include "mphonestatemachine.h"
+#include "tphonecmdparamboolean.h"
+#include "tphonecmdparaminteger.h"
+#include "tphonecmdparamcallheaderdata.h"
+#include "tphonecmdparamglobalnote.h"
+#include "tphonecmdparamcallstatedata.h"
+#include "phoneviewcommanddefinitions.h"
+#include "phoneui.hrh"
+#include "cphonemainresourceresolver.h"
+#include "phonerssbase.h"
+#include "phonestatedefinitionsgsm.h"
+#include "phonelogger.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CPhoneSingleAndAlerting::CPhoneSingleAndAlerting( 
+    MPhoneStateMachine* aStateMachine, 
+    MPhoneViewCommandHandle* aViewCommandHandle,
+    MPhoneCustomization* aPhoneCustomization ) : 
+    CPhoneAlerting( aStateMachine, aViewCommandHandle, aPhoneCustomization )
+    {
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::~CPhoneSingleAndAlerting()
+// Destructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+CPhoneSingleAndAlerting::~CPhoneSingleAndAlerting()
+    {
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::ConstructL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::ConstructL()
+    {
+    CPhoneAlerting::ConstructL();
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::NewL()
+// Constructor
+// (other items were commented in a header).
+// -----------------------------------------------------------
+//
+CPhoneSingleAndAlerting* CPhoneSingleAndAlerting::NewL( 
+    MPhoneStateMachine* aStateMachine, 
+    MPhoneViewCommandHandle* aViewCommandHandle,
+    MPhoneCustomization* aPhoneCustomization )
+    {
+    CPhoneSingleAndAlerting* self = new( ELeave ) CPhoneSingleAndAlerting( 
+        aStateMachine, aViewCommandHandle, aPhoneCustomization );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::HandlePhoneEngineMessageL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::HandlePhoneEngineMessageL( 
+    const TInt aMessage, 
+    TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneSingleAndAlerting::HandlePhoneEngineMessageL()");
+    switch ( aMessage )
+        {
+        case MEngineMonitor::EPEMessageConnected:
+            HandleConnectedL( aCallId );
+            break;
+            
+        case MEngineMonitor::EPEMessageIdle:
+            HandleIdleL( aCallId );
+            break;
+            
+        default:
+            CPhoneAlerting::HandlePhoneEngineMessageL( aMessage, aCallId );
+            break;
+        }
+    }
+
+// --------------------------------------------------------------
+// CPhoneSingleAndAlerting::HandleKeyMessageL
+// --------------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::HandleKeyMessageL( 
+    TPhoneKeyEventMessages aMessage,
+    TKeyCode aCode )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneSingleAndAlerting::HandleKeyMessageL()");
+    switch ( aCode )
+        {
+        // send-key
+        case EKeyYes:
+            if ( CPhoneState::IsNumberEntryUsedL() )
+                {
+                // send a manual control sequence
+                CPhoneState::CallFromNumberEntryL();    
+                }
+            else
+                {
+                // Show not allowed note
+                CPhoneState::SendGlobalErrorNoteL( 
+                    EPhoneNoteTextNotAllowed );
+                }
+            break;
+
+        // end-key
+        case EKeyNo:
+            if ( aMessage == EPhoneKeyLongPress )
+                {
+                iStateMachine->SendPhoneEngineMessage(
+                    CPEPhoneModelIF::EPEMessageTerminateAllConnections );        
+                }
+            else
+                {
+                DisconnectOutgoingCallL();               
+                }
+                
+            if ( CPhoneState::IsNumberEntryUsedL() )
+                {
+                // Remove number entry from screen
+                iViewCommandHandle->ExecuteCommandL( 
+                      EPhoneViewRemoveNumberEntry );
+                // Do state-specific operation when number entry is cleared
+                HandleNumberEntryClearedL();
+                }
+            break;
+            
+        default:
+            // do base operation
+            CPhoneAlerting::HandleKeyMessageL( aMessage, aCode );
+            break;
+        }
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::HandleConnectedL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::HandleConnectedL( TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneSingleAndAlerting::HandleConnectedL()");
+
+    // Find the alerting call
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateConnecting );                    
+    iViewCommandHandle->HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData );
+        
+    if( callStateData.CallId() == aCallId )
+        {    
+        // Keep Phone in the foreground
+        TPhoneCmdParamBoolean booleanParam;
+        booleanParam.SetBoolean( EFalse );
+        iViewCommandHandle->ExecuteCommandL( 
+            EPhoneViewSetNeedToSendToBackgroundStatus, &booleanParam );
+        
+        // Close menu bar, if it is displayed
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+
+        CPhoneState::BeginUiUpdateLC();
+            
+        // Show bubble
+        TPhoneCmdParamCallHeaderData callHeaderParam;
+        callHeaderParam.SetCallState( EPEStateConnected );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
+            &callHeaderParam );
+
+        CPhoneState::SetTouchPaneButtons( EPhoneTwoSinglesButtons );
+        CPhoneState::EndUiUpdate();
+              
+        // Set Hold flag to view
+        TPhoneCmdParamBoolean holdFlag;
+        holdFlag.SetBoolean( EFalse );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );  
+        
+        
+        // Set Two singles softkeys
+        UpdateCbaL( EPhoneCallHandlingNewCallSwapCBA );
+        
+        // Go to two singles state
+        iStateMachine->ChangeState( EPhoneStateTwoSingles );
+        }
+    else
+        {
+        // Show bubble
+        TPhoneCmdParamCallHeaderData callHeaderParam;
+        callHeaderParam.SetCallState( EPEStateConnected );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewUpdateBubble, aCallId, 
+            &callHeaderParam );  
+            
+        TPhoneCmdParamBoolean holdFlag;
+        holdFlag.SetBoolean( EFalse );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
+        }
+        
+    CPhoneGsmInCall::HandleColpNoteL( aCallId );
+    }
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::HandleIdleL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::HandleIdleL( TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneSingleAndAlerting::HandleIdleL()");
+    
+    BeginUiUpdateLC();
+    
+    // Remove call 
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId );
+
+    // Close menu bar, if it is displayed
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose );
+
+    if ( !TopAppIsDisplayedL() )
+        {
+        // Continue displaying current app but set up the 
+        // idle screen in the background
+        SetupIdleScreenInBackgroundL();
+        }
+        
+    TPhoneCmdParamInteger countParam;
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewGetCountOfActiveCalls, &countParam);
+    
+    if ( countParam.Integer() )
+        {
+        SetTouchPaneButtons( EPhoneIncallButtons );    
+        // Set Hold flag to view
+        TPhoneCmdParamBoolean holdFlag;
+        holdFlag.SetBoolean( ETrue );
+        iViewCommandHandle->ExecuteCommandL( EPhoneViewSetHoldFlag, &holdFlag );
+        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+        iStateMachine->ChangeState( EPhoneStateSingle );
+        }
+    else
+        {
+        // Display call termination note, if necessary
+        DisplayCallTerminationNoteL();
+        SetTouchPaneButtons( EPhoneCallSetupButtons );
+        UpdateCbaL( EPhoneCallHandlingInCallCBA );
+        iStateMachine->ChangeState( EPhoneStateAlerting );
+        }
+
+    EndUiUpdate();
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::OpenMenuBarL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::OpenMenuBarL()
+    {
+    __LOGMETHODSTARTEND( EPhoneUIStates, 
+        "CPhoneSingleAndAlerting::OpenMenuBarL()");
+    TInt resourceId;
+
+    if ( IsNumberEntryVisibleL() )
+        {
+        resourceId = EPhoneAlertingAndHeldCallMenuBarWithNumberEntry;
+        }
+    else
+        {
+        resourceId = EPhoneAlertingAndHeldCallMenuBar;
+        }
+
+    TPhoneCmdParamInteger integerParam;
+    integerParam.SetInteger( 
+        CPhoneMainResourceResolver::Instance()->
+        ResolveResourceID( resourceId ) );
+    iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarOpen, 
+        &integerParam );
+    }
+
+// -----------------------------------------------------------
+// CPhoneSingleAndAlerting::UpdateInCallCbaL
+// -----------------------------------------------------------
+//
+void CPhoneSingleAndAlerting::UpdateInCallCbaL()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneSingleAndAlerting::UpdateInCallCbaL() ");
+    UpdateCbaL( EPhoneCallHandlingInCallCBA );
+    }
+    
+        
+// End of File