phoneapp/phoneuicontrol/src/cphoneuicommandmanager.cpp
changeset 74 d1c62c765e48
child 76 cfea66083b62
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/src/cphoneuicommandmanager.cpp	Fri Sep 17 17:09:12 2010 +0300
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 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: Class takes care of CBA's.
+*
+*/
+
+#include "cphoneuicommandmanager.h"
+
+#include "mpeengineinfo.h"
+#include "mphoneviewcommandhandle.h"
+#include "mphonestatemachine.h"
+#include "phonerssbase.h"
+#include "phonelogger.h"
+#include "cphonemainresourceresolver.h"
+#include "tphonecmdparaminteger.h"
+#include "tphonecmdparamcallstatedata.h"
+#include "tphonecmdparamboolean.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPhoneUiCommandManager::CPhoneUiCommandManager
+// ---------------------------------------------------------------------------
+//
+CPhoneUiCommandManager::CPhoneUiCommandManager(
+         CPhoneState* aState,
+         MPhoneViewCommandHandle& aViewCommandHandle,
+         MPhoneStateMachine& aStateMachine )
+   : iState ( aState ), 
+     iViewCommandHandle ( aViewCommandHandle ),
+     iStateMachine ( aStateMachine ),
+     iSoftRejectStatus ( ETrue )
+    {
+    __LOGMETHODSTARTEND( EPhoneControl, "CPhoneUiCommandManager::CPhoneUiCommandManager() ");
+    }
+
+ // ---------------------------------------------------------------------------
+ // CPhoneUiCommandManager::NewL
+ // ---------------------------------------------------------------------------
+ //
+CPhoneUiCommandManager* CPhoneUiCommandManager::NewL( 
+        CPhoneState* aState,
+        MPhoneViewCommandHandle& aViewCommandHandle,
+        MPhoneStateMachine& aStateMachine )
+     {
+     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneUiCommandManager::NewL() ");
+     return new (ELeave) CPhoneUiCommandManager( aState, aViewCommandHandle, aStateMachine );
+     }
+
+// ---------------------------------------------------------------------------
+//  CPhoneUiCommandManager::~CPhoneUiCommandManager
+// ---------------------------------------------------------------------------
+//
+CPhoneUiCommandManager::~CPhoneUiCommandManager()
+     {
+     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneUiCommandManager::~CPhoneUiCommandManager() ");
+     }
+ 
+// ======== LOCAL FUNCTIONS ========
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::UpdateUiCommands
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::UpdateUiCommands()
+    {
+    SetButtonFlags();
+    
+    SetTouchButtons();
+    
+    SetToolBarButtons();
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SetSoftRejectStatus
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::SetSoftRejectStatus( TBool aSoftRejectStatus )
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUiCommandManager::SetSoftRejectStatus ()" );
+    // Set the internal TBool variable
+    iSoftRejectStatus = aSoftRejectStatus;
+    __PHONELOG1( 
+            EBasic, 
+            EPhoneControl, 
+            "CPhoneUiCommandManager::SetSoftRejectStatus - iSoftRejectStatus =%d", 
+            iSoftRejectStatus  );
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SoftRejectStatus
+// -----------------------------------------------------------
+//
+TBool CPhoneUiCommandManager::SoftRejectStatus()
+    {
+    return iSoftRejectStatus;
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SetSoftRejectDimmedFlag
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::SetSoftRejectDimmedFlag()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUiCommandManager::GetIncomingCallSilenceCBA ()" );
+    TPhoneCmdParamCallStateData callStateData;
+    callStateData.SetCallState( EPEStateRinging );
+    TRAPD( err, iViewCommandHandle.HandleCommandL(
+        EPhoneViewGetCallIdByState, &callStateData ) );
+    TPhoneCmdParamBoolean dimSoftRejectParam;
+    
+    if ( err == KErrNone && callStateData.CallId() > KErrNotFound )
+        {
+        TBool privateNumber = iStateMachine.PhoneEngineInfo()->
+                RemotePhoneNumber( callStateData.CallId() ).Length() == 0;
+        
+        TBool voip = iStateMachine.PhoneEngineInfo()->
+                CallType( callStateData.CallId() ) == EPECallTypeVoIP;
+        
+        dimSoftRejectParam.SetBoolean( privateNumber || !iSoftRejectStatus || voip );        
+        }
+    else
+        {
+        iSoftRejectStatus = ETrue;
+        dimSoftRejectParam.SetBoolean( EFalse );
+        }
+    iViewCommandHandle.ExecuteCommand(
+            EPhoneViewSetSoftRejectDimmed, &dimSoftRejectParam );
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SetButtonFlags
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::SetButtonFlags()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUiCommandManager::SetButtonFlags() ");
+    SetSoftRejectDimmedFlag();
+    
+    TPhoneCmdParamBoolean muteParam;
+    muteParam.SetBoolean( iStateMachine.PhoneEngineInfo()->AudioMute() );
+    iViewCommandHandle.ExecuteCommand(EPhoneViewSetMuteFlag,&muteParam);
+    
+    const TPEAudioOutput audioOutput =
+        iStateMachine.PhoneEngineInfo()->AudioOutput();
+
+    TBool btAvailable = iStateMachine.PhoneEngineInfo()->AudioOutputAvailable(
+        EPEBTAudioAccessory );
+    
+    TPhoneCmdParamBoolean btParam;
+    btParam.SetBoolean( audioOutput == EPEBTAudioAccessory );        
+    iViewCommandHandle.ExecuteCommand(EPhoneViewSetBlueToothFlag,&btParam);
+
+    TPhoneCmdParamBoolean btAvailableParam;
+    btAvailableParam.SetBoolean( btAvailable );        
+    iViewCommandHandle.ExecuteCommand(
+            EPhoneViewSetBluetoothAvailableFlag,&btAvailableParam);
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SetTouchButtons
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::SetTouchButtons()
+    {
+    __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUiCommandManager::SetTouchButtons() ");
+    TPhoneCmdParamBoolean booleanParam;
+    booleanParam.SetBoolean( IsEmergency() );
+
+    iViewCommandHandle.ExecuteCommand(
+                 EPhoneViewSetTouchPaneButtons,
+                 &booleanParam );
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SetToolBarButtons
+// -----------------------------------------------------------
+//
+void CPhoneUiCommandManager::SetToolBarButtons()
+    {
+    
+    TInt resource( IsEmergency() ? 
+        EPhoneCallHandlingEmergencyCBA :
+        ToolBarResource() );
+    
+    if ( resource != KErrNotFound )
+        {
+        TPhoneCmdParamInteger integerParam;
+        integerParam.SetInteger(
+            CPhoneMainResourceResolver::Instance()->ResolveResourceID(
+                    resource ) );
+        iViewCommandHandle.ExecuteCommand( EPhoneViewUpdateCba,
+            &integerParam );
+        }
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::ToolBarResource
+// -----------------------------------------------------------
+//
+TInt CPhoneUiCommandManager::ToolBarResource()
+    {
+    TInt ret( KErrNotFound );
+    TPhoneCmdParamInteger callIdParam;
+    iViewCommandHandle.ExecuteCommand( 
+            EPhoneViewGetExpandedBubbleCallId, &callIdParam );
+       
+    TInt callID = callIdParam.Integer();
+    
+    if ( callID != KErrNotFound )
+        {
+        TInt callState = iStateMachine.PhoneEngineInfo()->
+                CallState( callID );
+                                
+        if ( callState == EPEStateRinging ) 
+            {
+            ret = RingingCallResource();
+            }
+        else
+            {
+            ret = EPhoneCallHandlingInCallCBA;
+            }
+        }
+
+    return ret;
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::RingingCallResource
+// -----------------------------------------------------------
+//
+TInt CPhoneUiCommandManager::RingingCallResource()
+    {
+    TInt ret( KErrNotFound );
+    TPhoneCmdParamInteger activeCallCountParam;
+    TRAP_IGNORE( iViewCommandHandle.ExecuteCommandL(
+            EPhoneViewGetCountOfActiveCalls, &activeCallCountParam ) );
+    TInt activeCallCount = activeCallCountParam.Integer();
+    
+    if ( 0 == activeCallCount ) 
+        {
+        ret = SingleRingingCallResource();
+        }
+    else if ( 2 == activeCallCount )
+        {
+        ret = ret = EPhoneCallHandlingIncomingRejectCBA;
+        }
+    else
+        {
+        ret = EPhoneCallHandlingCallWaitingCBA;
+        }
+    
+    return ret;
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::SingleRingingCallResource
+// -----------------------------------------------------------
+//
+TInt CPhoneUiCommandManager::SingleRingingCallResource()
+    {
+    TInt ret( KErrNotFound );
+
+    TPhoneCmdParamBoolean ringingTonePlaying;
+    iViewCommandHandle.ExecuteCommand( 
+            EPhoneViewIsRingingTonePlaying, &ringingTonePlaying );
+    
+    if ( ringingTonePlaying.Boolean() )
+        {
+        ret = EPhoneCallHandlingIncomingCBA;
+        }
+    else
+        {
+        ret = EPhoneCallHandlingIncomingSoftRejectCBA;
+        }
+    
+    return ret;
+    }
+
+// -----------------------------------------------------------
+// CPhoneUiCommandManager::IsEmergency
+// -----------------------------------------------------------
+//
+TBool CPhoneUiCommandManager::IsEmergency()
+    {
+    TBool emergency( EPEStateIdle != 
+        iStateMachine.PhoneEngineInfo()->CallState( KPEEmergencyCallId ) );
+    
+    return emergency;
+    }
+