phoneapp/phoneuiview/src/cphonedialercontroller.cpp
changeset 0 5f000ab63145
child 9 8871b09be73b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonedialercontroller.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,745 @@
+/*
+* Copyright (c) 2007 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 dialer 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 "cphonedialercontroller.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
+    {
+    TInt iIconIndex;
+    TInt iMaskIndex;
+    TInt iCommandId;    
+    };
+
+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
+            }
+        }; 
+
+const TInt KDialerToolbarButtonCount = 6; 
+const TInt KDialerToolbarButtonKeyRepeatDelay = 300;
+const TInt KDialerToolbarKeyRepeatInterval = 75;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CPhoneDialerController::CPhoneDialerController( 
+                                        CPhoneBubbleWrapper& aBubbleWrapper,
+                                        CCoeEnv& aCoeEnv,
+                                        CPhoneMenuController& aMenuController ):
+    iBubbleWrapper ( aBubbleWrapper ),
+    iCoeEnv ( aCoeEnv ),
+    iMenuController( aMenuController ),
+    iUpdateToolbar( EFalse )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+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  )
+    {
+    CPhoneDialerController* self =  new (ELeave) CPhoneDialerController( 
+                                        aBubbleWrapper
+                                       , aCoeEnv
+                                       , aMenuController );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 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 )
+    {
+    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
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::SetRestrictedDialer( TBool aRestricted )
+    {
+    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'
+// 
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::SetServiceCodeFlagL( 
+    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 );   
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ShowToolbar
+//
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::ShowToolbar()
+    {
+    if ( iToolbar )
+        {
+        if ( iToolbar->IsToolbarDisabled() )
+            {
+            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
+            }
+        iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
+        iToolbar->SetToolbarVisibility( ETrue, EFalse );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// HideToolbar
+//
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::HideToolbar()
+    {
+    if ( iToolbar )
+        {
+        if( iToolbar->IsShown() )
+            {
+            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+            }
+        else if ( iToolbar->IsToolbarDisabled() )
+            {
+            TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
+            iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
+            iToolbar->SetToolbarVisibility( ETrue, EFalse );
+            }
+        }        
+    }
+
+// ---------------------------------------------------------------------------
+// ShowCustomizedDialerL
+//
+// Sets custom dialer buttons visible
+// 
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::ShowCustomizedDialerL( 
+    MPhoneDialerController* aCustomController )
+    {  
+    if ( aCustomController )
+        {
+        // Hide all buttons except clear button 
+        for ( TInt i = 0; i < KNumberOfButtons; i++ )
+            {
+            if ( bArray[ i ].iCommandId != EPhoneDialerCmdClear )
+                {
+                iToolbar->HideItem( bArray[ i ].iCommandId, ETrue, EFalse );
+                }
+            }
+ 
+        aCustomController->InitializeL( *iToolbar );
+        iBubbleWrapper.SetNumberEntryPromptText( 
+            aCustomController->NumberEntryPromptTextL() );
+        aCustomController->ShowButtons( ETrue );
+        }
+    iCustomizedDialer = aCustomController;
+    }
+
+// ---------------------------------------------------------------------------
+// HideCustomizedDialerL
+//
+// Hides custom dialer buttons 
+// 
+// ---------------------------------------------------------------------------
+//
+void CPhoneDialerController::HideCustomizedDialer()
+    {  
+    iCustomizedDialer->ShowButtons( EFalse );
+    iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );              
+    iCustomizedDialer = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// IsCustomizedDialerVisible
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneDialerController::IsCustomizedDialerVisible() const
+    {
+    return ( NULL != iCustomizedDialer );
+    }
+
+// ---------------------------------------------------------------------------
+// CustomizedCbaResourceId
+// ---------------------------------------------------------------------------
+//
+TInt CPhoneDialerController::CustomizedCbaResourceId() const
+    {
+    TInt resourceId = KErrNotFound;
+    if ( iCustomizedDialer )
+        {
+        resourceId = iCustomizedDialer->CbaResourceId();
+        }
+    return resourceId;
+    }
+
+// ---------------------------------------------------------------------------
+// CustomizedMenuResourceId
+// ---------------------------------------------------------------------------
+//
+TInt CPhoneDialerController::CustomizedMenuResourceId() const
+    {
+    TInt resourceId = KErrNotFound;
+    if ( iCustomizedDialer )
+        {
+        resourceId = iCustomizedDialer->MenuResourceId();  
+        }
+    return resourceId;
+    }
+
+// END