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

/*
* 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:  Acessory and Bluetooth handler.
*
*/


// INCLUDE FILES
#include    "phoneaudioutil.h"
#include    "phonenoteutil.h"
#include    "cphoneaccessorybthandler.h"
#include    "cphonecenrepproxy.h"
#include    "cphonemainresourceresolver.h"
#include    "mphoneneclearedhandler.h"
#include    "mphonestatemachine.h"
#include    "mphoneviewcommandhandle.h"
#include    "cphonestatehandle.h"
#include    "tphonecmdparamboolean.h"
#include    "tphonecmdparamaudiooutput.h"
#include    "cphonebtaadisconnecthandler.h"
#include    "phonerssbase.h"
#include    "tphonecmdparaminteger.h"
#include    "tphonecmdparamaudioavailability.h"

#include    <mpeengineinfo.h>

// CONSTANTS

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

// -----------------------------------------------------------
// PhoneAudioUtil::HandleAudioMuteChangedL
// Default handling for EPEMessageAudioMuteChanged message
// (other items were commented in a header).
// -----------------------------------------------------------
//
void PhoneAudioUtil::HandleAudioMuteChangedL()
    {
    TPhoneCmdParamBoolean booleanParam;
    const TBool audioMute = StateMachine()->PhoneEngineInfo()->AudioMute();
    booleanParam.SetBoolean( audioMute );
    ViewCommandHandle()->ExecuteCommandL( EPhoneViewActivateMuteUIChanges,
        &booleanParam );
    }

// ---------------------------------------------------------
// PhoneAudioUtil::HandleAudioOutputChangedL
// ---------------------------------------------------------
//
void PhoneAudioUtil::HandleAudioOutputChangedL()
    {   
    MPhoneViewCommandHandle* viewCommandHandle = 
            ViewCommandHandle();

    MPhoneStateMachine* stateMachine = StateMachine();
    
    TPhoneCmdParamAudioOutput outputParam;
    const TPEAudioOutput audioOutput =
            stateMachine->PhoneEngineInfo()->AudioOutput();
    outputParam.SetAudioOutput( audioOutput );

    viewCommandHandle->ExecuteCommandL( EPhoneViewActivateAudioPathUIChanges,
        &outputParam );

    // Previous Output
    TPEPhoneAudioRouteParameters RouteParameters = stateMachine->
        PhoneEngineInfo()->RouteParameters();
    const TPEAudioOutput previousOutput =
        RouteParameters.iPreviousOutput;

    TBool btAvailable = stateMachine->PhoneEngineInfo()->AudioOutputAvailable(
            EPEBTAudioAccessory );
    // Show note or BT disconnect handler
    if ( audioOutput != EPENotActive &&
         previousOutput == EPEBTAudioAccessory &&
         !btAvailable )
        {
        CPhoneBtaaDisconnectHandler::InstanceL()->HandleConnectionLostL();
        }
    else if ( audioOutput == EPEBTAudioAccessory && 
            previousOutput != EPEBTAudioAccessory &&
            btAvailable )
        {
        CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC(
                viewCommandHandle, stateMachine );
        bt->ShowBTActivatedL();
        CleanupStack::PopAndDestroy( bt );
        }
    else if ( audioOutput == EPENotActive &&
              CPhoneBtaaDisconnectHandler::InstanceL()->IsQuery() )
        {
        CPhoneBtaaDisconnectHandler::InstanceL()->Cancel();
        }
    else if ( audioOutput == EPELoudspeaker )
        {
        viewCommandHandle->ExecuteCommandL( EPhoneViewPlayHandsFreeActivatedTone );
        }
    }

// -----------------------------------------------------------
// PhoneAudioUtil::DecreaseAudioVolume()
// -----------------------------------------------------------
//
void PhoneAudioUtil::DecreaseAudioVolumeL()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    TPEAudioOutput output( stateMachine->PhoneEngineInfo()->AudioOutput() );

    if( output == EPETTY )
        {
        PhoneNoteUtil::SendGlobalInfoNoteL( 
                EPhoneNoteTTYNoAudioControl, ETrue );
        }
    else
        {
        TInt audioVolume( stateMachine->PhoneEngineInfo()->AudioVolume() );
        audioVolume--;
        ChangeAudioVolumeL( audioVolume, ETrue );
        }
    }

// -----------------------------------------------------------
// PhoneAudioUtil::IncreaceAudioVolume()
// -----------------------------------------------------------
//
void PhoneAudioUtil::IncreaseAudioVolumeL()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    TPEAudioOutput output( stateMachine->PhoneEngineInfo()->AudioOutput() );

    if( output == EPETTY )
        {
        PhoneNoteUtil::SendGlobalInfoNoteL( 
                EPhoneNoteTTYNoAudioControl, ETrue );
        }
    else
        {
        TInt audioVolume( stateMachine->PhoneEngineInfo()->AudioVolume() );
        audioVolume++;
        ChangeAudioVolumeL( audioVolume, ETrue );
        }
    }

