phoneapp/phoneuicontrol/src/cphonenumberentrymanager.cpp
branchRCL_3
changeset 61 41a7f70b3818
parent 57 94dc1107e8b2
child 62 5266b1f337bd
equal deleted inserted replaced
58:40a3f856b14d 61:41a7f70b3818
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 #include <StringLoader.h>
    19 #include <StringLoader.h>
    20 #include <activeidle2domainpskeys.h>
       
    21 #include <featmgr.h>
    20 #include <featmgr.h>
    22 #include <eikenv.h>
    21 #include <eikenv.h>
    23 
    22 
    24 #include "cphonenumberentrymanager.h"
    23 #include "cphonenumberentrymanager.h"
    25 #include "mpeengineinfo.h"
    24 #include "mpeengineinfo.h"
    38 #include "phonerssbase.h"
    37 #include "phonerssbase.h"
    39 #include "phoneui.pan"
    38 #include "phoneui.pan"
    40 #include "phoneviewcommanddefinitions.h"
    39 #include "phoneviewcommanddefinitions.h"
    41 #include "phoneappcommands.hrh"
    40 #include "phoneappcommands.hrh"
    42 #include "phonelogger.h"
    41 #include "phonelogger.h"
    43 #include "mphonesecuritymodeobserver.h"
       
    44 
    42 
    45 const TInt  KPhoneKeyStart            = 33;
    43 const TInt  KPhoneKeyStart            = 33;
    46 const TInt  KPhoneKeyEnd              = 127;
    44 const TInt  KPhoneKeyEnd              = 127;
    47 
       
    48 const TInt KKeyCtrlA( 1 );
       
    49 const TInt KKeyCtrlC( 3 );
       
    50 const TInt KKeyCtrlV( 22 );
       
    51 const TInt KKeyCtrlX( 24 );
       
    52 
    45 
    53 // ======== MEMBER FUNCTIONS ========
    46 // ======== MEMBER FUNCTIONS ========
    54 
    47 
    55 // ---------------------------------------------------------------------------
    48 // ---------------------------------------------------------------------------
    56 // CPhoneNumberEntryManager::CPhoneNumberEntryManager
    49 // CPhoneNumberEntryManager::CPhoneNumberEntryManager
    65    : iState ( aState ),
    58    : iState ( aState ),
    66      iViewCommandHandle ( aViewCommandHandle ),
    59      iViewCommandHandle ( aViewCommandHandle ),
    67      iStateMachine ( aStateMachine ),
    60      iStateMachine ( aStateMachine ),
    68      iCustomization ( aCustomization ),
    61      iCustomization ( aCustomization ),
    69      iCbaManager ( aCbaManager ),
    62      iCbaManager ( aCbaManager ),
    70      iEnv( *CEikonEnv::Static() ) // codescanner::eikonenvstatic
    63      iEnv( *CEikonEnv::Static() )
    71     {
    64     {
    72     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::CPhoneNumberEntryManager() ");
    65     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::CPhoneNumberEntryManager() ");
    73     }
    66     }
    74 
    67 
    75  // ---------------------------------------------------------------------------
    68  // ---------------------------------------------------------------------------
   149                 &stringParam );  
   142                 &stringParam );  
   150         }
   143         }
   151     }
   144     }
   152 
   145 
   153 // -----------------------------------------------------------
   146 // -----------------------------------------------------------
   154 // CPhoneNumberEntryManager::RestoreNumberEntryContentL
       
   155 // -----------------------------------------------------------
       
   156 //
       
   157 void CPhoneNumberEntryManager::RestoreNumberEntryContentL()
       
   158     {
       
   159     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::RestoreNumberEntryContentL( ) ");
       
   160     if ( iNumberEntryContent )
       
   161         {
       
   162         // Restore the number entry content from cache
       
   163         TPtr ptr( iNumberEntryContent->Des() );            
       
   164         iViewCommandHandle.ExecuteCommandL( EPhoneViewSetNumberEntryContent, 0, ptr );
       
   165         delete iNumberEntryContent;
       
   166         iNumberEntryContent = NULL;
       
   167         }
       
   168     }
       
   169 
       
   170 // -----------------------------------------------------------
       
   171 // CPhoneNumberEntryManager::IsNumberEntryContentStored
   147 // CPhoneNumberEntryManager::IsNumberEntryContentStored
   172 // -----------------------------------------------------------
   148 // -----------------------------------------------------------
   173 //
   149 //
   174 TBool CPhoneNumberEntryManager::IsNumberEntryContentStored()
   150 TBool CPhoneNumberEntryManager::IsNumberEntryContentStored()
   175     {
   151     {
   186     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::ClearNumberEntryContentCache( ) ");
   162     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::ClearNumberEntryContentCache( ) ");
   187     delete iNumberEntryContent;
   163     delete iNumberEntryContent;
   188     iNumberEntryContent = NULL;
   164     iNumberEntryContent = NULL;
   189     }
   165     }
   190 
   166 
   191 // -----------------------------------------------------------
       
   192 // CPhoneNumberEntryManager::CreateNumberEntryL
       
   193 // -----------------------------------------------------------
       
   194 void CPhoneNumberEntryManager::CreateNumberEntryL()
       
   195     {
       
   196     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::CreateNumberEntryL( ) ");
       
   197     iViewCommandHandle.ExecuteCommandL( EPhoneViewCreateNumberEntry );
       
   198     }
       
   199  
   167  
   200 // -----------------------------------------------------------
   168 // -----------------------------------------------------------
   201 // CPhoneNumberEntryManager::SetNumberEntryVisibilityL
   169 // CPhoneNumberEntryManager::SetNumberEntryVisibilityL
   202 // -----------------------------------------------------------
   170 // -----------------------------------------------------------
   203 //
   171 //
   206     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::SetNumberEntryVisibilityL( ) ");
   174     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::SetNumberEntryVisibilityL( ) ");
   207     __PHONELOG1( EBasic, EPhoneControl, 
   175     __PHONELOG1( EBasic, EPhoneControl, 
   208             "CPhoneNumberEntryManager::SetNumberEntryVisibilityL : aVisible =%d", 
   176             "CPhoneNumberEntryManager::SetNumberEntryVisibilityL : aVisible =%d", 
   209             aVisible.Boolean() );
   177             aVisible.Boolean() );
   210     iViewCommandHandle.ExecuteCommandL( EPhoneViewSetNumberEntryVisible, &aVisible );
   178     iViewCommandHandle.ExecuteCommandL( EPhoneViewSetNumberEntryVisible, &aVisible );
   211     if ( aVisible.Boolean() )
       
   212         {
       
   213         // Set Number Entry CBA
       
   214         iCbaManager.UpdateCbaL( EPhoneNumberAcqCBA );
       
   215         }
       
   216     }
       
   217 
       
   218 // -----------------------------------------------------------
       
   219 // CPhoneNumberEntryManager::HandleCreateNumberEntryL
       
   220 // add conditions here regarding when NE can be opened:
       
   221 // - activeidle is not the top most application
       
   222 // - any query is not visible
       
   223 // - dialog is not visible ("new call")
       
   224 // - information note is not visible ("IMEI code", "life timer")
       
   225 // - options menu bar is not visible
       
   226 // - "switch to ..." -operation  is not ongoing
       
   227 // -----------------------------------------------------------
       
   228 //
       
   229 void CPhoneNumberEntryManager::HandleCreateNumberEntryL()
       
   230     {
       
   231     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::HandleCreateNumberEntryL() ");
       
   232     
       
   233     const TBool autoLockOn = iStateMachine.SecurityMode()->IsSecurityMode();
       
   234     const TBool idleVal = CPhonePubSubProxy::Instance()->Value( KPSUidAiInformation, KActiveIdleState );
       
   235     const TBool queryActive = iState->IsAnyQueryActiveL();
       
   236     const TBool menuBarVisible = iState->IsMenuBarVisibleL();
       
   237     
       
   238     if( autoLockOn || 
       
   239         ( idleVal == EPSAiForeground ) ||
       
   240         ( menuBarVisible || queryActive ) )
       
   241         {
       
   242         __PHONELOG( EBasic, EPhoneControl, 
       
   243              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() NE NOT CREATED" );
       
   244         __PHONELOG2( EBasic, EPhoneControl, 
       
   245              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() autoLcokOn(%d) idleVal(%d)", 
       
   246              autoLockOn, idleVal );
       
   247         __PHONELOG2( EBasic, EPhoneControl, 
       
   248              "CPhoneNumberEntryManager::HandleCreateNumberEntryL() queryActive(%d) menuBarVisible(%d)", 
       
   249              queryActive, menuBarVisible );
       
   250         }
       
   251     else
       
   252         {
       
   253         //creates NE
       
   254         if( ( !iStateMachine.PhoneEngineInfo()->IsSwitchToOperationOngoing () ) &&
       
   255             ( !IsNumberEntryUsedL() ) &&
       
   256             ( !queryActive || FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) )
       
   257             {
       
   258             __PHONELOG( EBasic, EPhoneControl,
       
   259                         "CPhoneNumberEntryManager::HandleCreateNumberEntryL() --create NE" );
       
   260             
       
   261             if ( iState->IsNoteDismissableL() )
       
   262                 {
       
   263                 iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveNote );
       
   264                 }
       
   265             
       
   266             if( iStateMachine.SecurityMode()->IsSecurityMode() )
       
   267                 {
       
   268                 iState->HandleCommandL( EPhoneNumberAcqSecurityDialer );
       
   269                 }
       
   270             else
       
   271                 {
       
   272                 // Effect is shown when dialer is created.
       
   273                 iState->BeginTransEffectLC( ENumberEntryCreate );
       
   274                 iViewCommandHandle.ExecuteCommandL( EPhoneViewCreateNumberEntry );
       
   275                 iState->EndTransEffect();
       
   276                 // Go to current state implementation
       
   277                 iCbaManager.UpdateInCallCbaL();
       
   278                 iState->UpdateInCallContextMenuL();
       
   279                 iEnv.SyncNotifyFocusObserversOfChangeInFocus();
       
   280                 }
       
   281             }
       
   282 
       
   283         //shows existing NE
       
   284         if ( ( !iStateMachine.PhoneEngineInfo()->IsSwitchToOperationOngoing () ) &&
       
   285              ( !IsNumberEntryVisibleL() ) &&
       
   286              ( !queryActive || FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) ) )
       
   287             {
       
   288             __PHONELOG( EBasic, EPhoneControl, 
       
   289                         "CPhoneNumberEntryManager::HandleCreateNumberEntryL() -- show NE" );
       
   290             
       
   291             if ( iState->IsNoteDismissableL() )
       
   292                 {
       
   293                 iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveNote );
       
   294                 }
       
   295             
       
   296             TPhoneCmdParamBoolean booleanParam;
       
   297             booleanParam.SetBoolean( ETrue );
       
   298             // Show the number entry
       
   299             SetNumberEntryVisibilityL(booleanParam);
       
   300             }
       
   301         }
       
   302     
       
   303     }
   179     }
   304 
   180 
   305 // -----------------------------------------------------------
   181 // -----------------------------------------------------------
   306 // CPhoneNumberEntryManager::IsNumberEntryUsedL
   182 // CPhoneNumberEntryManager::IsNumberEntryUsedL
   307 // -----------------------------------------------------------
   183 // -----------------------------------------------------------
   341         EPhoneViewGetNumberFromEntry,
   217         EPhoneViewGetNumberFromEntry,
   342         &stringParam );
   218         &stringParam );
   343     return phoneNumber;
   219     return phoneNumber;
   344     }
   220     }
   345 
   221 
   346 // -----------------------------------------------------------
       
   347 // CPhoneNumberEntryManager::HandleNumberEntryEdited
       
   348 // -----------------------------------------------------------
       
   349 //
       
   350 void CPhoneNumberEntryManager::HandleNumberEntryEdited()
       
   351     {
       
   352     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::HandleNumberEntryEdited( ) ");
       
   353     TBool isNumberEntryVisible( EFalse );
       
   354     TRAP_IGNORE( isNumberEntryVisible = IsNumberEntryVisibleL() );
       
   355 
       
   356     if( isNumberEntryVisible )
       
   357         {
       
   358         HBufC* phoneNumber( NULL );
       
   359         TRAP_IGNORE( phoneNumber = HBufC::NewL( KPhoneNumberEntryBufferSize ) );
       
   360         if( phoneNumber )
       
   361             {
       
   362             phoneNumber->Des().Zero();
       
   363             TPtr ptr( phoneNumber->Des() );
       
   364             TPhoneCmdParamString stringParam;
       
   365             stringParam.SetString( &ptr );
       
   366             TRAP_IGNORE( iViewCommandHandle.ExecuteCommandL(
       
   367                     EPhoneViewGetNumberFromEntry,
       
   368                     &stringParam ) );
       
   369             // Save the phone number
       
   370             iStateMachine.PhoneEngineInfo()->SetPhoneNumber( ptr );
       
   371 
       
   372             iStateMachine.SendPhoneEngineMessage(
       
   373                     MPEPhoneModel::EPEMessagePhoneNumberEdited );
       
   374 
       
   375             // remove the phone number
       
   376             delete phoneNumber;
       
   377 
       
   378             // Set service code flag to view
       
   379             TPhoneCmdParamBoolean serviceCodeParam;
       
   380             serviceCodeParam.SetBoolean(
       
   381                 iStateMachine.PhoneEngineInfo()->PhoneNumberIsServiceCode() );
       
   382             TRAP_IGNORE( iViewCommandHandle.ExecuteCommandL( 
       
   383                     EPhoneViewSetServiceCodeFlag,
       
   384                     &serviceCodeParam ) );
       
   385             }
       
   386         }
       
   387     }
       
   388 
       
   389 // -----------------------------------------------------------
       
   390 // CPhoneNumberEntryManager::KeyEventForExistingNumberEntryL
       
   391 // -----------------------------------------------------------
       
   392 //
       
   393 void CPhoneNumberEntryManager::KeyEventForExistingNumberEntryL( 
       
   394         const TKeyEvent& aKeyEvent,
       
   395         TEventCode aEventCode )
       
   396     {
       
   397     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::KeyEventForExistingNumberEntryL( ) ");
       
   398 
       
   399     TPhoneCmdParamKeyEvent keyEventParam;
       
   400     keyEventParam.SetKeyEvent( aKeyEvent );
       
   401     keyEventParam.SetEventCode( aEventCode );
       
   402 
       
   403     if ( IsValidAlphaNumericKey( aKeyEvent, aEventCode ) 
       
   404             || aKeyEvent.iCode == KKeyCtrlA
       
   405             || aKeyEvent.iCode == KKeyCtrlC
       
   406             || aKeyEvent.iCode == KKeyCtrlV
       
   407             || aKeyEvent.iCode == KKeyCtrlX )
       
   408         {
       
   409         iViewCommandHandle.HandleCommandL(
       
   410                 EPhoneViewSendKeyEventToNumberEntry, &keyEventParam );
       
   411         }
       
   412     else if ( aKeyEvent.iCode == EKeyBackspace )
       
   413         {
       
   414         TPhoneViewResponseId resp = iViewCommandHandle.HandleCommandL(
       
   415                     EPhoneViewSendKeyEventToNumberEntry, &keyEventParam );
       
   416 
       
   417         if ( resp == EPhoneViewResponseNumberEntryCleared )
       
   418             {
       
   419             // Remove number entry from screen
       
   420             iViewCommandHandle.ExecuteCommandL(
       
   421                 EPhoneViewRemoveNumberEntry );
       
   422 
       
   423             // Stop DTMF tone playing just in case (user might be holding down a number
       
   424             // key when pressed 'clear' key).
       
   425             iStateMachine.SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
       
   426 
       
   427             // Handle state-specific behaviour when number entry is
       
   428             // cleared
       
   429             HandleNumberEntryClearedL();
       
   430             }
       
   431 
       
   432         }
       
   433     else if( aKeyEvent.iCode == EKeyLeftArrow ||
       
   434            aKeyEvent.iCode == EKeyRightArrow ||
       
   435            aKeyEvent.iCode == EKeyUpArrow ||
       
   436            aKeyEvent.iCode == EKeyDownArrow )
       
   437            {
       
   438            iViewCommandHandle.HandleCommandL(
       
   439                EPhoneViewSendKeyEventToNumberEntry, &keyEventParam );
       
   440            }
       
   441     }
       
   442 
       
   443 // -----------------------------------------------------------------------------
   222 // -----------------------------------------------------------------------------
   444 // CPhoneNumberEntryManager::IsValidAlphaNumericKey
   223 // CPhoneNumberEntryManager::IsValidAlphaNumericKey
   445 // Checks is the key event a number, a special character
   224 // Checks is the key event a number, a special character
   446 // or if VoIP is enabled some other character
   225 // or if VoIP is enabled some other character
   447 // -----------------------------------------------------------------------------
   226 // -----------------------------------------------------------------------------
   456           aKeyEvent, aEventCode ) );
   235           aKeyEvent, aEventCode ) );
   457 
   236 
   458     // a numeric key (1,2,3,4,6,7,8,9,0,+,*,p,w )
   237     // a numeric key (1,2,3,4,6,7,8,9,0,+,*,p,w )
   459     // or
   238     // or
   460     // a letter from fullscreen qwerty, miniqwerty or handwriting
   239     // a letter from fullscreen qwerty, miniqwerty or handwriting
   461     // when voip or easydialing is enabled.
   240     // when voip is enabled.
   462     if ( numericKeyEntered
   241     if ( numericKeyEntered
   463         || IsAlphanumericSupportedAndCharInput( aKeyEvent ) )
   242         || IsAlphanumericSupportedAndCharInput( aKeyEvent ) )
   464         {
   243         {
   465         ret= ETrue;
   244         ret= ETrue;
   466         }
   245         }
   468     return ret;
   247     return ret;
   469     }
   248     }
   470 
   249 
   471 // -----------------------------------------------------------------------------
   250 // -----------------------------------------------------------------------------
   472 // CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput
   251 // CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput
   473 // Check that number entry is in alphabetic mode and given key is an allowed
       
   474 // character key
       
   475 // -----------------------------------------------------------------------------
   252 // -----------------------------------------------------------------------------
   476 //
   253 //
   477 TBool CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput(
   254 TBool CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput(
   478         const TKeyEvent& aKeyEvent ) const
   255         const TKeyEvent& aKeyEvent ) const
   479     {
   256     {
   480     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput( ) ");
   257     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput( ) ");
   481     
   258     TBool ret = ( ( iCustomization &&
   482     TBool numericMode = EFalse;
   259                  iCustomization->AllowAlphaNumericMode() ) &&
   483     TRAP_IGNORE( numericMode = ( iViewCommandHandle.HandleCommandL( EPhoneViewIsNumberEntryNumericMode ) 
   260                  ( ( aKeyEvent.iScanCode >= KPhoneKeyStart &&
   484             == EPhoneViewResponseSuccess ) );
   261                      aKeyEvent.iScanCode <= KPhoneKeyEnd ) ||
   485     
   262                      aKeyEvent.iModifiers & EModifierSpecial ) );
   486     TBool ret = !numericMode &&
       
   487                 ( ( aKeyEvent.iScanCode >= KPhoneKeyStart &&
       
   488                     aKeyEvent.iScanCode <= KPhoneKeyEnd ) ||
       
   489                   aKeyEvent.iModifiers & EModifierSpecial );
       
   490     __PHONELOG1( EBasic, EPhoneControl, 
   263     __PHONELOG1( EBasic, EPhoneControl, 
   491             "CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput: %d", ret );
   264             "CPhoneNumberEntryManager::IsAlphanumericSupportedAndCharInput: %d", ret );
   492     return ret;
   265     return ret;
   493     }
   266     }
   494 
   267 
   509     {
   282     {
   510     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::NumberEntryClearL( ) ");
   283     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::NumberEntryClearL( ) ");
   511     iViewCommandHandle.ExecuteCommandL( EPhoneViewClearNumberEntryContent );
   284     iViewCommandHandle.ExecuteCommandL( EPhoneViewClearNumberEntryContent );
   512     }
   285     }
   513 
   286 
   514 // -----------------------------------------------------------
   287 
   515 // CPhoneNumberEntryManager::NumberEntryInNumericModeL
   288 
   516 // -----------------------------------------------------------
   289 
   517 //
       
   518 TBool CPhoneNumberEntryManager::NumberEntryInNumericModeL()
       
   519     {
       
   520     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::NumberEntryInNumericModeL( ) ");
       
   521     return iViewCommandHandle.HandleCommandL(
       
   522         EPhoneViewIsNumberEntryNumericMode ) == EPhoneViewResponseSuccess;
       
   523     }
       
   524 
       
   525 // -----------------------------------------------------------
       
   526 // CPhoneNumberEntryManager::NumberEntryToggleAlphaNumericModeL
       
   527 // -----------------------------------------------------------
       
   528 //
       
   529 TBool CPhoneNumberEntryManager::NumberEntryToggleAlphaNumericModeL()
       
   530     {
       
   531     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneNumberEntryManager::NumberEntryToggleAlphaNumericModeL( ) ");
       
   532     TPhoneCmdParamBoolean newModeAlpha;
       
   533     // Toggle number entry alpha/numeric mode
       
   534     iViewCommandHandle.ExecuteCommandL(
       
   535         EPhoneViewToggleNumberEntryAlphaNumericMode, &newModeAlpha );
       
   536     return newModeAlpha.Boolean();
       
   537     }
       
   538 
       
   539