phoneapp/phoneuiview/src/cphoneaudiocontroller.cpp
branchRCL_3
changeset 81 c26cc2a7c548
parent 62 5266b1f337bd
equal deleted inserted replaced
73:e30d4a1b8bad 81:c26cc2a7c548
    17 
    17 
    18 
    18 
    19 // INCLUDE FILES
    19 // INCLUDE FILES
    20 #include <aknnavi.h>
    20 #include <aknnavi.h>
    21 #include <aknnavide.h>
    21 #include <aknnavide.h>
    22 
    22 #include <StringLoader.h>
    23 #include <avkon.rsg>
    23 #include <avkon.rsg>
    24 
    24 #include <phoneui.rsg>
    25 #include <telephonyvariant.hrh>
    25 #include <telephonyvariant.hrh>
    26 #include <eikenv.h>
    26 #include <eikenv.h>
    27 #include <eikappui.h>
    27 #include <eikappui.h>
    28 #include <AknUtils.h>
    28 #include <AknUtils.h>
    29 #include "cphoneaudiocontroller.h"
    29 #include "cphoneaudiocontroller.h"
    37 #include "phoneconstants.h"
    37 #include "phoneconstants.h"
    38 #include "phonelogger.h"
    38 #include "phonelogger.h"
    39 #include "phoneui.hrh"
    39 #include "phoneui.hrh"
    40 
    40 
    41 // CONSTANTS
    41 // CONSTANTS
       
    42 // Defines how long time volume control is shown when volume is changed 
       
    43 // while device is muted. Duration in microseconds.
       
    44 const TInt KPhoneDelayVolumeControlToDefaultAfterReleased = 1000000;
    42 
    45 
    43 // ================= MEMBER FUNCTIONS =======================
    46 // ================= MEMBER FUNCTIONS =======================
    44 // C++ default constructor can NOT contain any code, that
    47 // C++ default constructor can NOT contain any code, that
    45 // might leave.
    48 // might leave.
    46 //
    49 //
    76         R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
    79         R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
    77         
    80         
    78     // To get touch input, pen check in HandleControlEventL()
    81     // To get touch input, pen check in HandleControlEventL()
    79     iEarVolumeControl->DecoratedControl()->SetObserver( this );
    82     iEarVolumeControl->DecoratedControl()->SetObserver( this );
    80     iIhfVolumeControl->DecoratedControl()->SetObserver( this );            
    83     iIhfVolumeControl->DecoratedControl()->SetObserver( this );            
       
    84   
       
    85     // Create "muted" navi decorator
       
    86     HBufC* mutedText = StringLoader::LoadLC( R_PHONE_INCALL_MUTED_PANE );
       
    87     iMutedControl = iStatusPane->NaviPane().CreateMessageLabelL( *mutedText );
       
    88     CleanupStack::PopAndDestroy( mutedText );
       
    89         
       
    90     iNaviPaneUpdateTimer = CPhoneTimer::NewL();
    81 
    91 
    82     iActivateRecoveryId = CPhoneRecoverySystem::Instance()->AddL( 
    92     iActivateRecoveryId = CPhoneRecoverySystem::Instance()->AddL( 
    83         TCallBack( DoRecoverActivateL, this ),
    93         TCallBack( DoRecoverActivateL, this ),
    84         CTeleRecoverySystem::EPhonePriorityStandard,
    94         CTeleRecoverySystem::EPhonePriorityStandard,
    85         CTeleRecoverySystem::EPhoneStateIdle );   
    95         CTeleRecoverySystem::EPhoneStateIdle );   
   109 CPhoneAudioController::~CPhoneAudioController()
   119 CPhoneAudioController::~CPhoneAudioController()
   110     {
   120     {
   111     CCoeEnv::Static()->RemoveForegroundObserver( *this );
   121     CCoeEnv::Static()->RemoveForegroundObserver( *this );
   112     CPhoneRecoverySystem::Remove( iActivateRecoveryId );
   122     CPhoneRecoverySystem::Remove( iActivateRecoveryId );
   113      
   123      
       
   124     delete iNaviPaneUpdateTimer;   
       
   125     delete iMutedControl;
   114     delete iIhfVolumeControl;
   126     delete iIhfVolumeControl;
   115     delete iEarVolumeControl;
   127     delete iEarVolumeControl;
   116     }
   128     }
   117 
   129 
   118 // ---------------------------------------------------------
   130 // ---------------------------------------------------------
   124     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::ActivateVolumeControlL()");
   136     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::ActivateVolumeControlL()");
   125     iVolumeControlCount++;
   137     iVolumeControlCount++;
   126     if ( iVolumeControlCount == 1 ) // First time activation
   138     if ( iVolumeControlCount == 1 ) // First time activation
   127         {
   139         {
   128         // Decide whether decorator should be Ear or ihf decorator
   140         // Decide whether decorator should be Ear or ihf decorator
   129         CAknNavigationDecorator& selectedVolumeDecorator =VolumeDecorator();  
   141         CAknNavigationDecorator& selectedDecorator = SelectDecoratorL(); 
   130         PushL( selectedVolumeDecorator ); 
   142         PushL( selectedDecorator ); 
   131         }
   143         }
   132     }
   144     }
   133 
   145 
   134 // ---------------------------------------------------------
   146 // ---------------------------------------------------------
   135 // CPhoneAudioController::DoRecoverUpdateL
   147 // CPhoneAudioController::DoRecoverUpdateL
   154     {
   166     {
   155     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::ActivateL()");
   167     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::ActivateL()");
   156     
   168     
   157     if( iVolumeControlCount )
   169     if( iVolumeControlCount )
   158         {
   170         {
   159         // Decide whether decorator should be Ear, Ihf decorator
   171         // Decide whether decorator should be Ear, Ihf or Muted decorator
   160         CAknNavigationDecorator& selectedVolumeDecorator = VolumeDecorator(); 
   172         CAknNavigationDecorator& selectedDecorator = SelectDecoratorL(); 
   161         PushL( selectedVolumeDecorator );                    
   173         PushL( selectedDecorator );     
   162         TInt volumeLevel = VolumeLevel();             
   174         
   163         SetVolumeLevel( VolumeControl(), volumeLevel );                       
   175         if( &selectedDecorator != iMutedControl )
       
   176             {            
       
   177             TInt volumeLevel = VolumeLevel(); 
       
   178             
       
   179             SetVolumeLevel( VolumeControl(), volumeLevel );                 
       
   180             }      
   164         }
   181         }
   165     }
   182     }
   166     
   183     
   167 // ---------------------------------------------------------
   184 // ---------------------------------------------------------
   168 // CPhoneAudioController::DeactivateVolumeControl
   185 // CPhoneAudioController::DeactivateVolumeControl
   205         iIhfVolume = volumeParam->Integer();
   222         iIhfVolume = volumeParam->Integer();
   206         }
   223         }
   207     else
   224     else
   208         {
   225         {
   209         iEarVolume = volumeParam->Integer();
   226         iEarVolume = volumeParam->Integer();
       
   227         }
       
   228     
       
   229     if( iMuted )
       
   230         {
       
   231         // Enable timed control transition in muted state    
       
   232         iTimedMuteTransferPending = ETrue; 
       
   233         }
       
   234     else
       
   235         {        
       
   236         iTimedMuteTransferPending = EFalse; 
   210         }
   237         }
   211      
   238      
   212     // Activate the approriate volume control
   239     // Activate the approriate volume control
   213     CPhoneRecoverySystem::Instance()->RecoverNow( 
   240     CPhoneRecoverySystem::Instance()->RecoverNow( 
   214         iActivateRecoveryId, 
   241         iActivateRecoveryId, 
   215         CTeleRecoverySystem::EPhonePriorityStandard );
   242         CTeleRecoverySystem::EPhonePriorityStandard );
   216     
   243 
       
   244     if( iTimedMuteTransferPending )    
       
   245         {
       
   246         iTimedMuteTransferPending = EFalse;     
       
   247         
       
   248         // Cancel any pending request
       
   249         iNaviPaneUpdateTimer->CancelTimer();
       
   250 
       
   251         // Activate change to Muted decorator after given delay        
       
   252         iNaviPaneUpdateTimer->After(                    
       
   253             KPhoneDelayVolumeControlToDefaultAfterReleased,
       
   254             TCallBack( DoUpdateNaviPaneToDefault, this ) );           
       
   255         }
   217     }
   256     }
   218     
   257     
   219 // ---------------------------------------------------------
   258 // ---------------------------------------------------------
   220 // CPhoneAudioController::HandleIhfChange
   259 // CPhoneAudioController::HandleIhfChange
   221 //
   260 //
   228     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::HandleIhfChange()");
   267     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::HandleIhfChange()");
   229     TPhoneCmdParamBoolean* booleanParam =
   268     TPhoneCmdParamBoolean* booleanParam =
   230         static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
   269         static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
   231     
   270     
   232     iIhfMode = booleanParam->Boolean();    
   271     iIhfMode = booleanParam->Boolean();    
       
   272     
       
   273     // Set state transition flag 
       
   274     iIhfTransferPending = ETrue; 
       
   275     }
       
   276     
       
   277 // ---------------------------------------------------------
       
   278 // CPhoneAudioController::HandleMuteChange
       
   279 //
       
   280 // Updates incall indicator according to current call state.
       
   281 // ---------------------------------------------------------
       
   282 //
       
   283 void CPhoneAudioController::HandleMuteChange(
       
   284     TPhoneCommandParam* aCommandParam )
       
   285     {
       
   286     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::HandleMuteChange()");
       
   287     TPhoneCmdParamBoolean* booleanParam =
       
   288         static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
       
   289 
       
   290     iMuted = booleanParam->Boolean();
       
   291     
       
   292     // Decide whether decorator should be ear, ihf or muted decorator
       
   293     TRAP_IGNORE( PushL( SelectDecoratorL() ) );
   233     }
   294     }
   234     
   295     
   235 // -----------------------------------------------------------------------------
   296 // -----------------------------------------------------------------------------
   236 // CPhoneAudioController::PushL
   297 // CPhoneAudioController::PushL
   237 // -----------------------------------------------------------------------------
   298 // -----------------------------------------------------------------------------
   253 
   314 
   254     if ( err == KErrNone )
   315     if ( err == KErrNone )
   255         {
   316         {
   256         iOldControl = &aNew;
   317         iOldControl = &aNew;
   257         }
   318         }
       
   319     }
       
   320 
       
   321 // -----------------------------------------------------------------------------
       
   322 // CPhoneAudioController::DoUpdateNaviPaneToDefault
       
   323 // -----------------------------------------------------------------------------
       
   324 //
       
   325 TInt CPhoneAudioController::DoUpdateNaviPaneToDefault( TAny* aAny )
       
   326     {
       
   327     __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneAudioController::DoUpdateNaviPaneToDefault()");
       
   328     CPhoneAudioController* self = static_cast< CPhoneAudioController* >( aAny );
       
   329     CPhoneRecoverySystem::Instance()->RecoverNow( 
       
   330         self->iActivateRecoveryId, 
       
   331         CTeleRecoverySystem::EPhonePriorityStandard );
       
   332     return KErrNone;
   258     }
   333     }
   259 
   334 
   260 // -----------------------------------------------------------------------------
   335 // -----------------------------------------------------------------------------
   261 // CPhoneAudioController::HandleControlEventL
   336 // CPhoneAudioController::HandleControlEventL
   262 // -----------------------------------------------------------------------------
   337 // -----------------------------------------------------------------------------
   365         
   440         
   366     return volumeLevel;
   441     return volumeLevel;
   367     }
   442     }
   368 
   443 
   369 // -----------------------------------------------------------------------------
   444 // -----------------------------------------------------------------------------
       
   445 // CPhoneAudioController::SelectDecoratorL
       
   446 // -----------------------------------------------------------------------------
       
   447 //    
       
   448 CAknNavigationDecorator& CPhoneAudioController::SelectDecoratorL()
       
   449     {
       
   450     __LOGMETHODSTARTEND( EPhoneUIView,"CPhoneAudioController::SelectDecoratorL()" );                                     
       
   451     CAknNavigationDecorator* newDecorator = NULL;    
       
   452     if ( !iMuted )
       
   453         {
       
   454         __PHONELOG( EBasic, EPhoneUIView,"CPhoneAudioController::SelectDecoratorL() - volume decorator " );     
       
   455         newDecorator = &VolumeDecorator();
       
   456         }
       
   457     else 
       
   458         {
       
   459         if ( iIhfTransferPending || !iTimedMuteTransferPending )
       
   460             {
       
   461             __PHONELOG( EBasic, EPhoneUIView,"CPhoneAudioController::SelectDecoratorL() - muted decorator " );         
       
   462             newDecorator = iMutedControl;    
       
   463             }            
       
   464         else 
       
   465             {
       
   466             __PHONELOG( EBasic, EPhoneUIView,"CPhoneAudioController::SelectDecoratorL() - volume decorator " );         
       
   467             newDecorator = &VolumeDecorator();
       
   468             
       
   469             // In muted state the volume decorator must be first 
       
   470             // pushed to container to enable volume popup showing 
       
   471             PushL( *newDecorator );             
       
   472             }
       
   473         }
       
   474 
       
   475     // Clear IHF transfer flag. 
       
   476     iIhfTransferPending = EFalse;
       
   477            
       
   478     return *newDecorator;         
       
   479     }
       
   480 
       
   481 // -----------------------------------------------------------------------------
   370 // CPhoneAudioController::SetVolumeLevel
   482 // CPhoneAudioController::SetVolumeLevel
   371 // -----------------------------------------------------------------------------
   483 // -----------------------------------------------------------------------------
   372 //    
   484 //    
   373 void CPhoneAudioController::SetVolumeLevel(
   485 void CPhoneAudioController::SetVolumeLevel(
   374     CAknVolumeControl& aVolumeControl, 
   486     CAknVolumeControl& aVolumeControl,