// -----------------------------------------------------------
// PhoneAudioUtil::ChangeAudioVolumeL()
// -----------------------------------------------------------
//
void PhoneAudioUtil::ChangeAudioVolumeL( TInt aLevel, TBool aUpdateControl )
    {
    TInt valueToControl = aLevel;
    // sets value between 1 -10
    if ( aLevel>=KPhoneVolumeMinValue && aLevel<=KPhoneVolumeMaxValue )
        {
        MPhoneStateMachine* stateMachine = StateMachine();
        
        stateMachine->PhoneEngineInfo()->SetAudioVolumeCommand( aLevel );
        // Syncronizes audio volume level between engine and ui
        // causes EPEMessageAudioVolumeChanged message to phoneUI
        stateMachine->SendPhoneEngineMessage(
            MPEPhoneModel::EPEMessageSetAudioVolume );
        }
        
    if ( aUpdateControl )
        {
        // Update the volume display.
        // Upper max (11) and under min (-1)
        // values are also updated to volume popup.
        TPhoneCmdParamInteger volumeParam;
        volumeParam.SetInteger( valueToControl );
        ViewCommandHandle()->ExecuteCommandL(
            EPhoneViewSetNaviPaneAudioVolume,
            &volumeParam );
        }
    }

// -----------------------------------------------------------
// PhoneAudioUtil::GetVolumeLevel
// -----------------------------------------------------------
//
TInt PhoneAudioUtil::GetVolumeLevel()
    {
    TPhoneCmdParamInteger integerParam;
    ViewCommandHandle()->ExecuteCommand( EPhoneViewGetAudioVolumeLevel,
                                         &integerParam );
    return integerParam.Integer();
    }

// -----------------------------------------------------------
// PhoneAudioUtil::HandleAudioAvailableOutputChangedL
// Default handling for EPEMessageAvailableAudioOutputsChanged message
// (other items were commented in a header).
// -----------------------------------------------------------
//
void PhoneAudioUtil::HandleAudioAvailableOutputChangedL()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    TPhoneCmdParamAudioAvailability outputParam;
    // Output
    const TPEAudioOutput audioOutput =
            stateMachine->PhoneEngineInfo()->AudioOutput();
    // BT availability
    TBool btAvailable = stateMachine->PhoneEngineInfo()->
            AudioOutputAvailable( EPEBTAudioAccessory );
    outputParam.SetBTAccAvailable( btAvailable );
    // Wired availability
    TBool wiredAvailable = stateMachine->PhoneEngineInfo()->
            AudioOutputAvailable( EPEWiredAudioAccessory );
    outputParam.SetWiredAccAvailable( wiredAvailable );
    // BTA disconnect handler check
    if( btAvailable )
        {
        CPhoneBtaaDisconnectHandler::InstanceL()->Cancel();
        }
    
    ViewCommandHandle()->ExecuteCommandL( 
            EPhoneViewActivateAudioAvailabilityUIChanges,
            &outputParam );
    }

// -----------------------------------------------------------
// PhoneAudioUtil::ToggleMute
// -----------------------------------------------------------
//
void PhoneAudioUtil::ToggleMute()
    {
    MPhoneStateMachine* stateMachine = StateMachine();
    stateMachine->PhoneEngineInfo()->AudioMute() ?
        stateMachine->PhoneEngineInfo()->SetAudioMuteCommand( EFalse ):
        stateMachine->PhoneEngineInfo()->SetAudioMuteCommand( ETrue );
    
    stateMachine->SendPhoneEngineMessage(
        MPEPhoneModel::EPEMessageSetAudioMute );
    }

// ---------------------------------------------------------
// PhoneAudioUtil::SetHandsfreeModeL
// ---------------------------------------------------------
//
void PhoneAudioUtil::SetHandsfreeModeL( TBool aHandsfreeMode )
    {
    CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC(
            ViewCommandHandle(), StateMachine() );
    if ( !bt->SetHandsfreeModeL( aHandsfreeMode ))
        {
        PhoneNoteUtil::SendGlobalErrorNoteL( 
                EPhoneNoteTextNotAllowed, ETrue );
        }
    CleanupStack::PopAndDestroy( bt );
    }

// ---------------------------------------------------------
// PhoneAudioUtil::SetBTHandsfreeModeL
// ---------------------------------------------------------
//
void PhoneAudioUtil::SetBtHandsfreeModeL( TBool aHandsfreeMode )
    {
    CPhoneAccessoryBTHandler* bt = CPhoneAccessoryBTHandler::NewLC(
            ViewCommandHandle(), StateMachine() );
    if ( !bt->SetBTHandsfreeModeL( aHandsfreeMode ))
        {
        PhoneNoteUtil::SendGlobalErrorNoteL( 
                EPhoneNoteTextNotAllowed, ETrue );
        }
    CleanupStack::PopAndDestroy( bt );
    }

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

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

//  End of File