phoneapp/phoneuicontrol/src/cphonecbamanager.cpp
changeset 65 2a5d4ab426d3
parent 50 377c906a8701
equal deleted inserted replaced
60:1eef62f5c541 65:2a5d4ab426d3
    50          CPhoneState* aState,
    50          CPhoneState* aState,
    51          MPhoneViewCommandHandle& aViewCommandHandle,
    51          MPhoneViewCommandHandle& aViewCommandHandle,
    52          MPhoneStateMachine& aStateMachine )
    52          MPhoneStateMachine& aStateMachine )
    53    : iState ( aState ), 
    53    : iState ( aState ), 
    54      iViewCommandHandle ( aViewCommandHandle ),
    54      iViewCommandHandle ( aViewCommandHandle ),
    55      iStateMachine ( aStateMachine )
    55      iStateMachine ( aStateMachine ),
       
    56      iSoftRejectStatus ( ETrue )
    56     {
    57     {
    57     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCbaManager::CPhoneCbaManager() ");
    58     __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCbaManager::CPhoneCbaManager() ");
    58     }
    59     }
    59 
    60 
    60  // ---------------------------------------------------------------------------
    61  // ---------------------------------------------------------------------------
   116     
   117     
   117     TPhoneCmdParamBoolean btParam;
   118     TPhoneCmdParamBoolean btParam;
   118     btParam.SetBoolean( audioOutput == EPEBTAudioAccessory );        
   119     btParam.SetBoolean( audioOutput == EPEBTAudioAccessory );        
   119     iViewCommandHandle.ExecuteCommand(EPhoneViewSetBlueToothFlag,&btParam);
   120     iViewCommandHandle.ExecuteCommand(EPhoneViewSetBlueToothFlag,&btParam);
   120 
   121 
       
   122     SetSoftRejectDimmedFlag();
       
   123     
   121     TPhoneCmdParamBoolean btAvailableParam;
   124     TPhoneCmdParamBoolean btAvailableParam;
   122     btAvailableParam.SetBoolean( btAvailable );        
   125     btAvailableParam.SetBoolean( btAvailable );        
   123     iViewCommandHandle.ExecuteCommand(
   126     iViewCommandHandle.ExecuteCommand(
   124             EPhoneViewSetBluetoothAvailableFlag,&btAvailableParam);
   127             EPhoneViewSetBluetoothAvailableFlag,&btAvailableParam);
   125     
       
   126     // Call setup cases
       
   127     if ( EPhoneCallHandlingCallSetupCBA == aResource )
       
   128         {
       
   129         if ( !FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling) )
       
   130             {
       
   131             if ( audioOutput == EPELoudspeaker )
       
   132                 {
       
   133                 resourceId = EPhoneCallHandlingCallSetupToHandsetCBA;
       
   134                 }
       
   135             else if ( audioOutput == EPEHandset )
       
   136                 {
       
   137                 resourceId = EPhoneCallHandlingCallSetupToIhfCBA;
       
   138                 }
       
   139             }
       
   140         }
       
   141 
       
   142     // Is numberentry visible
       
   143     else if ( iState->IsNumberEntryUsedL() )
       
   144         {
       
   145         if ( iState->IsAutoLockOn() || !(iState->IsSimOk()) )
       
   146             {
       
   147             resourceId = EPhoneEmptyBackCBA;
       
   148             }
       
   149         else
       
   150             {
       
   151             TPhoneCmdParamInteger activeCallCount;
       
   152             iViewCommandHandle.ExecuteCommandL(
       
   153                     EPhoneViewGetCountOfActiveCalls, &activeCallCount );
       
   154             
       
   155             TPhoneCmdParamCallStateData callStateData;
       
   156             callStateData.SetCallState( EPEStateRinging );
       
   157             iViewCommandHandle.HandleCommandL(
       
   158                     EPhoneViewGetCallIdByState, &callStateData );
       
   159             
       
   160             TInt incomingCall = callStateData.CallId();
       
   161 
       
   162             if( activeCallCount.Integer() == ENoActiveCalls )
       
   163                 {
       
   164                 resourceId = EPhoneNumberAcqCBA;
       
   165                 }
       
   166             else if ( activeCallCount.Integer() > ENoActiveCalls &&  
       
   167                       incomingCall > KErrNotFound )
       
   168                 {
       
   169                 resourceId = EPhoneCallHandlingCallWaitingCBA;
       
   170                 }
       
   171             else
       
   172                 {
       
   173                 resourceId = EPhoneInCallNumberAcqCBA;
       
   174                 }
       
   175             }
       
   176         }
       
   177 
   128 
   178     // Check is Audio muted
   129     // Check is Audio muted
   179     else if ( iStateMachine.PhoneEngineInfo()->AudioMute() )
   130     if ( iStateMachine.PhoneEngineInfo()->AudioMute() )
   180         {
   131         {
   181         resourceId = EPhoneCallHandlingInCallUnmuteCBA;
   132         resourceId = EPhoneCallHandlingInCallUnmuteCBA;
   182         }
   133         }
   183 
       
   184     // Multicall swap
   134     // Multicall swap
   185     else if ( EPhoneCallHandlingNewCallSwapCBA == aResource )
   135     else if ( EPhoneCallHandlingNewCallSwapCBA == aResource )
   186         {
   136         {
   187         resourceId = EPhoneCallHandlingNewCallSwapCBA;
   137         resourceId = EPhoneCallHandlingNewCallSwapCBA;
   188         }
   138         }
   189 
       
   190     // Call waiting cases
   139     // Call waiting cases
   191     else if ( EPhoneCallHandlingCallWaitingCBA == aResource )
   140     else if ( EPhoneCallHandlingCallWaitingCBA == aResource )
   192         {
   141         {
   193         resourceId = EPhoneCallHandlingCallWaitingCBA;
   142         resourceId = EPhoneCallHandlingCallWaitingCBA;
   194         if ( iState->IsSwivelClosed() )
   143         if ( iState->IsSwivelClosed() )
   204                 {
   153                 {
   205                 resourceId = EPhoneCallHandlingWaitingReplaceSwivelClosedCBA;
   154                 resourceId = EPhoneCallHandlingWaitingReplaceSwivelClosedCBA;
   206                 }
   155                 }
   207             }
   156             }
   208         }
   157         }
   209 
       
   210     // Check is call in hold
   158     // Check is call in hold
   211     else if ( hold.Boolean() )
   159     else if ( hold.Boolean() )
   212         {
   160         {
   213         resourceId = EPhoneCallHandlingInCallUnholdCBA;
   161         resourceId = EPhoneCallHandlingInCallUnholdCBA;
   214         }
   162         }
   215 
       
   216     // Is BT accessory connected
   163     // Is BT accessory connected
   217     else if ( audioOutput == EPEBTAudioAccessory &&
   164     else if ( audioOutput == EPEBTAudioAccessory &&
   218               IsVoiceCallAlertingOrActiveL() &&
   165               IsVoiceCallAlertingOrActiveL() &&
   219               !coverHideSendEndKey )
   166               !coverHideSendEndKey )
   220         {
   167         {
   221         resourceId = EPhoneCallHandlingInCallHandsetCBA;
   168         resourceId = EPhoneCallHandlingInCallHandsetCBA;
   222         }
   169         }
   223 
       
   224     else if ( audioOutput == EPEWiredAudioAccessory ||
   170     else if ( audioOutput == EPEWiredAudioAccessory ||
   225               coverHideSendEndKey || iState->IsSwivelClosed() )
   171               coverHideSendEndKey || iState->IsSwivelClosed() )
   226         {
   172         {
   227         resourceId = EPhoneCallHandlingInCallNoIhfCBA;
   173         resourceId = EPhoneCallHandlingInCallNoIhfCBA;
   228         }
   174         }
   229 
       
   230     // Check BT availability
   175     // Check BT availability
   231     else if ( audioOutput == EPELoudspeaker )
   176     else if ( audioOutput == EPELoudspeaker )
   232         {
   177         {
   233         if ( btAvailable )
   178         if ( btAvailable )
   234             {
   179             {
   241         }
   186         }
   242     else if ( audioOutput == EPEHandset &&  btAvailable )
   187     else if ( audioOutput == EPEHandset &&  btAvailable )
   243         {
   188         {
   244         resourceId = EPhoneCallHandlingInCallBtaaCBA;
   189         resourceId = EPhoneCallHandlingInCallBtaaCBA;
   245         }
   190         }
   246 
       
   247     SetCbaL( resourceId );
   191     SetCbaL( resourceId );
   248     }
   192     }
   249 
   193 
   250 // -----------------------------------------------------------
   194 // -----------------------------------------------------------
   251 // CPhoneCbaManager::UpdateIncomingCbaL
   195 // CPhoneCbaManager::UpdateIncomingCbaL
   252 // -----------------------------------------------------------
   196 // -----------------------------------------------------------
   253 //
   197 //
   254 EXPORT_C void CPhoneCbaManager::UpdateIncomingCbaL( TInt aCallId )
   198 EXPORT_C void CPhoneCbaManager::UpdateIncomingCbaL( TInt aCallId )
   255     {
   199     {
   256     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::UpdateIncomingCbaL()" );
   200     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::UpdateIncomingCbaL()" );
   257 
       
   258     const TBool coverHideSendEndKey =
   201     const TBool coverHideSendEndKey =
   259         CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported(
   202         CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported(
   260             KTelephonyLVFlagCoverHideSendEndKey );
   203             KTelephonyLVFlagCoverHideSendEndKey );
   261 
   204 
   262     const TProfileRingingType ringingType =
   205     const TProfileRingingType ringingType =
   265     const TBool callIsAlerting =
   208     const TBool callIsAlerting =
   266             !(( ringingType == EProfileRingingTypeSilent ) ||
   209             !(( ringingType == EProfileRingingTypeSilent ) ||
   267               ( ringingType == EProfileRingingTypeBeepOnce ));
   210               ( ringingType == EProfileRingingTypeBeepOnce ));
   268 
   211 
   269     // Update soft reject flag
   212     // Update soft reject flag
   270     TBool softRejectActivated( ETrue );
   213     iSoftRejectStatus = ETrue;
   271     // VoIP calls do not support sms sending
   214     // VoIP calls do not support sms sending
   272     if ( iStateMachine.PhoneEngineInfo()->CallType( aCallId ) == EPECallTypeVoIP 
   215     if ( iStateMachine.PhoneEngineInfo()->CallType( aCallId ) == EPECallTypeVoIP 
   273         || iStateMachine.PhoneEngineInfo()->RemotePhoneNumber( aCallId ).Length() == 0 )
   216         || iStateMachine.PhoneEngineInfo()->RemotePhoneNumber( aCallId ).Length() == 0 )
   274         {
   217         {
   275         softRejectActivated = EFalse;
   218         iSoftRejectStatus = EFalse;
   276         }
   219         }
   277 
   220     
       
   221     TPhoneCmdParamBoolean dimSoftRejectParam;
       
   222     dimSoftRejectParam.SetBoolean( !iSoftRejectStatus );        
       
   223     iViewCommandHandle.ExecuteCommand(
       
   224             EPhoneViewSetSoftRejectDimmed, &dimSoftRejectParam );
       
   225     
   278     TInt incomingCbaResourceId;
   226     TInt incomingCbaResourceId;
   279 
   227 
   280     if ( iState->IsSwivelClosed() )
   228     if ( iState->IsSwivelClosed() )
   281         {
   229         {
   282         if ( !callIsAlerting || iRingtoneSilenced )
   230         if ( !callIsAlerting || iRingtoneSilenced )
   286         else
   234         else
   287             {
   235             {
   288             incomingCbaResourceId = EPhoneCallHandlingIncomingSwivelClosedCBA;
   236             incomingCbaResourceId = EPhoneCallHandlingIncomingSwivelClosedCBA;
   289             }
   237             }
   290         }
   238         }
   291 
       
   292     else if ( coverHideSendEndKey )
   239     else if ( coverHideSendEndKey )
   293         {
   240         {
   294         if ( callIsAlerting )
   241         if ( callIsAlerting )
   295             {
   242             {
   296             // Set CBA to Options..Silence
   243             // Set CBA to Options..Silence
   297             incomingCbaResourceId = EPhoneCallHandlingIncomingSliderCBA;
   244             incomingCbaResourceId = EPhoneCallHandlingIncomingSliderCBA;
   298             }
   245             }
   299         else if ( softRejectActivated )
   246         else if ( iSoftRejectStatus )
   300             {
   247             {
   301             // Set CBA for soft reject
   248             // Set CBA for soft reject
   302             incomingCbaResourceId = EPhoneCallHandlingIncomingSoftRejectSliderCBA;
   249             incomingCbaResourceId = EPhoneCallHandlingIncomingSoftRejectSliderCBA;
   303             }
   250             }
   304         else
   251         else
   305             {
   252             {
   306             // Set CBA to Options..Reject
   253             // Set CBA to Options..Reject
   307             incomingCbaResourceId = EPhoneCallHandlingIncomingSilentSliderCBA;
   254             incomingCbaResourceId = EPhoneCallHandlingIncomingSilentSliderCBA;
   308             }
   255             }
   309         }
   256         }
   310 
       
   311     else
   257     else
   312         {
   258         {
   313         if ( callIsAlerting )
   259         if ( callIsAlerting )
   314             {
   260             {
   315             incomingCbaResourceId = GetIncomingCallSilenceCBA( softRejectActivated );
   261             incomingCbaResourceId = GetIncomingCallSilenceCBA( iSoftRejectStatus );
   316             }
   262             }
   317         else if ( softRejectActivated )
   263         else if ( iSoftRejectStatus )
   318             {
   264             {
   319             // Set CBA for soft reject
   265             // Set CBA for soft reject
   320             incomingCbaResourceId = EPhoneCallHandlingIncomingSoftRejectCBA;
   266             incomingCbaResourceId = EPhoneCallHandlingIncomingSoftRejectCBA;
   321             }
   267             }
   322         else
   268         else
   323             {
   269             {
   324             incomingCbaResourceId = EPhoneCallHandlingIncomingRejectCBA;
   270             incomingCbaResourceId = EPhoneCallHandlingIncomingRejectCBA;
   325             }
   271             }
   326         }
   272         }
   327 
       
   328     SetCbaL( incomingCbaResourceId );
   273     SetCbaL( incomingCbaResourceId );
   329     }
   274     }
   330 
   275 
   331 // -----------------------------------------------------------
   276 // -----------------------------------------------------------
   332 // CPhoneCbaManager::SetCbaL
   277 // CPhoneCbaManager::SetCbaL
   333 // -----------------------------------------------------------
   278 // -----------------------------------------------------------
   334 //
   279 //
   335 EXPORT_C void CPhoneCbaManager::SetCbaL( TInt aResource )
   280 EXPORT_C void CPhoneCbaManager::SetCbaL( TInt aResource )
   336     {
   281     {
   337     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::SetCbaL()" );
   282     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::SetCbaL()" );
   338 
       
   339     __PHONELOG1( EBasic, EPhoneControl,
   283     __PHONELOG1( EBasic, EPhoneControl,
   340             "CPhoneCbaManager::SetCbaL : %d",aResource );
   284             "CPhoneCbaManager::SetCbaL : %d",aResource );
   341 
   285     if ( EPhoneCallHandlingIncomingRejectCBA == aResource ||
       
   286          EPhoneCallHandlingIncomingSoftRejectCBA == aResource )
       
   287         {
       
   288         SetSoftRejectDimmedFlag();
       
   289         }
       
   290     
   342     TPhoneCmdParamInteger integerParam;
   291     TPhoneCmdParamInteger integerParam;
   343     integerParam.SetInteger(
   292     integerParam.SetInteger(
   344         CPhoneMainResourceResolver::Instance()->ResolveResourceID(
   293         CPhoneMainResourceResolver::Instance()->ResolveResourceID(
   345         aResource ) );
   294         aResource ) );
   346     iViewCommandHandle.ExecuteCommandL( EPhoneViewUpdateCba,
   295     iViewCommandHandle.ExecuteCommandL( EPhoneViewUpdateCba,
   352 // -----------------------------------------------------------
   301 // -----------------------------------------------------------
   353 //
   302 //
   354 void CPhoneCbaManager::UpdateCbaSwivelStateChangedL()
   303 void CPhoneCbaManager::UpdateCbaSwivelStateChangedL()
   355     {
   304     {
   356     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::UpdateCbaSwivelStateChangedL()" );
   305     __LOGMETHODSTARTEND(EPhoneControl,"CPhoneCbaManager::UpdateCbaSwivelStateChangedL()" );
   357 
       
   358     TPhoneCmdParamCallStateData callStateData;
   306     TPhoneCmdParamCallStateData callStateData;
   359     callStateData.SetCallState( EPEStateRinging );
   307     callStateData.SetCallState( EPEStateRinging );
   360     iViewCommandHandle.HandleCommandL(
   308     iViewCommandHandle.HandleCommandL(
   361         EPhoneViewGetCallIdByState, &callStateData );
   309         EPhoneViewGetCallIdByState, &callStateData );
   362     TInt incomingCall = callStateData.CallId();
   310     TInt incomingCall = callStateData.CallId();
   389 TBool CPhoneCbaManager::IsVoiceCallAlertingOrActiveL()
   337 TBool CPhoneCbaManager::IsVoiceCallAlertingOrActiveL()
   390     {
   338     {
   391     __LOGMETHODSTARTEND( EPhoneControl,
   339     __LOGMETHODSTARTEND( EPhoneControl,
   392         "CPhoneCbaManager::IsVoiceCallAlertingOrActiveL()" );
   340         "CPhoneCbaManager::IsVoiceCallAlertingOrActiveL()" );
   393     TBool retVal = EFalse;
   341     TBool retVal = EFalse;
   394 
       
   395     // Fetch alerting call's id from view
   342     // Fetch alerting call's id from view
   396     TPhoneCmdParamCallStateData callStateData;
   343     TPhoneCmdParamCallStateData callStateData;
   397     callStateData.SetCallState( EPEStateConnecting );
   344     callStateData.SetCallState( EPEStateConnecting );
   398     iViewCommandHandle.HandleCommandL(
   345     iViewCommandHandle.HandleCommandL(
   399         EPhoneViewGetCallIdByState, &callStateData );
   346         EPhoneViewGetCallIdByState, &callStateData );
   400 
   347 
   401     if ( callStateData.CallId() > KErrNotFound )
   348     if ( callStateData.CallId() > KErrNotFound )
   402         {
   349         {
   403         TPECallType type = iStateMachine.PhoneEngineInfo()->CallType(
   350         TPECallType type = iStateMachine.PhoneEngineInfo()->CallType(
   404             callStateData.CallId() );
   351             callStateData.CallId() );
   405 
       
   406         if ( EPECallTypeCSVoice == type || EPECallTypeVoIP == type )
   352         if ( EPECallTypeCSVoice == type || EPECallTypeVoIP == type )
   407             {
   353             {
   408             retVal = ETrue;
   354             retVal = ETrue;
   409             }
   355             }
   410         }
   356         }
   413         // Fetch active call's id from view
   359         // Fetch active call's id from view
   414         TPhoneCmdParamCallStateData callStateData;
   360         TPhoneCmdParamCallStateData callStateData;
   415         callStateData.SetCallState( EPEStateConnected );
   361         callStateData.SetCallState( EPEStateConnected );
   416         iViewCommandHandle.HandleCommandL(
   362         iViewCommandHandle.HandleCommandL(
   417             EPhoneViewGetCallIdByState, &callStateData );
   363             EPhoneViewGetCallIdByState, &callStateData );
   418 
       
   419         if ( callStateData.CallId() > KErrNotFound )
   364         if ( callStateData.CallId() > KErrNotFound )
   420             {
   365             {
   421             TPECallType type = iStateMachine.PhoneEngineInfo()->CallType(
   366             TPECallType type = iStateMachine.PhoneEngineInfo()->CallType(
   422                  callStateData.CallId() );
   367                  callStateData.CallId() );
   423 
   368 
   445             "CPhoneCbaManager::SetRingtoneSilencedStatus - iRingtoneSilenced =%d", 
   390             "CPhoneCbaManager::SetRingtoneSilencedStatus - iRingtoneSilenced =%d", 
   446             iRingtoneSilenced  );
   391             iRingtoneSilenced  );
   447     }
   392     }
   448 
   393 
   449 // -----------------------------------------------------------
   394 // -----------------------------------------------------------
       
   395 // CPhoneCbaManager::SetSoftRejectStatus
       
   396 // -----------------------------------------------------------
       
   397 //
       
   398 void CPhoneCbaManager::SetSoftRejectStatus( TBool aSoftRejectStatus )
       
   399     {
       
   400     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCbaManager::SetSoftRejectStatus ()" );
       
   401     // Set the internal TBool variable
       
   402     iSoftRejectStatus = aSoftRejectStatus;
       
   403     __PHONELOG1( 
       
   404             EBasic, 
       
   405             EPhoneControl, 
       
   406             "CPhoneCbaManager::SetSoftRejectStatus - iSoftRejectStatus =%d", 
       
   407             iSoftRejectStatus  );
       
   408     }
       
   409 
       
   410 // -----------------------------------------------------------
       
   411 // CPhoneCbaManager::SoftRejectStatus
       
   412 // -----------------------------------------------------------
       
   413 //
       
   414 TBool CPhoneCbaManager::SoftRejectStatus()
       
   415     {
       
   416     return iSoftRejectStatus;
       
   417     }
       
   418 
       
   419 // -----------------------------------------------------------
   450 // CPhoneCbaManager::GetIncomingCallSilenceCBA
   420 // CPhoneCbaManager::GetIncomingCallSilenceCBA
   451 // -----------------------------------------------------------
   421 // -----------------------------------------------------------
   452 //
   422 //
   453 TInt CPhoneCbaManager::GetIncomingCallSilenceCBA( 
   423 TInt CPhoneCbaManager::GetIncomingCallSilenceCBA( 
   454         const TBool /*aSoftRejectActivated*/ )
   424         const TBool /*aSoftRejectActivated*/ )
   455     {
   425     {
   456     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCbaManager::GetIncomingCallSilenceCBA ()" );
   426     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCbaManager::GetIncomingCallSilenceCBA ()" );
   457     TInt ret = EPhoneCallHandlingIncomingCBA;
   427     return EPhoneCallHandlingIncomingCBA;
   458     return ret;
   428     }
   459     }
   429 
   460 
   430 // -----------------------------------------------------------
   461 // ======== LOCAL FUNCTIONS ========
   431 // CPhoneCbaManager::SetSoftRejectDimmedFlag
   462 
   432 // -----------------------------------------------------------
   463 
   433 //
       
   434 void CPhoneCbaManager::SetSoftRejectDimmedFlag()
       
   435     {
       
   436     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCbaManager::GetIncomingCallSilenceCBA ()" );
       
   437     TPhoneCmdParamCallStateData callStateData;
       
   438     callStateData.SetCallState( EPEStateRinging );
       
   439     iViewCommandHandle.HandleCommandL(
       
   440         EPhoneViewGetCallIdByState, &callStateData );
       
   441     TPhoneCmdParamBoolean dimSoftRejectParam;
       
   442     if ( callStateData.CallId() > KErrNotFound )
       
   443         {
       
   444         TBool privateNumber = iStateMachine.PhoneEngineInfo()->
       
   445                 RemotePhoneNumber( callStateData.CallId() ).Length() == 0;
       
   446         
       
   447         dimSoftRejectParam.SetBoolean( privateNumber || !iSoftRejectStatus );        
       
   448         }
       
   449     else
       
   450         {
       
   451         iSoftRejectStatus = ETrue;
       
   452         dimSoftRejectParam.SetBoolean( EFalse );
       
   453         }
       
   454     iViewCommandHandle.ExecuteCommand(
       
   455             EPhoneViewSetSoftRejectDimmed, &dimSoftRejectParam );
       
   456     }
       
   457 
       
   458