diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphonetoolbarcontroller.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,563 @@ +/* +* Copyright (c) 2007 - 2009 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: Handles the updating of toolbar buttons +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tphonecmdparamincallindicatordata.h" +#include "cphonetoolbarcontroller.h" +#include "phoneui.hrh" +#include "phonerssbase.h" +#include "tphonecmdparaminteger.h" +#include "tphonecmdparamboolean.h" +#include "phonelogger.h" + + +_LIT ( KPhoneMifFileName, "phoneui.mif" ); +_LIT( KToolbarButtonEmptyStr, "" ); + +const TInt KNumberOfButtons = 6; +struct SPhoneToolbarButton + { + TInt iIconIndex; + TInt iMaskIndex; + TInt iCommandId; + }; + +const SPhoneToolbarButton bArray[KNumberOfButtons] = + { + { EMbmPhoneuiQgn_indi_dialer_contacts, + EMbmPhoneuiQgn_indi_dialer_contacts_mask, + EPhoneInCallCmdActivatEPhonebook + }, + { EMbmPhoneuiQgn_indi_tb_microphone_mute, + EMbmPhoneuiQgn_indi_tb_microphone_mute_mask, + EPhoneInCallCmdMute + }, + { EMbmPhoneuiQgn_indi_tb_microphone_unmute, + EMbmPhoneuiQgn_indi_tb_microphone_unmute_mask, + EPhoneInCallCmdUnmute + }, + { EMbmPhoneuiQgn_indi_tb_ihf_on, + EMbmPhoneuiQgn_indi_tb_ihf_on_mask, + EPhoneInCallCmdActivateIhf + }, + { EMbmPhoneuiQgn_indi_tb_handset, + EMbmPhoneuiQgn_indi_tb_handset_mask, + EPhoneInCallCmdHandset + }, + { EMbmPhoneuiQgn_indi_tb_bthf, + EMbmPhoneuiQgn_indi_tb_bthf, + EPhoneInCallCmdBtHandsfree + } + }; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CPhoneToolbarController::CPhoneToolbarController( CCoeEnv& aCoeEnv ): + iCoeEnv ( aCoeEnv ) + { + } + +// --------------------------------------------------------------------------- +// Second phase constructor +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::ConstructL() + { + if ( !iToolbar ) + { + iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR ); + } + + CEikAppUiFactory* appUiFactory = + static_cast( CEikonEnv::Static()->AppUiFactory() ); + appUiFactory->SetViewFixedToolbar( iToolbar ); + + if( iToolbar ) + { + iToolbar->SetToolbarObserver( + static_cast( this )); + iToolbar->SetWithSliding( EFalse ); + iToolbar->SetCloseOnAllCommands( EFalse ); + iToolbar->SetFocusing( EFalse ); + + CAknButton* button( NULL ); + + for( TInt i = 0; i < KNumberOfButtons; i++ ) + { + TAknsItemID skinId = GetSkinIdL( bArray[i].iCommandId ); + // Load tooltip text. + HBufC* tooltipText; + GetTooltipTextL ( bArray[i].iCommandId, tooltipText ); + CleanupStack::PushL( tooltipText ); + + button = CreateButtonLC( + bArray[i].iIconIndex, + bArray[i].iMaskIndex, + *tooltipText, + skinId, + bArray[i].iCommandId ); + // Takes ownership of the button + iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 ); + + CleanupStack::Pop( button ); + CleanupStack::PopAndDestroy( tooltipText ); + } + } + } + +// --------------------------------------------------------------------------- +// CreateButtonL +// --------------------------------------------------------------------------- +// +CAknButton* CPhoneToolbarController::CreateButtonLC( + TInt aNormalIconId, + TInt aNormalMaskId, + const TDesC& aTooltipText, + const TAknsItemID& aSkinIconId, + TInt /*aCommand*/ ) + { + TFileName mifPath( KDriveZ ); + mifPath.Append( KDC_APP_BITMAP_DIR ); + mifPath.Append( KPhoneMifFileName ); + + + CAknButton* button = CAknButton::NewLC( + mifPath, + aNormalIconId, + aNormalMaskId, + -1, -1, // dimmed + -1, -1, // pressed + -1, -1, // hover + KToolbarButtonEmptyStr(), + aTooltipText, // help + 0, // flags + 0, // state flags + aSkinIconId ); + + button->SetFocusing( EFalse ); + button->SetBackground( iToolbar ); + + return button; + } + +// --------------------------------------------------------------------------- +// Static constructor +// --------------------------------------------------------------------------- +// +CPhoneToolbarController* CPhoneToolbarController::NewL( CCoeEnv& aCoeEnv ) + { + CPhoneToolbarController* self = new (ELeave) CPhoneToolbarController( aCoeEnv); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CPhoneToolbarController::~CPhoneToolbarController() + { + delete iToolbar; + } + +// --------------------------------------------------------------------------- +// UpdateToolbar +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::UpdateToolbar() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::UpdateToolbar()" ); + // Show 'Mute'/'Unmute' icon + iToolbar->HideItem( EPhoneInCallCmdMute, iMuteFlag, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdUnmute, !iMuteFlag, ETrue ); + + // Show 'Handset'/'Ihf' icon + if ( iWiredAccFlag ) + { + __PHONELOG( EBasic, EPhoneUIView, "CPhoneToolbarController::UpdateToolbar(), wired "); + iToolbar->HideItem( EPhoneInCallCmdHandset, ETrue, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdBtHandsfree, ETrue, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdActivateIhf, EFalse, ETrue ); + } + else if ( iBTAccAvailableFlag && !iBTAccFlag ) + { + __PHONELOG( EBasic, EPhoneUIView, "CPhoneToolbarController::UpdateToolbar(), BT "); + iToolbar->HideItem( EPhoneInCallCmdActivateIhf, ETrue, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdHandset, ETrue, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdBtHandsfree, EFalse, ETrue ); + } + else + { + __PHONELOG( EBasic, EPhoneUIView, "CPhoneToolbarController::UpdateToolbar(), else "); + iToolbar->HideItem( EPhoneInCallCmdHandset, !iIhfFlag, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdActivateIhf, iIhfFlag, EFalse ); + iToolbar->HideItem( EPhoneInCallCmdBtHandsfree, ETrue, ETrue ); + } + } + +// --------------------------------------------------------------------------- +// OfferToolbarEventL +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::OfferToolbarEventL( TInt aCommand ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::OfferToolbarEventL()" ); + // Forward pressed toolbar button to the framework + // so that we can handle it in active state + static_cast( CEikonEnv::Static()->EikAppUi() ) + ->ProcessCommandL( aCommand ); + } + +// --------------------------------------------------------------------------- +// DynInitToolbarL +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::DynInitToolbarL( TInt aResourceId, + CAknToolbar* /*aToolbar*/ ) + { + if ( aResourceId == R_PHONEUI_TOOLBAR ) + { + UpdateToolbar(); + } + } + +// --------------------------------------------------------------------------- +// GetTooltipText +// +// Tooltip texts for toolbar buttons +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) + { + TInt resourceId = 0; + switch( aCommandId ) + { + case EPhoneInCallCmdActivatEPhonebook: + resourceId = R_PHONEUI_TOOLTIP_CONTACTS; + break; + + case EPhoneInCallCmdMute: + resourceId = R_PHONEUI_TOOLTIP_MUTE; + break; + + case EPhoneInCallCmdActivateIhf: + resourceId = R_PHONEUI_TOOLTIP_LOUDSPEAKER; + break; + + case EPhoneInCallCmdUnmute: + resourceId = R_PHONEUI_TOOLTIP_UNMUTE; + break; + + case EPhoneInCallCmdHandset: + resourceId = R_PHONEUI_TOOLTIP_HANDSET; + break; + + case EPhoneInCallCmdBtHandsfree: + resourceId = R_PHONEUI_TOOLTIP_BT_HANDSFREE; + break; + + default: + aText = KNullDesC().Alloc(); + break; + } + + if( resourceId ) + { + aText = StringLoader::LoadL( resourceId, &iCoeEnv ); + } + + } + +// --------------------------------------------------------------------------- +TAknsItemID CPhoneToolbarController::GetSkinIdL( TInt aCommandId ) + { + TAknsItemID skinId = KAknsIIDNone; + switch( aCommandId ) + { + case EPhoneInCallCmdActivatEPhonebook: + skinId = KAknsIIDQgnIndiDialerContacts; + break; + case EPhoneInCallCmdMute: + skinId = KAknsIIDQgnIndiButtonMuteMic; + break; + case EPhoneInCallCmdActivateIhf: + skinId = KAknsIIDQgnIndiButtonLoudspeaker; + break; + case EPhoneInCallCmdUnmute: + skinId = KAknsIIDQgnIndiButtonUnmuteMic; + break; + case EPhoneInCallCmdHandset: + skinId = KAknsIIDQgnIndiButtonHandset; + break; + case EPhoneInCallCmdBtHandsfree: + skinId = KAknsIIDQgnIndiButtonBluetooth; + break; + default: + skinId = KAknsIIDNone; + break; + } + return skinId; + } + +// --------------------------------------------------------------------------- +// ShowToolbar +// +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::ShowToolbar() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::ShowToolbar()" ); + + if ( iToolbar ) + { + if ( iToolbar->IsToolbarDisabled() ) + { + TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); + } + UpdateToolbar(); + iToolbar->SetToolbarVisibility( ETrue, EFalse ); + } + } + +// --------------------------------------------------------------------------- +// HideToolbar +// +// --------------------------------------------------------------------------- +// +void CPhoneToolbarController::HideToolbar() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::HideToolbar()" ); + if ( iToolbar ) + { + if ( iToolbar->IsToolbarDisabled() ) + { + TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse )); + } + iToolbar->SetToolbarVisibility( EFalse, EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneToolbarController::SetMuteFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetMuteFlag( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetMuteFlag()" ); + // Check is the given parameter valid + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* muteFlag = + static_cast( aCommandParam ); + + iMuteFlag = muteFlag->Boolean(); + UpdateToolbar(); + } + } + +// --------------------------------------------------------- +// CPhoneToolbarController::SetIhfFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetIhfFlag( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetIhfFlag()" ); + // Check is the given parameter valid + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* ihfFlag = + static_cast( aCommandParam ); + + iIhfFlag = ihfFlag->Boolean(); + UpdateToolbar(); + } + } + +// --------------------------------------------------------- +// CPhoneMenuController::SetWiredAccFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetWiredAccFlag( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneMenuController::SetWiredAccAvailableFlag()" ); + // Check is the given parameter valid + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* accFlag = + static_cast( aCommandParam ); + + iWiredAccFlag = accFlag->Boolean(); + if ( iCallInProgress ) + { + if ( iWiredAccFlag ) + { + // Dim toolbar button + iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, ETrue, ETrue ); + } + else if ( !iDimActivateIhf ) + { + // Don't undim ActivateIhf button, if it was intended to be dimmed all the time + iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, EFalse, ETrue ); + } + + UpdateToolbar(); + } + } + } +// --------------------------------------------------------- +// CPhoneToolbarController::SetBTAccFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetBTAccFlag( TPhoneCommandParam* aCommandParam ) + { + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* booleanParam = + static_cast( aCommandParam ); + iBTAccFlag = booleanParam->Boolean(); + UpdateToolbar(); + } + } + +// --------------------------------------------------------- +// CPhoneToolbarController::SetBTAccAvailableFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetBTAccAvailableFlag( TPhoneCommandParam* aCommandParam ) + { + // Check is the given parameter valid + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean ) + { + TPhoneCmdParamBoolean* accFlag = + static_cast( aCommandParam ); + + iBTAccAvailableFlag = accFlag->Boolean(); + UpdateToolbar(); + } + } + + +// --------------------------------------------------------- +// CPhoneToolbarController::SetCallInProgressFlag +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetCallInProgressFlag( TPhoneCommandParam* aCommandParam ) + { + TPhoneCmdParamIncallIndicatorData* param = + static_cast( aCommandParam ); + + TInt callState = param->CallState(); + + __PHONELOG1( EBasic, EPhoneUIView, + "CPhoneToolbarController::SetCallInProgressFlag - Current CallState = (%d)", + callState ); + + switch ( callState ) + { + case EPSCTsyCallStateUninitialized: + case EPSCTsyCallStateNone: + { + // No active call in progress. + iCallInProgress = EFalse; + break; + } + default: + { + // Active call in progress. + iCallInProgress = ETrue; + break; + } + } + } + +// --------------------------------------------------------- +// CPhoneToolbarController::DimToolbar +// --------------------------------------------------------- +// +void CPhoneToolbarController::DimToolbar( const TBool aDimmed ) + { + // __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::DimToolbar()" ); + + // Dim/Undim all toolbar buttons + iToolbar->SetItemDimmed( EPhoneInCallCmdMute, aDimmed, ETrue ); + iToolbar->SetItemDimmed( EPhoneInCallCmdUnmute, aDimmed, ETrue ); + iToolbar->SetItemDimmed( EPhoneInCallCmdActivatEPhonebook, aDimmed, ETrue ); + iToolbar->SetItemDimmed( EPhoneInCallCmdHandset, aDimmed, ETrue ); + iToolbar->SetItemDimmed( EPhoneInCallCmdBtHandsfree, aDimmed, ETrue ); + // Don't dim/undim iHF when complete toolbar dimming is changed. + if ( !iWiredAccFlag ) + { + iToolbar->SetItemDimmed( EPhoneInCallCmdActivateIhf, aDimmed, ETrue ); + } + iDimActivateIhf = aDimmed; + } + +// --------------------------------------------------------- +// CPhoneToolbarController::SetToolbarButtonDimmed +// --------------------------------------------------------- +// +void CPhoneToolbarController::SetToolbarButtonDimmed( const TInt aCommandId, const TBool aDimmed ) + { + // __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneToolbarController::SetToolbarButtonDimmed()" ); + + if ( aCommandId == EPhoneInCallCmdActivateIhf ) + { + if ( aDimmed ) + { + // Dim toolbar button + iToolbar->SetItemDimmed( aCommandId, aDimmed, ETrue ); + } + else + { + // Don't undim IHF if wired acc is connected. + if ( !iWiredAccFlag ) + { + iToolbar->SetItemDimmed( aCommandId, aDimmed, ETrue ); + } + } + iDimActivateIhf = aDimmed; + } + else + { + // Dim/undim toolbar button + iToolbar->SetItemDimmed( aCommandId, aDimmed, ETrue ); + } + } + +// END +