--- /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 <eikappui.h>
+#include <eikenv.h>
+#include <eikapp.h>
+#include <eikcolib.h>
+#include <gulicon.h>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+#include <StringLoader.h>
+#include <phoneui.rsg>
+#include <pevirtualengine.h>
+#include <data_caging_path_literals.hrh>
+#include <phoneappcommands.hrh>
+#include <phoneui.mbg>
+
+#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<CEikAppUiFactory*>( CEikonEnv::Static()->AppUiFactory() );
+ appUiFactory->SetViewFixedToolbar( iToolbar );
+
+ if( iToolbar )
+ {
+ iToolbar->SetToolbarObserver(
+ static_cast<MAknToolbarObserver*>( 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<MEikCommandObserver*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( aCommandParam );
+
+ iBTAccAvailableFlag = accFlag->Boolean();
+ UpdateToolbar();
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPhoneToolbarController::SetCallInProgressFlag
+// ---------------------------------------------------------
+//
+void CPhoneToolbarController::SetCallInProgressFlag( TPhoneCommandParam* aCommandParam )
+ {
+ TPhoneCmdParamIncallIndicatorData* param =
+ static_cast<TPhoneCmdParamIncallIndicatorData*>( 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
+