phoneapp/phoneuicontrol/src/phonecallutil.cpp
author hgs
Fri, 15 Oct 2010 12:58:46 +0300
changeset 78 baacf668fe89
permissions -rw-r--r--
201041

/*
* Copyright (c) 2010 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:  Acessory and Bluetooth handler.
*
*/


// INCLUDE FILES
#include    "phonecallutil.h"
#include    "mphonestatemachine.h"
#include    "mphoneviewcommandhandle.h"
#include    "cphonestatehandle.h"
#include    "tphonecmdparamboolean.h"
#include    "tphonecmdparaminteger.h"
#include    "cphonemediatorfactory.h"
#include    "cphonemediatorsender.h"
#include    "cphonereleasecommand.h"
#include    "tphonecmdparamcallstatedata.h" 

#include    <videotelcontrolmediatorapi.h>
#include    <MediatorDomainUIDs.h>
#include    <pevirtualengine.h>
#include    <mpeengineinfo.h>

// CONSTANTS

// ============================ MEMBER FUNCTIONS ===============================

// ---------------------------------------------------------
// PhoneCallUtil::DialMultimediaCall
// ---------------------------------------------------------
//
EXPORT_C void PhoneCallUtil::DialMultimediaCall()
    {    
    MPhoneStateMachine* stateMachine = StateMachine();
    stateMachine->PhoneEngineInfo()->SetCallTypeCommand( EPECallTypeVideo );
    stateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageDial );
    }

// ---------------------------------------------------------
// PhoneCallUtil::DialVoiceCallL
// ---------------------------------------------------------
//
EXPORT_C void PhoneCallUtil::DialVoiceCallL()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    
    TPhoneCmdParamBoolean globalNotifierParam;
    globalNotifierParam.SetBoolean( ETrue );
    ViewCommandHandle()->ExecuteCommandL( EPhoneViewSetGlobalNotifiersDisabled,
            &globalNotifierParam );
    stateMachine->PhoneEngineInfo()->SetCallTypeCommand( EPECallTypeCSVoice );
    stateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageDial );
    }

// -----------------------------------------------------------
// PhoneCallUtil::DisconnectCallL
// -----------------------------------------------------------
//
EXPORT_C TBool PhoneCallUtil::DisconnectCallL()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    TPhoneCmdParamInteger callIdParam;
    
    ViewCommandHandle()->ExecuteCommand( 
            EPhoneViewGetExpandedBubbleCallId, &callIdParam );
    TBool ret = EFalse;
    if( callIdParam.Integer() > KErrNotFound )
        {
        stateMachine->SetCallId( callIdParam.Integer() );
        if( IsVideoCall( callIdParam.Integer() ) )
            {
            // Video call can be released only after we get response to VT Shutdown Command
            CPhoneMediatorFactory::Instance()->Sender()->IssueCommand( 
                    KMediatorVideoTelephonyDomain,
                             KCatPhoneToVideotelCommands,
                             EVtCmdReleaseDataport,
                   TVersion( KPhoneToVideotelCmdVersionMajor,
                             KPhoneToVideotelCmdVersionMinor,
                             KPhoneToVideotelCmdVersionBuild ),
                   KNullDesC8,
                   CPhoneReleaseCommand::NewL( *stateMachine ) );
            }
        else
            {
            stateMachine->SendPhoneEngineMessage(
                MPEPhoneModel::EPEMessageRelease );
            }
        
        ret = ETrue;
        }

    return ret;
    }


// ---------------------------------------------------------
// PhoneCallUtil::IsVideoCall
// ---------------------------------------------------------
//
EXPORT_C TBool PhoneCallUtil::IsVideoCall( const TInt aCallId )
    {
    if ( aCallId < 0 )
        {
        return EFalse;
        }

    return EPECallTypeVideo == StateMachine()->PhoneEngineInfo()->
                CallType( aCallId );
    }

// ---------------------------------------------------------
// PhoneCallUtil::CallIdByState
// ---------------------------------------------------------
//
EXPORT_C TInt PhoneCallUtil::CallIdByState( const TPEState aCallState )
    {
    TPhoneCmdParamCallStateData callStateData;
    callStateData.SetCallState( aCallState );

    ViewCommandHandle()->ExecuteCommand(
        EPhoneViewGetCallIdByState, &callStateData );

    return callStateData.CallId();
    }

// ---------------------------------------------------------
// PhoneCallUtil::CheckIfCallExists
// ---------------------------------------------------------
//
EXPORT_C TBool PhoneCallUtil::CheckIfCallExists( 
        const TPEState aCallState, const TPECallType aCallType )
    {
    TBool retVal = EFalse;
    TInt callId = CallIdByState( aCallState );

    if ( callId > 0 && 
         aCallType == StateMachine()->PhoneEngineInfo()->
            CallType( callId ) )
        {
        retVal = ETrue;
        }
    
    return retVal;
    }

// -----------------------------------------------------------
// PhoneCallUtil::IsAnyConnectedCalls
// -----------------------------------------------------------
//
EXPORT_C TBool PhoneCallUtil::IsAnyConnectedCalls()
    {
    TBool connectedCall(EFalse);
    MPhoneStateMachine* stateMachine = StateMachine();
    
    if ( stateMachine->PhoneEngineInfo()->CheckIfCallStateExists( 
            EPEStateConnected ) ||
         stateMachine->PhoneEngineInfo()->CheckIfCallStateExists( 
            EPEStateConnecting ) ||
         stateMachine->PhoneEngineInfo()->CheckIfCallStateExists( 
            EPEStateConnectedConference ) )
        {
        connectedCall = ETrue;
        }

    return connectedCall;
    }

// ---------------------------------------------------------
//  PhoneCallUtil::ViewCommandHandle
// ---------------------------------------------------------
//
MPhoneViewCommandHandle* PhoneCallUtil::ViewCommandHandle()
    {   
    return CPhoneStateHandle::Instance()->ViewCommandHandle();
    }

// ---------------------------------------------------------
//  PhoneCallUtil::StateMachine
// ---------------------------------------------------------
//
MPhoneStateMachine* PhoneCallUtil::StateMachine()
    {   
    return CPhoneStateHandle::Instance()->StateMachine();
    }

//  End of File