phoneapp/phoneuiview/src/cphonedialercontroller.cpp
branchRCL_3
changeset 3 8871b09be73b
parent 0 5f000ab63145
child 4 24062c24fe38
equal deleted inserted replaced
2:c84cf270c54f 3:8871b09be73b
     1 /*
     1 /*
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies). 
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    19 #include <eikappui.h>
    19 #include <eikappui.h>
    20 #include <eikenv.h>
    20 #include <eikenv.h>
    21 #include <eikapp.h>
    21 #include <eikapp.h>
    22 #include <eikcolib.h>
    22 #include <eikcolib.h>
    23 #include <gulicon.h>
    23 #include <gulicon.h>
    24 #include <akntoolbar.h>
       
    25 #include <aknbutton.h>
       
    26 #include <StringLoader.h>
    24 #include <StringLoader.h>
       
    25 #include <AknsUtils.h>
    27 #include <phoneui.rsg>
    26 #include <phoneui.rsg>
       
    27 #include <phoneui.mbg>
    28 #include <pevirtualengine.h>
    28 #include <pevirtualengine.h>
    29 #include <data_caging_path_literals.hrh>
    29 #include <data_caging_path_literals.hrh>
    30 
    30 
    31 #include "cphonedialercontroller.h"
    31 #include "cphonedialercontroller.h"
       
    32 #include "cphoneeasydialingcontroller.h"
    32 #include "cphonebubblewrapper.h"
    33 #include "cphonebubblewrapper.h"
    33 #include "phoneui.hrh"
    34 #include "phoneui.hrh"
    34 #include "phonerssbase.h"
       
    35 #include "tphonecmdparaminteger.h"
    35 #include "tphonecmdparaminteger.h"
    36 #include "cphonemenucontroller.h"
       
    37 #include "cphonemainresourceresolver.h"
    36 #include "cphonemainresourceresolver.h"
    38 #include "tphonecmdparamcallstatedata.h"
    37 #include "tphonecmdparamcallstatedata.h"
    39 #include "tphonecmdparamboolean.h"
    38 #include "tphonecmdparamboolean.h"
    40 #include "mphonedialercontroller.h"
       
    41 
    39 
    42 _LIT ( KPhoneMifFileName, "phoneui.mif" );
    40 _LIT ( KPhoneMifFileName, "phoneui.mif" );
    43 _LIT( KDialerToolbarButtonEmptyStr, "" );
    41 
    44 
    42 
    45 const TInt KNumberOfButtons = 6;
    43 /** States for Call button. */
    46 struct SPhoneDialerToolbarButton
    44 enum TCallButtonState
    47     {
    45     {
    48     TInt iIconIndex;
    46     ECallButtonCallStateIndex = 0,
    49     TInt iMaskIndex;
    47     ECallButtonLogStateIndex,
    50     TInt iCommandId;    
    48     ECallButtonSendStateIndex
    51     };
    49     };
    52 
    50 static const CPhoneDialerController::TLocalButtonData KCallButtonDataTable[] =
    53 const SPhoneDialerToolbarButton bArray[KNumberOfButtons] =
    51     {
    54         {  
    52         { EPhoneNumberAcqCmdSendCommand, 
    55             { EMbmPhoneuiQgn_indi_dialer_call_send,
    53           EAknsMinorGenericQgnIndiButtonAnswerWhite,
    56               EMbmPhoneuiQgn_indi_dialer_call_send_mask,
    54           EMbmPhoneuiQgn_indi_button_answer_white, 
    57               EPhoneDialerCmdLog
    55           EMbmPhoneuiQgn_indi_button_answer_white_mask,
    58             },
    56           R_PHONEUI_DIALER_TOOLTIP_CALL
    59             { EMbmPhoneuiQgn_indi_dialer_call_send,
    57         },
    60               EMbmPhoneuiQgn_indi_dialer_call_send_mask,
    58         { EPhoneDialerCmdLog,
    61               EPhoneNumberAcqCmdSendCommand
    59           EAknsMinorGenericQgnIndiButtonLogdialerWhite,
    62             },        
    60           EMbmPhoneuiQgn_indi_button_logdialer_white,
    63             
    61           EMbmPhoneuiQgn_indi_button_logdialer_white_mask,
    64             { EMbmPhoneuiQgn_indi_button_send_dtmf,
    62           R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS
    65               EMbmPhoneuiQgn_indi_button_send_dtmf_mask,
    63         },
    66               EPhoneCmdDtmfOk
    64         { EPhoneNumberAcqCmdSendCommand, 
    67             },               
    65           EAknsMinorGenericQgnIndiButtonAnswerWhite,
    68             { EMbmPhoneuiQgn_indi_dialer_contacts,
    66           EMbmPhoneuiQgn_indi_button_answer_white, 
    69               EMbmPhoneuiQgn_indi_dialer_contacts_mask,
    67           EMbmPhoneuiQgn_indi_button_answer_white_mask,
    70               EPhoneDialerCmdContacts
    68           R_PHONEUI_DIALER_TOOLTIP_SEND
    71             },
    69         }
    72             { EMbmPhoneuiQgn_indi_dialer_add_contacts,
    70     };
    73               EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
    71 static const TInt KCallButtonDataTableCount = 
    74               EPhoneNumberAcqCmdAddToContacts
    72     sizeof( KCallButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
    75             },            
    73 
    76             { EMbmPhoneuiQgn_indi_dialer_clear,
    74 
    77               EMbmPhoneuiQgn_indi_dialer_clear_mask,
    75 /** States for Phonebook button */
    78               EPhoneDialerCmdClear
    76 enum TPhonebookButtonState
    79             }
    77     {
    80         }; 
    78     EPhonebookButtonContactsIndex = 0,
    81 
    79     EPhonebookButtonAddContactIndex
    82 const TInt KDialerToolbarButtonCount = 6; 
    80     };
    83 const TInt KDialerToolbarButtonKeyRepeatDelay = 300;
    81 static const CPhoneDialerController::TLocalButtonData KPhonebookButtonDataTable[] =
    84 const TInt KDialerToolbarKeyRepeatInterval = 75;
    82     {
       
    83         { EPhoneDialerCmdContacts,
       
    84           EAknsMinorGenericQgnIndiDialerContacts,
       
    85           EMbmPhoneuiQgn_indi_dialer_contacts,
       
    86           EMbmPhoneuiQgn_indi_dialer_contacts_mask,
       
    87           R_PHONEUI_DIALER_TOOLTIP_CONTACTS
       
    88         },
       
    89         { EPhoneNumberAcqCmdAddToContacts,
       
    90           EAknsMinorGenericQgnIndiDialerAddContacts,      
       
    91           EMbmPhoneuiQgn_indi_dialer_add_contacts,
       
    92           EMbmPhoneuiQgn_indi_dialer_add_contacts_mask,
       
    93           R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS
       
    94         }
       
    95     };
       
    96 static const TInt KPhonebookButtonDataTableCount = 
       
    97     sizeof( KPhonebookButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
       
    98 
       
    99 
       
   100 /** States for Clear button */
       
   101 enum TClearButtonState
       
   102     {
       
   103     EClearButtonClearIndex = 0
       
   104     };
       
   105 static const CPhoneDialerController::TLocalButtonData KClearButtonDataTable[] =
       
   106     {
       
   107         { EPhoneDialerCmdClear,
       
   108           EAknsMinorGenericQgnIndiDialerClear,
       
   109           EMbmPhoneuiQgn_indi_dialer_clear,
       
   110           EMbmPhoneuiQgn_indi_dialer_clear_mask,
       
   111           R_PHONEUI_DIALER_TOOLTIP_CLEAR
       
   112         }
       
   113     };
       
   114 static const TInt KClearButtonDataTableCount = 
       
   115     sizeof( KClearButtonDataTable ) / sizeof( CPhoneDialerController::TLocalButtonData );
       
   116 
    85 
   117 
    86 // ======== MEMBER FUNCTIONS ========
   118 // ======== MEMBER FUNCTIONS ========
    87 
   119 
    88 // ---------------------------------------------------------------------------
   120 // ---------------------------------------------------------------------------
    89 // Constructor
   121 // Constructor
    90 // ---------------------------------------------------------------------------
   122 // ---------------------------------------------------------------------------
    91 //
   123 //
    92 CPhoneDialerController::CPhoneDialerController( 
   124 EXPORT_C CPhoneDialerController::CPhoneDialerController( 
    93                                         CPhoneBubbleWrapper& aBubbleWrapper,
   125                                         CPhoneBubbleWrapper* aBubbleWrapper,
    94                                         CCoeEnv& aCoeEnv,
   126                                         CCoeEnv& aCoeEnv ):
    95                                         CPhoneMenuController& aMenuController ):
   127     iCoeEnv( aCoeEnv ),
    96     iBubbleWrapper ( aBubbleWrapper ),
   128     iBubbleWrapper( aBubbleWrapper )
    97     iCoeEnv ( aCoeEnv ),
       
    98     iMenuController( aMenuController ),
       
    99     iUpdateToolbar( EFalse )
       
   100     {
   129     {
   101     }
   130     }
   102 
   131 
   103 // ---------------------------------------------------------------------------
   132 // ---------------------------------------------------------------------------
   104 // Second phase constructor
   133 // Second phase constructor
   105 // ---------------------------------------------------------------------------
   134 // ---------------------------------------------------------------------------
   106 //
   135 //
   107 void CPhoneDialerController::ConstructL()
   136 EXPORT_C void CPhoneDialerController::ConstructL()
   108     {
   137     {
   109    
   138     }
   110     iBubbleWrapper.SetNumberEntryObserver( *this );
       
   111    
       
   112     if ( !iToolbar )
       
   113         {
       
   114         iToolbar = CAknToolbar::NewL( R_PHONEUI_TOOLBAR );
       
   115         }
       
   116   
       
   117     CEikAppUiFactory* appUiFactory =
       
   118         static_cast<CEikAppUiFactory*>( CEikonEnv::Static()->AppUiFactory() );  
       
   119     appUiFactory->SetViewFixedToolbar( iToolbar );
       
   120     
       
   121     if( iToolbar )
       
   122         {
       
   123         iToolbar->SetToolbarObserver( 
       
   124                         static_cast<MAknToolbarObserver*>( this ));  
       
   125         iToolbar->SetWithSliding( EFalse );
       
   126         iToolbar->SetCloseOnAllCommands( EFalse );
       
   127         iToolbar->SetFocusing( EFalse );
       
   128         
       
   129         CAknButton* button( NULL );
       
   130 
       
   131         for( TInt i = 0; i < KDialerToolbarButtonCount; i++ )
       
   132             {
       
   133             TAknsItemID skinId = SkinId( bArray[i].iIconIndex );
       
   134             // Load tooltip text.
       
   135             HBufC* tooltipText;
       
   136             GetTooltipTextL ( bArray[i].iCommandId, tooltipText );  
       
   137             CleanupStack::PushL( tooltipText );      
       
   138          
       
   139             button = CreateButtonLC(
       
   140                 bArray[i].iIconIndex, 
       
   141                 bArray[i].iMaskIndex, 
       
   142                 *tooltipText, 
       
   143                 skinId,
       
   144                 bArray[i].iCommandId );
       
   145             // Takes ownership of the button                    
       
   146             iToolbar->AddItemL( button, EAknCtButton, bArray[i].iCommandId,0 );
       
   147            
       
   148             CleanupStack::Pop( button );
       
   149             CleanupStack::PopAndDestroy( tooltipText );
       
   150             }
       
   151        
       
   152         // Hide 'Send dtmf' icon
       
   153         iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );
       
   154         TRAP_IGNORE(iToolbar->DisableToolbarL( ETrue ));
       
   155         }
       
   156     }
       
   157     
       
   158 // ---------------------------------------------------------------------------
       
   159 // CreateButtonL
       
   160 // ---------------------------------------------------------------------------
       
   161 //
       
   162 CAknButton* CPhoneDialerController::CreateButtonLC( 
       
   163     TInt aNormalIconId,
       
   164     TInt aNormalMaskId,
       
   165     const TDesC& aTooltipText,
       
   166     const TAknsItemID& aSkinIconId,
       
   167     TInt aCommand )
       
   168     {
       
   169     TFileName mifPath( KDriveZ );
       
   170     mifPath.Append( KDC_APP_BITMAP_DIR );
       
   171     mifPath.Append( KPhoneMifFileName );
       
   172 
       
   173    
       
   174     CAknButton* button = CAknButton::NewLC( 
       
   175         mifPath,
       
   176         aNormalIconId,
       
   177         aNormalMaskId,
       
   178         -1, -1, // dimmed
       
   179         -1, -1, // pressed
       
   180         -1, -1, // hover
       
   181         KDialerToolbarButtonEmptyStr(),
       
   182         aTooltipText, // help
       
   183         0, // flags
       
   184         0, // state flags
       
   185         aSkinIconId );
       
   186                                
       
   187     if( aCommand == EPhoneDialerCmdClear )
       
   188         {
       
   189         button->SetButtonFlags( KAknButtonKeyRepeat );
       
   190         // delay 300 ms and repeat 75 ms interval   
       
   191         button->SetKeyRepeatInterval( KDialerToolbarButtonKeyRepeatDelay,
       
   192                                       KDialerToolbarKeyRepeatInterval );
       
   193         }
       
   194                                      
       
   195     button->SetFocusing( EFalse );
       
   196     button->SetBackground( iToolbar );
       
   197 
       
   198     return button;
       
   199     }
       
   200     
       
   201     
   139     
   202 // ---------------------------------------------------------------------------
   140 // ---------------------------------------------------------------------------
   203 // Static constructor
   141 // Static constructor
   204 // ---------------------------------------------------------------------------
   142 // ---------------------------------------------------------------------------
   205 //
   143 //
   206 CPhoneDialerController* CPhoneDialerController::NewL( 
   144 CPhoneDialerController* CPhoneDialerController::NewL( 
   207                                     CPhoneBubbleWrapper& aBubbleWrapper,
   145                                     CPhoneBubbleWrapper* aBubbleWrapper,
   208                                     CCoeEnv& aCoeEnv,
   146                                     CCoeEnv& aCoeEnv )
   209                                     CPhoneMenuController& aMenuController  )
   147     {
   210     {
   148     CPhoneDialerController* self = 
   211     CPhoneDialerController* self =  new (ELeave) CPhoneDialerController( 
   149         new (ELeave) CPhoneDialerController( aBubbleWrapper, aCoeEnv );
   212                                         aBubbleWrapper
       
   213                                        , aCoeEnv
       
   214                                        , aMenuController );
       
   215     CleanupStack::PushL( self );
   150     CleanupStack::PushL( self );
   216     self->ConstructL();
   151     self->ConstructL();
   217     CleanupStack::Pop( self );
   152     CleanupStack::Pop( self );
   218     return self;
   153     return self;
   219     }
   154     }
   220 
   155 
   221 // ---------------------------------------------------------------------------
   156 // ---------------------------------------------------------------------------
   222 // Destructor
   157 // Destructor
   223 // ---------------------------------------------------------------------------
   158 // ---------------------------------------------------------------------------
   224 //
   159 //
   225 CPhoneDialerController::~CPhoneDialerController()
   160 EXPORT_C CPhoneDialerController::~CPhoneDialerController()
   226     {
   161     {
   227     delete iToolbar;
   162     }
   228     }
   163 
   229 
       
   230 // ---------------------------------------------------------------------------
       
   231 // NumberEntryStateChanged
       
   232 // ---------------------------------------------------------------------------
       
   233 //
       
   234 void CPhoneDialerController::NumberEntryStateChanged( TBool aHidePromptText )
       
   235     {
       
   236     if( aHidePromptText != iPreviousHidePromptTextStatus )
       
   237         {
       
   238         iPreviousHidePromptTextStatus = aHidePromptText; 
       
   239         iUpdateToolbar = ETrue;
       
   240         }
       
   241     
       
   242     HandleNumberEntryChanged();
       
   243     
       
   244     }
       
   245 
       
   246 // ---------------------------------------------------------------------------
       
   247 // HandleNumberEntryChanged
       
   248 // ---------------------------------------------------------------------------
       
   249 //
       
   250 void CPhoneDialerController::HandleNumberEntryChanged()
       
   251     {
       
   252     if( iUpdateToolbar )
       
   253         {
       
   254         UpdateToolbar();
       
   255         iUpdateToolbar = EFalse;        
       
   256         }
       
   257     
       
   258     iBubbleWrapper.HandleNumberEntryChanged();
       
   259     
       
   260     } 
       
   261 
       
   262 // ---------------------------------------------------------------------------
       
   263 // HandleNumberEntryChanged
       
   264 // ---------------------------------------------------------------------------
       
   265 //
       
   266 void CPhoneDialerController::SetNumberEntryChangedCallBack( 
       
   267         TPhoneCommandParam* aCommandParam )
       
   268     {
       
   269     iBubbleWrapper.SetNumberEntryChangedCallBack( aCommandParam );
       
   270     
       
   271     }
       
   272      
       
   273 // ---------------------------------------------------------------------------
       
   274 // CreateButtonSetNumberEntryEmpty
       
   275 // ---------------------------------------------------------------------------
       
   276 //
       
   277 void CPhoneDialerController::CreateButtonSetNumberEntryEmpty()
       
   278     {
       
   279     
       
   280     if( iToolbar )
       
   281         {
       
   282         if( iDtmfDialerVisible )
       
   283             {
       
   284             // Dim 'Send dtmf' 
       
   285             iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );
       
   286             }
       
   287         else if ( iCustomizedDialer )
       
   288             {
       
   289             iCustomizedDialer->HandleNumberEntryIsEmpty( ETrue );
       
   290             }
       
   291         else
       
   292             {         
       
   293             // Show 'Logs ' and 'Contacts' items
       
   294             iToolbar->HideItem( EPhoneDialerCmdLog, EFalse,EFalse );
       
   295             iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );
       
   296             
       
   297             if ( iRestrictedDialer )
       
   298                 {
       
   299                 // Dim 'Logs' 
       
   300                 iToolbar->SetItemDimmed( EPhoneDialerCmdLog, ETrue
       
   301                                        , EFalse );
       
   302                 // Dim 'Contacts' 
       
   303                 iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue
       
   304                                        , EFalse );
       
   305                 }
       
   306                             
       
   307             // Hide 'Send' and 'Add to contacts'        
       
   308             iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue
       
   309                                 , EFalse );
       
   310             iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
       
   311                                 , EFalse );                
       
   312             }        
       
   313         }
       
   314     }
       
   315 
       
   316 // ---------------------------------------------------------------------------
       
   317 // CreateButtonSetNumberEntryNotEmpty
       
   318 // ---------------------------------------------------------------------------
       
   319 //
       
   320 void CPhoneDialerController::CreateButtonSetNumberEntryNotEmpty()
       
   321     {
       
   322     if( iToolbar )
       
   323         {
       
   324         if( iDtmfDialerVisible )
       
   325             {
       
   326             // Show 'Send dtmf' 
       
   327             iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, EFalse, EFalse );
       
   328             }           
       
   329         else if ( iCustomizedDialer )
       
   330             {
       
   331             iCustomizedDialer->HandleNumberEntryIsEmpty( EFalse );
       
   332             }
       
   333         else
       
   334             {
       
   335             // Show 'Send' and 'Add to contacts'
       
   336             iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse
       
   337                               , EFalse );      
       
   338             iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse
       
   339                               , EFalse );  
       
   340                     
       
   341             if ( iRestrictedDialer )
       
   342                 {
       
   343                 // Dim 'Send' 
       
   344                 iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
       
   345                                        , EFalse );
       
   346                 // Dim 'Add to Contacts' 
       
   347                 iToolbar->SetItemDimmed( EPhoneNumberAcqCmdAddToContacts, ETrue
       
   348                                        , EFalse );
       
   349                 }  
       
   350                            
       
   351             // Hide 'Logs ' and 'Contacts' 
       
   352             iToolbar->HideItem( EPhoneDialerCmdLog, ETrue,EFalse );
       
   353             iToolbar->HideItem( EPhoneDialerCmdContacts, ETrue, EFalse ); 
       
   354             
       
   355             TPhoneCmdParamCallStateData callStateData;
       
   356             callStateData.SetCallState( EPEStateConnected );
       
   357             iBubbleWrapper.GetCallIdByState( &callStateData );
       
   358             TInt connected = callStateData.CallId();    
       
   359              
       
   360             //If there is a active emergency call, Send item must be dimmed.  
       
   361             if ( connected == KEmergencyCallId )
       
   362                 {
       
   363                 //Dim Send
       
   364                 iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, ETrue
       
   365                                         ,EFalse );                
       
   366                 }
       
   367             else
       
   368                 {
       
   369                 //UnDim
       
   370                 iToolbar->SetItemDimmed( EPhoneNumberAcqCmdSendCommand, EFalse
       
   371                                         ,EFalse );                     
       
   372                 }
       
   373             }    
       
   374         }
       
   375     }
       
   376 
       
   377 // ---------------------------------------------------------------------------
       
   378 // SetDtmfDialerVisibleL
       
   379 // ---------------------------------------------------------------------------
       
   380 //
       
   381 void CPhoneDialerController::SetDtmfDialerVisibleL( TBool aVisible )
       
   382     {
       
   383     iDtmfDialerVisible = aVisible;
       
   384     
       
   385     if( iDtmfDialerVisible )
       
   386         {
       
   387         // Load prompt resource text to DTMF dialer.
       
   388         TInt resourceId = CPhoneMainResourceResolver::Instance()->
       
   389                     ResolveResourceID( EPhoneDtmfDialerNumberEntryPromptText ); 
       
   390                     
       
   391         HBufC* loadedText = StringLoader::LoadL( resourceId
       
   392                                                , &iCoeEnv );
       
   393 
       
   394         iBubbleWrapper.SetNumberEntryPromptText( loadedText->Des() );
       
   395         
       
   396         delete loadedText;
       
   397         }
       
   398     else        
       
   399         { 
       
   400         // Clear prompt text.    
       
   401         iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );  
       
   402                  
       
   403         // Hide
       
   404         iToolbar->HideItem( EPhoneCmdDtmfOk, ETrue, EFalse );  
       
   405            
       
   406         // Show       
       
   407         iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, EFalse, EFalse );
       
   408         iToolbar->HideItem( EPhoneDialerCmdLog, EFalse, EFalse );            
       
   409         iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, EFalse, EFalse );    
       
   410         // Dimming 
       
   411         iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, EFalse, EFalse );                
       
   412         }
       
   413     }
       
   414     
       
   415 // ---------------------------------------------------------------------------
   164 // ---------------------------------------------------------------------------
   416 // SetRestrictedDialerL
   165 // SetRestrictedDialerL
   417 // ---------------------------------------------------------------------------
   166 // ---------------------------------------------------------------------------
   418 //
   167 //
   419 void CPhoneDialerController::SetRestrictedDialer( TBool aRestricted )
   168 void CPhoneDialerController::SetRestrictedDialer( TBool aRestricted )
   420     {
   169     {
   421     iRestrictedDialer = aRestricted;
   170     iRestrictedDialer = aRestricted;
   422     }
   171     }
   423 // ---------------------------------------------------------------------------
   172 
   424 // UpdateToolbar
       
   425 // ---------------------------------------------------------------------------
       
   426 //
       
   427 void CPhoneDialerController::UpdateToolbar()
       
   428     {
       
   429     
       
   430     TPhoneCmdParamInteger numberEntryCountParam;
       
   431     iBubbleWrapper.GetNumberEntryCount( 
       
   432                             (TPhoneCommandParam*) &numberEntryCountParam );
       
   433     TInt neLength( numberEntryCountParam.Integer() );
       
   434     
       
   435     if ( neLength )
       
   436         {
       
   437         CreateButtonSetNumberEntryNotEmpty();
       
   438         iToolbar->SetItemDimmed( EPhoneDialerCmdClear, EFalse, EFalse );  
       
   439         iToolbar->DrawDeferred();     
       
   440         
       
   441         //Update also options menu via controller
       
   442         iMenuController.SetNumberEntryEmptyFlag( EFalse );        
       
   443         }
       
   444         
       
   445     else
       
   446         {
       
   447         CreateButtonSetNumberEntryEmpty();
       
   448         iToolbar->SetItemDimmed( EPhoneDialerCmdClear, ETrue, EFalse );
       
   449         iToolbar->DrawDeferred();
       
   450         
       
   451         //Update also options menu via controller
       
   452         iMenuController.SetNumberEntryEmptyFlag( ETrue );                  
       
   453         } 
       
   454 
       
   455     }   
       
   456 
       
   457 // ---------------------------------------------------------------------------
       
   458 // OfferToolbarEventL
       
   459 // ---------------------------------------------------------------------------
       
   460 //
       
   461 void CPhoneDialerController::OfferToolbarEventL( TInt aCommand )
       
   462     {
       
   463     switch ( aCommand )
       
   464         {
       
   465         case EPhoneDialerCmdClear:
       
   466             {
       
   467             // Send key event.
       
   468             TKeyEvent keyEvent;
       
   469             keyEvent.iModifiers = 0;
       
   470             keyEvent.iRepeats = 0;
       
   471             keyEvent.iCode = EKeyBackspace;
       
   472             keyEvent.iScanCode = EStdKeyBackspace;
       
   473             iCoeEnv.SimulateKeyEventL( keyEvent, EEventKey );
       
   474             }
       
   475             break;   
       
   476         default:
       
   477             {
       
   478             // Forward pressed toolbar button to the framework 
       
   479             // so that we can handle it in active state            
       
   480             static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
       
   481                ->ProcessCommandL( aCommand );            
       
   482             }
       
   483             break;    
       
   484         }
       
   485     } 
       
   486    
       
   487 // ---------------------------------------------------------------------------
       
   488 // DynInitToolbarL
       
   489 // ---------------------------------------------------------------------------
       
   490 //
       
   491 void CPhoneDialerController::DynInitToolbarL( TInt aResourceId, 
       
   492                                               CAknToolbar* /*aToolbar*/ )
       
   493     { 
       
   494     if ( aResourceId == R_PHONEUI_TOOLBAR )
       
   495         {
       
   496         if ( !iDtmfDialerVisible )
       
   497             {
       
   498             UpdateToolbar();
       
   499             }
       
   500         else
       
   501             {
       
   502             // initialize toolbar for dtmf dialer
       
   503             //
       
   504             // Show
       
   505             iToolbar->HideItem( EPhoneCmdDtmfOk, EFalse, EFalse );
       
   506             iToolbar->HideItem( EPhoneDialerCmdContacts, EFalse, EFalse );     
       
   507             
       
   508             // Hide
       
   509             iToolbar->HideItem( EPhoneNumberAcqCmdSendCommand, ETrue, EFalse );
       
   510             iToolbar->HideItem( EPhoneDialerCmdLog, ETrue, EFalse );            
       
   511             iToolbar->HideItem( EPhoneNumberAcqCmdAddToContacts, ETrue
       
   512                               , EFalse );     
       
   513             
       
   514             // Dimming
       
   515             iToolbar->SetItemDimmed( EPhoneDialerCmdContacts, ETrue, EFalse ); 
       
   516             iToolbar->SetItemDimmed( EPhoneCmdDtmfOk, ETrue, EFalse );                   
       
   517             }
       
   518         }     
       
   519     }
       
   520 // ---------------------------------------------------------------------------
       
   521 // IsDTMFDialerVisible
       
   522 // ---------------------------------------------------------------------------
       
   523 //
       
   524 TBool CPhoneDialerController::IsDTMFDialerVisible() const
       
   525     {
       
   526     return iDtmfDialerVisible;
       
   527     }
       
   528 
       
   529 
       
   530 // ---------------------------------------------------------------------------
       
   531 // GetTooltipText
       
   532 //
       
   533 // Tooltip texts for toolbar buttons
       
   534 // ---------------------------------------------------------------------------
       
   535 //
       
   536 void  CPhoneDialerController::GetTooltipTextL( TInt aCommandId, HBufC*& aText ) 
       
   537     {
       
   538     TInt resourceId = 0;
       
   539     switch( aCommandId )
       
   540         {
       
   541         case EPhoneDialerCmdLog:
       
   542             resourceId = R_PHONEUI_DIALER_TOOLTIP_RECENT_CALLS;
       
   543             break;              
       
   544                   
       
   545         case EPhoneNumberAcqCmdSendCommand:
       
   546             resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
       
   547             break;      
       
   548                           
       
   549         case EPhoneCmdDtmfOk:
       
   550             resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
       
   551             break;   
       
   552                              
       
   553         case EPhoneDialerCmdContacts:
       
   554             resourceId = R_PHONEUI_DIALER_TOOLTIP_CONTACTS;
       
   555             break;   
       
   556                              
       
   557         case EPhoneNumberAcqCmdAddToContacts:
       
   558             resourceId = R_PHONEUI_DIALER_TOOLTIP_ADD_TO_CONTACTS;
       
   559             break;   
       
   560                              
       
   561         case EPhoneDialerCmdClear:
       
   562             resourceId = R_PHONEUI_DIALER_TOOLTIP_CLEAR;
       
   563             break;
       
   564         default:
       
   565             aText = KNullDesC().Alloc();
       
   566             break;
       
   567         }
       
   568         
       
   569     if( resourceId )
       
   570         {
       
   571         aText = StringLoader::LoadL( resourceId, &iCoeEnv );
       
   572         }
       
   573         
       
   574     }
       
   575 // ---------------------------------------------------------------------------
   173 // ---------------------------------------------------------------------------
   576 // SetServiceCodeFlagL
   174 // SetServiceCodeFlagL
   577 //
   175 //
   578 // Change call button tooltip text between 'Send' or 'Call'
   176 // The flag rules wether green key is called "Send" or "Call"
   579 // 
   177 // 
   580 // ---------------------------------------------------------------------------
   178 // ---------------------------------------------------------------------------
   581 //
   179 //
   582 void CPhoneDialerController::SetServiceCodeFlagL( 
   180 void CPhoneDialerController::SetServiceCodeFlag( 
   583     TPhoneCommandParam* aCommandParam )
   181     TPhoneCommandParam* aCommandParam )
   584     {
   182     {
   585     
       
   586     // Check is the given parameter valid
   183     // Check is the given parameter valid
   587     if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
   184     if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdBoolean )
   588         {   
   185         {
   589         TInt resourceId = 0;
       
   590         TPhoneCmdParamBoolean* serviceCodeFlag = 
   186         TPhoneCmdParamBoolean* serviceCodeFlag = 
   591             static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
   187             static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
   592         // Sanity check
   188         iServiceCodeFlag = serviceCodeFlag->Boolean();
   593         if( serviceCodeFlag->Boolean() == iServiceCodeFlag )
   189         }
       
   190     }
       
   191 
       
   192 // ---------------------------------------------------------------------------
       
   193 // SetEasyDialingController
       
   194 // ---------------------------------------------------------------------------
       
   195 //
       
   196 void CPhoneDialerController::SetEasyDialingController( 
       
   197         CPhoneEasyDialingController* aController )
       
   198     {
       
   199     iEasyDialingController = aController;
       
   200     }
       
   201 
       
   202 // ---------------------------------------------------------------------------
       
   203 // CbaResourceId
       
   204 // ---------------------------------------------------------------------------
       
   205 //
       
   206 EXPORT_C TInt CPhoneDialerController::CbaResourceId() const
       
   207     {
       
   208     return KErrNotFound;
       
   209     }
       
   210 
       
   211 // ---------------------------------------------------------------------------
       
   212 // MenuResourceId
       
   213 // ---------------------------------------------------------------------------
       
   214 //
       
   215 EXPORT_C TInt CPhoneDialerController::MenuResourceId() const
       
   216     {
       
   217     return KErrNotFound;
       
   218     }
       
   219 
       
   220 // ---------------------------------------------------------------------------
       
   221 // NumberEntryPromptTextL
       
   222 // ---------------------------------------------------------------------------
       
   223 //
       
   224 EXPORT_C const TDesC& CPhoneDialerController::NumberEntryPromptTextL()
       
   225     {
       
   226     return KNullDesC;
       
   227     }
       
   228 
       
   229 // ---------------------------------------------------------------------------
       
   230 // GetButtonData
       
   231 // ---------------------------------------------------------------------------
       
   232 //
       
   233 EXPORT_C TInt CPhoneDialerController::GetButtonData( TButtonIndex aIndex, 
       
   234         RPointerArray<CButtonData>& aData ) const
       
   235     {
       
   236     TInt err = KErrNone;
       
   237     
       
   238     const TLocalButtonData* dataTable = NULL;
       
   239     TInt count = 0;
       
   240     
       
   241     // Select correct data table
       
   242     switch ( aIndex )
       
   243         {
       
   244         case ECallButton:
       
   245             dataTable = KCallButtonDataTable;
       
   246             count = KCallButtonDataTableCount;
       
   247             break;
       
   248         case EPhonebookButton:
       
   249             dataTable = KPhonebookButtonDataTable;
       
   250             count = KPhonebookButtonDataTableCount;
       
   251             break;
       
   252         case EClearButton:
       
   253             dataTable = KClearButtonDataTable;
       
   254             count = KClearButtonDataTableCount;
       
   255             break;
       
   256         default:
       
   257             break;
       
   258         }
       
   259     
       
   260     // Create data from the table
       
   261     if ( dataTable )
       
   262         {
       
   263         // Construct MIF file path
       
   264         TFileName mifPath( KDriveZ );
       
   265         mifPath.Append( KDC_APP_BITMAP_DIR );
       
   266         mifPath.Append( KPhoneMifFileName );
       
   267         MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
   268     
       
   269         for ( TInt i = 0 ; i < count ; ++i )
   594             {
   270             {
   595             return;
   271             CButtonData* btnData = NULL;
       
   272             TRAP( err, btnData = CreateButtonDataL( dataTable[i], skin, mifPath ) );
       
   273             if ( !err )
       
   274                 {
       
   275                 err = aData.Append( btnData );
       
   276                 }
       
   277             if ( err )
       
   278                 {
       
   279                 // free all memory and stop here if something went wrong
       
   280                 delete btnData;
       
   281                 aData.ResetAndDestroy();
       
   282                 i = count;
       
   283                 }
   596             }
   284             }
   597         // Get the toolbar button control
   285         }
   598         CAknButton* button = static_cast<CAknButton*>
   286     return err;
   599         ( iToolbar->ControlOrNull( EPhoneNumberAcqCmdSendCommand) );
   287     }
   600         
   288 
   601         CAknButtonState* state = button->State();                              
   289 // ---------------------------------------------------------------------------
   602         if ( serviceCodeFlag->Boolean() )
   290 // SetNumberEntryEmptyIsEmpty
       
   291 // ---------------------------------------------------------------------------
       
   292 //
       
   293 EXPORT_C void CPhoneDialerController::SetNumberEntryIsEmpty( TBool aEmpty )
       
   294     {
       
   295     iNumberAvailable = !aEmpty;
       
   296     }
       
   297 
       
   298 // ---------------------------------------------------------------------------
       
   299 // ButtonState
       
   300 // ---------------------------------------------------------------------------
       
   301 //
       
   302 EXPORT_C TInt CPhoneDialerController::ButtonState( TButtonIndex aIndex ) const
       
   303     {
       
   304     TInt state = 0;
       
   305     // Figure out correct state for each key
       
   306     switch ( aIndex )
       
   307         {
       
   308         case ECallButton:
   603             {
   309             {
   604             iServiceCodeFlag = ETrue;
   310             state = ECallButtonCallStateIndex;
   605             resourceId = R_PHONEUI_DIALER_TOOLTIP_SEND;
   311             if ( !iNumberAvailable )
       
   312                 {
       
   313                 state = ECallButtonLogStateIndex;
       
   314                 }
       
   315             else if ( iServiceCodeFlag )
       
   316                 {
       
   317                 // Set "Send" state unless Easy dialing is focused
       
   318                 TBool edFocused = EFalse;
       
   319                 if ( iEasyDialingController )
       
   320                     {
       
   321                     TInt commandResponse( EPhoneViewResponseFailed );
       
   322                     TRAP_IGNORE( commandResponse = iEasyDialingController->HandleCommandL(
       
   323                             EPhoneViewGetEasyDialingInFocusStatus) );
       
   324                     edFocused = ( commandResponse == EPhoneViewResponseSuccess );
       
   325                     }
       
   326                 if ( !edFocused )
       
   327                     {
       
   328                     state = ECallButtonSendStateIndex;
       
   329                     }
       
   330                 }
   606             }
   331             }
   607         else
   332             break;
       
   333         case EPhonebookButton:
   608             {
   334             {
   609             iServiceCodeFlag = EFalse;
   335             if ( !iNumberAvailable )
   610             resourceId = R_PHONEUI_DIALER_TOOLTIP_CALL;
   336                 {
   611             }  
   337                 state = EPhonebookButtonContactsIndex;
   612                 
   338                 }
   613         if( resourceId )
   339             else
   614             {    
   340                 {
   615             // Change text              
   341                 state = EPhonebookButtonAddContactIndex;
   616             HBufC* tooltipText = StringLoader::LoadL( resourceId,
   342                 }
   617                                              CCoeEnv::Static() );
       
   618             CleanupStack::PushL( tooltipText );                                         
       
   619             state->SetHelpTextL( *tooltipText );
       
   620             CleanupStack::PopAndDestroy( tooltipText );   
       
   621             }
   343             }
   622         }
   344             break;
   623     }
   345         case EClearButton:
   624 
       
   625 // ---------------------------------------------------------------------------
       
   626 // ShowToolbar
       
   627 //
       
   628 // ---------------------------------------------------------------------------
       
   629 //
       
   630 void CPhoneDialerController::ShowToolbar()
       
   631     {
       
   632     if ( iToolbar )
       
   633         {
       
   634         if ( iToolbar->IsToolbarDisabled() )
       
   635             {
   346             {
   636             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
   347             state = EClearButtonClearIndex;
   637             }
   348             }
   638         iToolbar->HideItemsAndDrawOnlyBackground( EFalse );
   349             break;
   639         iToolbar->SetToolbarVisibility( ETrue, EFalse );
   350         default:
   640         }
   351             break;
   641     }
   352         }
   642 
   353     return state;
   643 // ---------------------------------------------------------------------------
   354     }
   644 // HideToolbar
   355 
   645 //
   356 // ---------------------------------------------------------------------------
   646 // ---------------------------------------------------------------------------
   357 // ButtonDimmed
   647 //
   358 // ---------------------------------------------------------------------------
   648 void CPhoneDialerController::HideToolbar()
   359 //
   649     {
   360 EXPORT_C TBool CPhoneDialerController::ButtonDimmed( TButtonIndex aIndex ) const
   650     if ( iToolbar )
   361     {
   651         {
   362     TBool dimmed = EFalse;
   652         if( iToolbar->IsShown() )
   363     // Figure out correct state for each key
   653             {
   364     switch ( aIndex )
   654             iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
   365         {
   655             }
   366         case ECallButton:
   656         else if ( iToolbar->IsToolbarDisabled() )
   367             dimmed = iRestrictedDialer;
   657             {
   368             if ( !dimmed )
   658             TRAP_IGNORE(iToolbar->DisableToolbarL( EFalse ));
   369                 {
   659             iToolbar->HideItemsAndDrawOnlyBackground( ETrue );
   370                 // Prevent calling but don't prevent log during emergency call
   660             iToolbar->SetToolbarVisibility( ETrue, EFalse );
   371                 dimmed = ( iNumberAvailable && EmergencyCallActive() );
   661             }
   372                 }
   662         }        
   373             break;
   663     }
   374         case EPhonebookButton:
   664 
   375             dimmed = iRestrictedDialer;
   665 // ---------------------------------------------------------------------------
   376             break;
   666 // ShowCustomizedDialerL
   377         case EClearButton:
   667 //
   378             dimmed = !iNumberAvailable;
   668 // Sets custom dialer buttons visible
   379             break;
   669 // 
   380         default:
   670 // ---------------------------------------------------------------------------
   381             break;
   671 //
   382         }
   672 void CPhoneDialerController::ShowCustomizedDialerL( 
   383     return dimmed;
   673     MPhoneDialerController* aCustomController )
   384     }
   674     {  
   385 
   675     if ( aCustomController )
   386 // ---------------------------------------------------------------------------
   676         {
   387 // EasyDialingAllowed
   677         // Hide all buttons except clear button 
   388 // ---------------------------------------------------------------------------
   678         for ( TInt i = 0; i < KNumberOfButtons; i++ )
   389 //
   679             {
   390 EXPORT_C TBool CPhoneDialerController::EasyDialingAllowed() const
   680             if ( bArray[ i ].iCommandId != EPhoneDialerCmdClear )
   391     {
   681                 {
   392     return !iRestrictedDialer && !EmergencyCallActive();
   682                 iToolbar->HideItem( bArray[ i ].iCommandId, ETrue, EFalse );
   393     }
   683                 }
   394 
   684             }
   395 // ---------------------------------------------------------------------------
   685  
   396 // EmergencyCallActive
   686         aCustomController->InitializeL( *iToolbar );
   397 // ---------------------------------------------------------------------------
   687         iBubbleWrapper.SetNumberEntryPromptText( 
   398 //
   688             aCustomController->NumberEntryPromptTextL() );
   399 EXPORT_C TBool CPhoneDialerController::EmergencyCallActive() const
   689         aCustomController->ShowButtons( ETrue );
   400     {
   690         }
   401     TBool ret = EFalse;
   691     iCustomizedDialer = aCustomController;
   402     if ( iBubbleWrapper )
   692     }
   403         {
   693 
   404         TPhoneCmdParamCallStateData callStateData;
   694 // ---------------------------------------------------------------------------
   405         callStateData.SetCallState( EPEStateConnected );
   695 // HideCustomizedDialerL
   406         iBubbleWrapper->GetCallIdByState( &callStateData );
   696 //
   407         TInt connected = callStateData.CallId();    
   697 // Hides custom dialer buttons 
   408         ret = ( connected == KEmergencyCallId );
   698 // 
   409         }
   699 // ---------------------------------------------------------------------------
   410     return ret;
   700 //
   411     }
   701 void CPhoneDialerController::HideCustomizedDialer()
   412 
   702     {  
   413 // ---------------------------------------------------------------------------
   703     iCustomizedDialer->ShowButtons( EFalse );
   414 // CreateButtonDataL
   704     iBubbleWrapper.SetNumberEntryPromptText( KNullDesC );              
   415 // ---------------------------------------------------------------------------
   705     iCustomizedDialer = NULL;
   416 //
   706     }
   417 MPhoneDialerController::CButtonData* CPhoneDialerController::CreateButtonDataL( 
   707 
   418         const TLocalButtonData& aSourceData, 
   708 // ---------------------------------------------------------------------------
   419         MAknsSkinInstance* aSkin, 
   709 // IsCustomizedDialerVisible
   420         const TDesC& aMifFile ) const
   710 // ---------------------------------------------------------------------------
   421     {
   711 //
   422     // Create tooltip text
   712 TBool CPhoneDialerController::IsCustomizedDialerVisible() const
   423     HBufC* tooltip = StringLoader::LoadLC( aSourceData.iTooltipResourceId );
   713     {
   424     
   714     return ( NULL != iCustomizedDialer );
   425     // Create icon
   715     }
   426     TAknsItemID skinId = { EAknsMajorGeneric, aSourceData.iSkinItemIdMinor };
   716 
   427     CGulIcon* icon = AknsUtils::CreateGulIconL( aSkin, skinId, aMifFile, 
   717 // ---------------------------------------------------------------------------
   428             aSourceData.iBitmapIndex, aSourceData.iBitmapMaskIndex );
   718 // CustomizedCbaResourceId
   429     CleanupStack::PushL( icon );
   719 // ---------------------------------------------------------------------------
   430     
   720 //
   431     // Create button data object
   721 TInt CPhoneDialerController::CustomizedCbaResourceId() const
   432     CButtonData* buttonData =
   722     {
   433         new ( ELeave ) CButtonData( aSourceData.iCommandId, icon, tooltip );
   723     TInt resourceId = KErrNotFound;
   434     CleanupStack::Pop( icon );
   724     if ( iCustomizedDialer )
   435     CleanupStack::Pop( tooltip );
   725         {
   436     
   726         resourceId = iCustomizedDialer->CbaResourceId();
   437     return buttonData;
   727         }
       
   728     return resourceId;
       
   729     }
       
   730 
       
   731 // ---------------------------------------------------------------------------
       
   732 // CustomizedMenuResourceId
       
   733 // ---------------------------------------------------------------------------
       
   734 //
       
   735 TInt CPhoneDialerController::CustomizedMenuResourceId() const
       
   736     {
       
   737     TInt resourceId = KErrNotFound;
       
   738     if ( iCustomizedDialer )
       
   739         {
       
   740         resourceId = iCustomizedDialer->MenuResourceId();  
       
   741         }
       
   742     return resourceId;
       
   743     }
   438     }
   744 
   439 
   745 // END
   440 // END