--- a/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Tue Feb 02 00:10:04 2010 +0200
+++ b/phoneapp/phoneuiview/src/cphonedialercontroller.cpp Fri Feb 19 22:50:26 2010 +0200
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009, 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"
@@ -21,67 +21,99 @@
#include <eikapp.h>
#include <eikcolib.h>
#include <gulicon.h>
-#include <akntoolbar.h>
-#include <aknbutton.h>
#include <StringLoader.h>
+#include <AknsUtils.h>
#include <phoneui.rsg>
+#include <phoneui.mbg>
#include <pevirtualengine.h>
#include <data_caging_path_literals.hrh>
#include "cphonedialercontroller.h"
+#include "cphoneeasydialingcontroller.h"
#include "cphonebubblewrapper.h"
#include "phoneui.hrh"
-#include "phonerssbase.h"
#include "tphonecmdparaminteger.h"
-#include "cphonemenucontroller.h"
#include "cphonemainresourceresolver.h"
#include "tphonecmdparamcallstatedata.h"
#include "tphonecmdparamboolean.h"
-#include "mphonedialercontroller.h"
_LIT ( KPhoneMifFileName, "phoneui.mif" );
-_LIT( KDialerToolbarButtonEmptyStr, "" );
+
-const TInt KNumberOfButtons = 6;
-struct SPhoneDialerToolbarButton
+/** States for Call button. */
+enum TCallButtonState
+ {
+ ECallButtonCallStateIndex = 0,
+ ECallButtonLogStateIndex,
+ ECallButtonSendStateIndex
+ };
+static const CPhoneDialerController::TLocalButtonData KCallButtonDataTable[] =
{
- TInt iIconIndex;
- TInt iMaskIndex;
- TInt iCommandId;
+ { EPhoneNumberAcqCmdSendCommand,
+ EAknsMinorGenericQgnIndiButtonAnswerWhite,
+ EMbmPhoneuiQgn_indi_button_answer_white,
+ EMbmPhoneuiQgn_indi_button_answer_white_mask,
+ R_PHONEUI_DIALER_TOOLTIP_CALL
+ },
+ { EPhoneDialerCmdLog,
+ EAknsMinorGenericQgnIndiButtonLogdialerWhite,
+ EMbmPhoneuiQgn_indi_button_logdialer_white,
+ EMbmPhoneuiQgn_indi_button_logdialer_white_mask,
+ R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS
+ },
+ { EPhoneNumberAcqCmdSendCommand,
+ EAknsMinorGenericQgnIndiButtonAnswerWhite,
+ EMbmPhoneuiQgn_indi_button_answer_white,
+ EMbmPhoneuiQgn_indi_button_answer_white_mask,
+ R_PHONEUI_DIALER_TOOLTIP_SEND
+ }
};
+static const TInt KCallButtonDataTableCount =
+ sizeof( KCallButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
+
-const SPhoneDialerToolbarButton bArray[KNumberOfButtons] =
- {
- { EMbmPhoneuiQgn_indi_dialer_call_send,
- EMbmPhoneuiQgn_indi_dialer_call_send_mask,
- EPhoneDialerCmdLog
- },
- { EMbmPhoneuiQgn_indi_dialer_call_send,
- EMbmPhoneuiQgn_indi_dialer_call_send_mask,
- EPhoneNumberAcqCmdSendCommand
- },
-
- { EMbmPhoneuiQgn_indi_button_send_dtmf,
- EMbmPhoneuiQgn_indi_button_send_dtmf_mask,
- EPhoneCmdDtmfOk
- },
- { EMbmPhoneuiQgn_indi_dialer_contacts,
- EMbmPhoneuiQgn_indi_dialer_contacts_mask,
- EPhoneDialerCmdContacts
- },
- { EMbmPhoneuiQgn_indi_dialer_add_contacts,
- EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
- EPhoneNumberAcqCmdAddToContacts
- },
- { EMbmPhoneuiQgn_indi_dialer_clear,
- EMbmPhoneuiQgn_indi_dialer_clear_mask,
- EPhoneDialerCmdClear
- }
- };
+/** States for Phonebook button */
+enum TPhonebookButtonState
+ {
+ EPhonebookButtonContactsIndex = 0,
+ EPhonebookButtonAddContactIndex
+ };
+static const CPhoneDialerController::TLocalButtonData KPhonebookButtonDataTable[] =
+ {
+ { EPhoneDialerCmdContacts,
+ EAknsMinorGenericQgnIndiDialerContacts,
+ EMbmPhoneuiQgn_indi_dialer_contacts,
+ EMbmPhoneuiQgn_indi_dialer_contacts_mask,
+ R_PHONEUI_DIALER_TOOLTIP_CONTACTS
+ },
+ { EPhoneNumberAcqCmdAddToContacts,
+ EAknsMinorGenericQgnIndiDialerAddContacts,
+ EMbmPhoneuiQgn_indi_dialer_add_contacts,
+ EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
+ R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS
+ }
+ };
+static const TInt KPhonebookButtonDataTableCount =
+ sizeof( KPhonebookButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
-const TInt KDialerToolbarButtonCount = 6;
-const TInt KDialerToolbarButtonKeyRepeatDelay = 300;
-const TInt KDialerToolbarKeyRepeatInterval = 75;
+
+/** States for Clear button */
+enum TClearButtonState
+ {
+ EClearButtonClearIndex = 0
+ };
+static const CPhoneDialerController::TLocalButtonData KClearButtonDataTable[] =
+ {
+ { EPhoneDialerCmdClear,
+ EAknsMinorGenericQgnIndiDialerClear,
+ EMbmPhoneuiQgn_indi_dialer_clear,
+ EMbmPhoneuiQgn_indi_dialer_clear_mask,
+ R_PHONEUI_DIALER_TOOLTIP_CLEAR
+ }
+ };
+static const TInt KClearButtonDataTableCount =
+ sizeof( KClearButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
+
// ======== MEMBER FUNCTIONS ========
@@ -89,14 +121,11 @@
// Constructor
// ---------------------------------------------------------------------------
//
-CPhoneDialerController::CPhoneDialerController(
- CPhoneBubbleWrapper& aBubbleWrapper,
- CCoeEnv& aCoeEnv,
- CPhoneMenuController& aMenuController ):
- iBubbleWrapper ( aBubbleWrapper ),
- iCoeEnv ( aCoeEnv ),
- iMenuController( aMenuController ),
- iUpdateToolbar( EFalse )
+EXPORT_C CPhoneDialerController::CPhoneDialerController(
+ CPhoneBubbleWrapper* aBubbleWrapper,
+ CCoeEnv& aCoeEnv ):
+ iCoeEnv( aCoeEnv ),
+ iBubbleWrapper( aBubbleWrapper )
{
}
@@ -104,114 +133,20 @@
// Second phase constructor
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::ConstructL()
+EXPORT_C void CPhoneDialerController::ConstructL()
{
-
- iBubbleWrapper.SetNumberEntryObserver( *this );
-
- 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 < KDialerToolbarButtonCount; i++ )
- {
- TAknsItemID skinId = SkinId( bArray[i].iIconIndex );
- // 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 );
- }
-
- // Hide 'Send dtmf' icon
- iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );
- TRAP_IGNORE(iToolbar->DisableToolbarL( ETrue ));
- }
}
// ---------------------------------------------------------------------------
-// CreateButtonL
-// ---------------------------------------------------------------------------
-//
-CAknButton* CPhoneDialerController::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
- KDialerToolbarButtonEmptyStr(),
- aTooltipText, // help
- 0, // flags
- 0, // state flags
- aSkinIconId );
-
- if( aCommand == EPhoneDialerCmdClear )
- {
- button->SetButtonFlags( KAknButtonKeyRepeat );
- // delay 300 ms and repeat 75 ms interval
- button->SetKeyRepeatInterval( KDialerToolbarButtonKeyRepeatDelay,
- KDialerToolbarKeyRepeatInterval );
- }
-
- button->SetFocusing( EFalse );
- button->SetBackground( iToolbar );
-
- return button;
- }
-
-
-// ---------------------------------------------------------------------------
// Static constructor
// ---------------------------------------------------------------------------
//
CPhoneDialerController* CPhoneDialerController::NewL(
- CPhoneBubbleWrapper& aBubbleWrapper,
- CCoeEnv& aCoeEnv,
- CPhoneMenuController& aMenuController )
+ CPhoneBubbleWrapper* aBubbleWrapper,
+ CCoeEnv& aCoeEnv )
{
- CPhoneDialerController* self = new (ELeave) CPhoneDialerController(
- aBubbleWrapper
- , aCoeEnv
- , aMenuController );
+ CPhoneDialerController* self =
+ new (ELeave) CPhoneDialerController( aBubbleWrapper, aCoeEnv );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
@@ -222,197 +157,11 @@
// Destructor
// ---------------------------------------------------------------------------
//
-CPhoneDialerController::~CPhoneDialerController()
- {
- delete iToolbar;
- }
-
-// ---------------------------------------------------------------------------
-// NumberEntryStateChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::NumberEntryStateChanged( TBool aHidePromptText )
- {
- if( aHidePromptText != iPreviousHidePromptTextStatus )
- {
- iPreviousHidePromptTextStatus = aHidePromptText;
- iUpdateToolbar = ETrue;
- }
-
- HandleNumberEntryChanged();
-
- }
-
-// ---------------------------------------------------------------------------
-// HandleNumberEntryChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::HandleNumberEntryChanged()
- {
- if( iUpdateToolbar )
- {
- UpdateToolbar();
- iUpdateToolbar = EFalse;
- }
-
- iBubbleWrapper.HandleNumberEntryChanged();
-
- }
-
-// ---------------------------------------------------------------------------
-// HandleNumberEntryChanged
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::SetNumberEntryChangedCallBack(
- TPhoneCommandParam* aCommandParam )
+EXPORT_C CPhoneDialerController::~CPhoneDialerController()
{
- iBubbleWrapper.SetNumberEntryChangedCallBack( aCommandParam );
-
- }
-
-// ---------------------------------------------------------------------------
-// CreateButtonSetNumberEntryEmpty
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::CreateButtonSetNumberEntryEmpty()
- {
-
- if( iToolbar )
- {
- if( iDtmfDialerVisible )
- {
- // Dim 'Send dtmf'
- iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );
- }
- else if ( iCustomizedDialer )
- {
- iCustomizedDialer->HandleNumberEntryIsEmpty( ETrue );
- }
- else
- {
- // Show 'Logs ' and 'Contacts' items
- iToolbar->HideItem( EPhoneDialerCmdLog, EFalse,EFalse );
- iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );
-
- if ( iRestrictedDialer )
- {
- // Dim 'Logs'
- iToolbar->SetItemDimmed( EPhoneDialerCmdLog, ETrue
- , EFalse );
- // Dim 'Contacts'
- iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue
- , EFalse );
- }
-
- // Hide 'Send' and 'Add to contacts'
- iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue
- , EFalse );
- iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
- , EFalse );
- }
- }
}
// ---------------------------------------------------------------------------
-// CreateButtonSetNumberEntryNotEmpty
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::CreateButtonSetNumberEntryNotEmpty()
- {
- if( iToolbar )
- {
- if( iDtmfDialerVisible )
- {
- // Show 'Send dtmf'
- iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, EFalse, EFalse );
- }
- else if ( iCustomizedDialer )
- {
- iCustomizedDialer->HandleNumberEntryIsEmpty( EFalse );
- }
- else
- {
- // Show 'Send' and 'Add to contacts'
- iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse
- , EFalse );
- iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse
- , EFalse );
-
- if ( iRestrictedDialer )
- {
- // Dim 'Send'
- iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
- , EFalse );
- // Dim 'Add to Contacts'
- iToolbar->SetItemDimmed( EPhoneNumberAcqCmdAddToContacts, ETrue
- , EFalse );
- }
-
- // Hide 'Logs ' and 'Contacts'
- iToolbar->HideItem( EPhoneDialerCmdLog, ETrue,EFalse );
- iToolbar->HideItem( EPhoneDialerCmdContacts, ETrue, EFalse );
-
- TPhoneCmdParamCallStateData callStateData;
- callStateData.SetCallState( EPEStateConnected );
- iBubbleWrapper.GetCallIdByState( &callStateData );
- TInt connected = callStateData.CallId();
-
- //If there is a active emergency call, Send item must be dimmed.
- if ( connected == KEmergencyCallId )
- {
- //Dim Send
- iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
- ,EFalse );
- }
- else
- {
- //UnDim
- iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, EFalse
- ,EFalse );
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// SetDtmfDialerVisibleL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::SetDtmfDialerVisibleL( TBool aVisible )
- {
- iDtmfDialerVisible = aVisible;
-
- if( iDtmfDialerVisible )
- {
- // Load prompt resource text to DTMF dialer.
- TInt resourceId = CPhoneMainResourceResolver::Instance()->
- ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText );
-
- HBufC* loadedText = StringLoader::LoadL( resourceId
- , &iCoeEnv );
-
- iBubbleWrapper.SetNumberEntryPromptText( loadedText->Des() );
-
- delete loadedText;
- }
- else
- {
- // Clear prompt text.
- iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );
-
- // Hide
- iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );
-
- // Show
- iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse, EFalse );
- iToolbar->HideItem( EPhoneDialerCmdLog, EFalse, EFalse );
- iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse, EFalse );
- // Dimming
- iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, EFalse, EFalse );
- }
- }
-
-// ---------------------------------------------------------------------------
// SetRestrictedDialerL
// ---------------------------------------------------------------------------
//
@@ -420,326 +169,272 @@
{
iRestrictedDialer = aRestricted;
}
-// ---------------------------------------------------------------------------
-// UpdateToolbar
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::UpdateToolbar()
- {
-
- TPhoneCmdParamInteger numberEntryCountParam;
- iBubbleWrapper.GetNumberEntryCount(
- (TPhoneCommandParam*) &numberEntryCountParam );
- TInt neLength( numberEntryCountParam.Integer() );
-
- if ( neLength )
- {
- CreateButtonSetNumberEntryNotEmpty();
- iToolbar->SetItemDimmed( EPhoneDialerCmdClear, EFalse, EFalse );
- iToolbar->DrawDeferred();
-
- //Update also options menu via controller
- iMenuController.SetNumberEntryEmptyFlag( EFalse );
- }
-
- else
- {
- CreateButtonSetNumberEntryEmpty();
- iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse );
- iToolbar->DrawDeferred();
-
- //Update also options menu via controller
- iMenuController.SetNumberEntryEmptyFlag( ETrue );
- }
- }
-
-// ---------------------------------------------------------------------------
-// OfferToolbarEventL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::OfferToolbarEventL( TInt aCommand )
- {
- switch ( aCommand )
- {
- case EPhoneDialerCmdClear:
- {
- // Send key event.
- TKeyEvent keyEvent;
- keyEvent.iModifiers = 0;
- keyEvent.iRepeats = 0;
- keyEvent.iCode = EKeyBackspace;
- keyEvent.iScanCode = EStdKeyBackspace;
- iCoeEnv.SimulateKeyEventL( keyEvent, EEventKey );
- }
- break;
- default:
- {
- // Forward pressed toolbar button to the framework
- // so that we can handle it in active state
- static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
- ->ProcessCommandL( aCommand );
- }
- break;
- }
- }
-
-// ---------------------------------------------------------------------------
-// DynInitToolbarL
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::DynInitToolbarL( TInt aResourceId,
- CAknToolbar* /*aToolbar*/ )
- {
- if ( aResourceId == R_PHONEUI_TOOLBAR )
- {
- if ( !iDtmfDialerVisible )
- {
- UpdateToolbar();
- }
- else
- {
- // initialize toolbar for dtmf dialer
- //
- // Show
- iToolbar->HideItem( EPhoneCmdDtmfOk, EFalse, EFalse );
- iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );
-
- // Hide
- iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue, EFalse );
- iToolbar->HideItem( EPhoneDialerCmdLog, ETrue, EFalse );
- iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
- , EFalse );
-
- // Dimming
- iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue, EFalse );
- iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );
- }
- }
- }
-// ---------------------------------------------------------------------------
-// IsDTMFDialerVisible
-// ---------------------------------------------------------------------------
-//
-TBool CPhoneDialerController::IsDTMFDialerVisible() const
- {
- return iDtmfDialerVisible;
- }
-
-
-// ---------------------------------------------------------------------------
-// GetTooltipText
-//
-// Tooltip texts for toolbar buttons
-// ---------------------------------------------------------------------------
-//
-void CPhoneDialerController::GetTooltipTextL( TInt aCommandId, HBufC*& aText )
- {
- TInt resourceId = 0;
- switch( aCommandId )
- {
- case EPhoneDialerCmdLog:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS;
- break;
-
- case EPhoneNumberAcqCmdSendCommand:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
- break;
-
- case EPhoneCmdDtmfOk:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
- break;
-
- case EPhoneDialerCmdContacts:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_CONTACTS;
- break;
-
- case EPhoneNumberAcqCmdAddToContacts:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS;
- break;
-
- case EPhoneDialerCmdClear:
- resourceId = R_PHONEUI_DIALER_TOOLTIP_CLEAR;
- break;
- default:
- aText = KNullDesC().Alloc();
- break;
- }
-
- if( resourceId )
- {
- aText = StringLoader::LoadL( resourceId, &iCoeEnv );
- }
-
- }
// ---------------------------------------------------------------------------
// SetServiceCodeFlagL
//
-// Change call button tooltip text between 'Send' or 'Call'
+// The flag rules wether green key is called "Send" or "Call"
//
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::SetServiceCodeFlagL(
+void CPhoneDialerController::SetServiceCodeFlag(
TPhoneCommandParam* aCommandParam )
{
-
// Check is the given parameter valid
if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
- {
- TInt resourceId = 0;
+ {
TPhoneCmdParamBoolean* serviceCodeFlag =
static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
- // Sanity check
- if( serviceCodeFlag->Boolean() == iServiceCodeFlag )
- {
- return;
- }
- // Get the toolbar button control
- CAknButton* button = static_cast<CAknButton*>
- ( iToolbar->ControlOrNull( EPhoneNumberAcqCmdSendCommand) );
-
- CAknButtonState* state = button->State();
- if ( serviceCodeFlag->Boolean() )
- {
- iServiceCodeFlag = ETrue;
- resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
- }
- else
- {
- iServiceCodeFlag = EFalse;
- resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
- }
-
- if( resourceId )
- {
- // Change text
- HBufC* tooltipText = StringLoader::LoadL( resourceId,
- CCoeEnv::Static() );
- CleanupStack::PushL( tooltipText );
- state->SetHelpTextL( *tooltipText );
- CleanupStack::PopAndDestroy( tooltipText );
- }
+ iServiceCodeFlag = serviceCodeFlag->Boolean();
}
}
// ---------------------------------------------------------------------------
-// ShowToolbar
+// SetEasyDialingController
+// ---------------------------------------------------------------------------
//
+void CPhoneDialerController::SetEasyDialingController(
+ CPhoneEasyDialingController* aController )
+ {
+ iEasyDialingController = aController;
+ }
+
+// ---------------------------------------------------------------------------
+// CbaResourceId
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::ShowToolbar()
+EXPORT_C TInt CPhoneDialerController::CbaResourceId() const
+ {
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// MenuResourceId
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPhoneDialerController::MenuResourceId() const
{
- if ( iToolbar )
- {
- if ( iToolbar->IsToolbarDisabled() )
- {
- TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
- }
- iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
- iToolbar->SetToolbarVisibility( ETrue, EFalse );
- }
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// NumberEntryPromptTextL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPhoneDialerController::NumberEntryPromptTextL()
+ {
+ return KNullDesC;
}
// ---------------------------------------------------------------------------
-// HideToolbar
-//
+// GetButtonData
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::HideToolbar()
+EXPORT_C TInt CPhoneDialerController::GetButtonData( TButtonIndex aIndex,
+ RPointerArray<CButtonData>& aData ) const
{
- if ( iToolbar )
+ TInt err = KErrNone;
+
+ const TLocalButtonData* dataTable = NULL;
+ TInt count = 0;
+
+ // Select correct data table
+ switch ( aIndex )
{
- if( iToolbar->IsShown() )
+ case ECallButton:
+ dataTable = KCallButtonDataTable;
+ count = KCallButtonDataTableCount;
+ break;
+ case EPhonebookButton:
+ dataTable = KPhonebookButtonDataTable;
+ count = KPhonebookButtonDataTableCount;
+ break;
+ case EClearButton:
+ dataTable = KClearButtonDataTable;
+ count = KClearButtonDataTableCount;
+ break;
+ default:
+ break;
+ }
+
+ // Create data from the table
+ if ( dataTable )
+ {
+ // Construct MIF file path
+ TFileName mifPath( KDriveZ );
+ mifPath.Append( KDC_APP_BITMAP_DIR );
+ mifPath.Append( KPhoneMifFileName );
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ for ( TInt i = 0 ; i < count ; ++i )
{
- iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+ CButtonData* btnData = NULL;
+ TRAP( err, btnData = CreateButtonDataL( dataTable[i], skin, mifPath ) );
+ if ( !err )
+ {
+ err = aData.Append( btnData );
+ }
+ if ( err )
+ {
+ // free all memory and stop here if something went wrong
+ delete btnData;
+ aData.ResetAndDestroy();
+ i = count;
+ }
}
- else if ( iToolbar->IsToolbarDisabled() )
- {
- TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
- iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
- iToolbar->SetToolbarVisibility( ETrue, EFalse );
- }
- }
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// SetNumberEntryEmptyIsEmpty
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPhoneDialerController::SetNumberEntryIsEmpty( TBool aEmpty )
+ {
+ iNumberAvailable = !aEmpty;
}
// ---------------------------------------------------------------------------
-// ShowCustomizedDialerL
-//
-// Sets custom dialer buttons visible
-//
+// ButtonState
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::ShowCustomizedDialerL(
- MPhoneDialerController* aCustomController )
- {
- if ( aCustomController )
+EXPORT_C TInt CPhoneDialerController::ButtonState( TButtonIndex aIndex ) const
+ {
+ TInt state = 0;
+ // Figure out correct state for each key
+ switch ( aIndex )
{
- // Hide all buttons except clear button
- for ( TInt i = 0; i < KNumberOfButtons; i++ )
+ case ECallButton:
{
- if ( bArray[ i ].iCommandId != EPhoneDialerCmdClear )
+ state = ECallButtonCallStateIndex;
+ if ( !iNumberAvailable )
+ {
+ state = ECallButtonLogStateIndex;
+ }
+ else if ( iServiceCodeFlag )
{
- iToolbar->HideItem( bArray[ i ].iCommandId, ETrue, EFalse );
+ // Set "Send" state unless Easy dialing is focused
+ TBool edFocused = EFalse;
+ if ( iEasyDialingController )
+ {
+ TInt commandResponse( EPhoneViewResponseFailed );
+ TRAP_IGNORE( commandResponse = iEasyDialingController->HandleCommandL(
+ EPhoneViewGetEasyDialingInFocusStatus) );
+ edFocused = ( commandResponse == EPhoneViewResponseSuccess );
+ }
+ if ( !edFocused )
+ {
+ state = ECallButtonSendStateIndex;
+ }
}
}
-
- aCustomController->InitializeL( *iToolbar );
- iBubbleWrapper.SetNumberEntryPromptText(
- aCustomController->NumberEntryPromptTextL() );
- aCustomController->ShowButtons( ETrue );
+ break;
+ case EPhonebookButton:
+ {
+ if ( !iNumberAvailable )
+ {
+ state = EPhonebookButtonContactsIndex;
+ }
+ else
+ {
+ state = EPhonebookButtonAddContactIndex;
+ }
+ }
+ break;
+ case EClearButton:
+ {
+ state = EClearButtonClearIndex;
+ }
+ break;
+ default:
+ break;
}
- iCustomizedDialer = aCustomController;
+ return state;
}
// ---------------------------------------------------------------------------
-// HideCustomizedDialerL
-//
-// Hides custom dialer buttons
-//
+// ButtonDimmed
// ---------------------------------------------------------------------------
//
-void CPhoneDialerController::HideCustomizedDialer()
- {
- iCustomizedDialer->ShowButtons( EFalse );
- iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );
- iCustomizedDialer = NULL;
+EXPORT_C TBool CPhoneDialerController::ButtonDimmed( TButtonIndex aIndex ) const
+ {
+ TBool dimmed = EFalse;
+ // Figure out correct state for each key
+ switch ( aIndex )
+ {
+ case ECallButton:
+ dimmed = iRestrictedDialer;
+ if ( !dimmed )
+ {
+ // Prevent calling but don't prevent log during emergency call
+ dimmed = ( iNumberAvailable && EmergencyCallActive() );
+ }
+ break;
+ case EPhonebookButton:
+ dimmed = iRestrictedDialer;
+ break;
+ case EClearButton:
+ dimmed = !iNumberAvailable;
+ break;
+ default:
+ break;
+ }
+ return dimmed;
}
// ---------------------------------------------------------------------------
-// IsCustomizedDialerVisible
+// EasyDialingAllowed
// ---------------------------------------------------------------------------
//
-TBool CPhoneDialerController::IsCustomizedDialerVisible() const
+EXPORT_C TBool CPhoneDialerController::EasyDialingAllowed() const
{
- return ( NULL != iCustomizedDialer );
+ return !iRestrictedDialer && !EmergencyCallActive();
}
// ---------------------------------------------------------------------------
-// CustomizedCbaResourceId
+// EmergencyCallActive
// ---------------------------------------------------------------------------
//
-TInt CPhoneDialerController::CustomizedCbaResourceId() const
+EXPORT_C TBool CPhoneDialerController::EmergencyCallActive() const
{
- TInt resourceId = KErrNotFound;
- if ( iCustomizedDialer )
+ TBool ret = EFalse;
+ if ( iBubbleWrapper )
{
- resourceId = iCustomizedDialer->CbaResourceId();
+ TPhoneCmdParamCallStateData callStateData;
+ callStateData.SetCallState( EPEStateConnected );
+ iBubbleWrapper->GetCallIdByState( &callStateData );
+ TInt connected = callStateData.CallId();
+ ret = ( connected == KEmergencyCallId );
}
- return resourceId;
+ return ret;
}
// ---------------------------------------------------------------------------
-// CustomizedMenuResourceId
+// CreateButtonDataL
// ---------------------------------------------------------------------------
//
-TInt CPhoneDialerController::CustomizedMenuResourceId() const
+MPhoneDialerController::CButtonData* CPhoneDialerController::CreateButtonDataL(
+ const TLocalButtonData& aSourceData,
+ MAknsSkinInstance* aSkin,
+ const TDesC& aMifFile ) const
{
- TInt resourceId = KErrNotFound;
- if ( iCustomizedDialer )
- {
- resourceId = iCustomizedDialer->MenuResourceId();
- }
- return resourceId;
+ // Create tooltip text
+ HBufC* tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId );
+
+ // Create icon
+ TAknsItemID skinId = { EAknsMajorGeneric, aSourceData.iSkinItemIdMinor };
+ CGulIcon* icon = AknsUtils::CreateGulIconL( aSkin, skinId, aMifFile,
+ aSourceData.iBitmapIndex, aSourceData.iBitmapMaskIndex );
+ CleanupStack::PushL( icon );
+
+ // Create button data object
+ CButtonData* buttonData =
+ new ( ELeave ) CButtonData( aSourceData.iCommandId, icon, tooltip );
+ CleanupStack::Pop( icon );
+ CleanupStack::Pop( tooltip );
+
+ return buttonData;
}
// END