mmsharing/mmshui/src/musuieventcontroller.cpp
branchRCL_3
changeset 33 bc78a40cd63c
child 41 755f0370535b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshui/src/musuieventcontroller.cpp	Wed Sep 01 12:31:01 2010 +0100
@@ -0,0 +1,1124 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Application's UI class.
+*
+*/
+
+
+
+#include "musuieventcontroller.h"
+#include "musuieventobserver.h"
+#include "musuisharingobserver.h"
+#include "musuipropertywatch.h"
+#include "musuicallbackservice.h"
+#include "musuiactivitymanger.h"
+#include "musuifileutil.h"
+#include "musuidialogutil.h"
+#include "musuicontactutil.h"
+#include "mussessionproperties.h"
+#include "musuibitmapdecoder.h"
+#include "muscommon.h"
+#include "mussettings.h"
+#include "musenguriparser.h"
+#include "musuimmcmonitor.h"
+#include "musresourceproperties.h"
+#include "musuiresourcehandler.h"
+#include "musui.hrh"
+#include "muslogger.h" // debug logging
+#include "musuigeneralview.h"
+
+#include "musengmcesession.h"
+
+#include <musui.rsg>
+
+#include <fbs.h>
+#include <e32property.h>
+
+#include <StringLoader.h>
+#include <pathinfo.h>
+#include <featmgr.h>
+#include <bldvariant.hrh> // for feature definitions
+#include <pathconfiguration.hrh>
+
+#include <hlplch.h> // HlpLauncher
+#include <AknUtils.h>
+#include <telmicmutestatuspskeys.h>
+
+using namespace MusSettingsKeys;
+using namespace NMusSessionApi;
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiEventController::~CMusUiEventController()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::~CMusUiEventController" );
+    delete iStatusPropertyWatch;    
+    delete iContactName;
+    delete iTelNumber;
+    delete iVideoCodec;
+    delete iDialogPrompt;
+    delete iCallbackService;
+    delete iMmcMonitor;
+    delete iActivityManager;
+    delete iMicMuteStatusPropertyWatch;
+    FeatureManager::UnInitializeLib();
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::~CMusUiEventController" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::ConstructL()
+    {
+   MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::ConstructL" );
+
+    TInt error( KErrNotFound );
+
+    FeatureManager::InitializeLibL();
+
+    iCallbackService = CMusUiCallbackService::NewL( *this );
+
+    // read ps properties (no need to read again later)
+
+    TRAP( error, iVideoCodec = CMusUiPropertyWatch::ReadDescPropertyL(
+                            KVideoCodecs ) );
+    if ( error != KErrNone )
+        {
+        iVideoCodec = KNullDesC().AllocL();
+        }
+
+    TRAP( error, iTelNumber = CMusUiPropertyWatch::ReadDescPropertyL(
+                            KTelNumber ) );
+    if ( error != KErrNone )
+        {
+        iTelNumber = KNullDesC().AllocL();
+        }
+
+    TRAP( error, iSipProfileId = CMusUiPropertyWatch::ReadIntPropertyL(
+                            NMusSessionApi::KSipProfileId ) );
+    if ( error != KErrNone )
+        {
+        iSipProfileId = KErrNotFound;
+        }
+
+    TRAP( error,
+          iContactId = CMusUiPropertyWatch::ReadIntPropertyL( KContactId ) );
+    if ( error != KErrNone )
+        {
+        iContactId = KErrNotFound;
+        }
+
+    TRAP( error, iContactName = CMusUiPropertyWatch::ReadDescPropertyL(
+                            KContactName ) );
+
+    if ( error != KErrNone )
+        {
+        iContactName = KNullDesC().AllocL();
+        }
+    
+    // follow session status property
+    iStatusPropertyWatch = CMusUiPropertyWatch::NewL(
+                            *this,
+                            NMusSessionApi::KCategoryUid,
+                            KStatus );
+
+    iMmcMonitor = CMusUiMmcMonitor::NewL( *this );
+
+    iResourceHandler = iEventObserver.ResourceHandler();
+    __ASSERT_ALWAYS( iResourceHandler, User::Leave( KErrNotFound ) );
+    
+    //Mic mute status property
+    iMicMuteStatusPropertyWatch = CMusUiPropertyWatch::NewL(
+							*this,
+							KPSUidTelMicrophoneMuteStatus,
+							KTelMicrophoneMuteState );
+
+    // start monitoring activity
+    iActivityManager = CMusUiActivityManager::NewL( KMusBacklightTimeOut );
+    iActivityManager->Reset();
+
+    // check if operator specific functionality is needed  
+    iOperatorSpecificFunctionality = 
+        ( MultimediaSharingSettings::OperatorVariantSettingL() == 
+                                                    EOperatorSpecific );
+
+    iShutdownState = EMusUiShutdownNotDefined;
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::ConstructL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiEventController::CMusUiEventController(
+                            MMusUiEventObserver& aEventObserver,
+                            MMusUiSharingObserver& aSharingObserver )
+    : iEventObserver( aEventObserver ),
+      iSharingObserver( aSharingObserver ),
+	  iForeground( ETrue ),
+	  iShowDialog( EFalse ),
+	  iActiveCall( ETrue )
+	  
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// Called by CMusUiPropertyWatch, when resource key values change in P&S
+// Sets the member values common to all sharing types.
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::PropertyChanged( const TUint aKey,
+                                                     const TInt aValue )
+    {
+    MUS_LOG2( "mus: [MUSUI ] -> CMusUiEventController::ResourcePropertyChanged:\
+              aKey: [%u] aValue: [%d]", aKey, aValue );
+    switch( aKey )
+        {
+    	case KTelMicrophoneMuteState:
+    		{
+		  if ( aValue ==  EPSTelMicMuteOff)
+			  {
+			  iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute,
+												   EMusuiCmdToolbarMute,ETrue );
+			  }
+		  else if ( aValue == EPSTelMicMuteOn )
+			  {
+			  iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute,
+												 EMusuiCmdToolbarUnmute,ETrue );
+			  }
+			break;
+    		}
+        case KStatus:
+            {
+            TRAP_IGNORE(
+                    HandleChangedStatusL( ( TMusAvailabilityStatus ) aValue ) );
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::ResourcePropertyChanged" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandlePropertyError( const TInt aReason )
+    {
+    MUS_LOG1( "mus: [MUSUI ]     -> CMusUiEventController::HandleError [%d]",
+                            aReason );
+    
+    HandleError( aReason );
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleError" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleAsyncEventL( TMusUiAsyncEvent aEventId )
+    {
+    MUS_LOG1( "mus: [MUSUI ] -> CMusUiEventController::HandleAsyncEventL [%d]",
+              aEventId );
+    
+    switch ( aEventId )
+        {
+        case EMusUiAsyncHandleExit:
+            {
+            MUS_LOG( "mus: [MUSUI ]   CMusUiEventController::\
+                                    HandleAsyncEventL: EMusUiAsyncHandleExit" );
+            HandleExitL();
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiEventController::HandleAsyncEventL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiEventController::HandleAsyncError( TInt aError )
+    {
+    iEventObserver.HandleError( aError ); // Stop the execution
+    
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::MmcRemoved()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::MmcRemoved" );
+    TRAP_IGNORE( MusUiDialogUtil::ShowInformationDialogL( 
+                            R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED ) )
+                            
+    iEventObserver.HandleExit();
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::MmcRemoved" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::SessionEstablished()
+    {
+    TRAPD( error, iSharingObserver.ShowStatusPaneTitleL() )
+    
+    if ( error != KErrNone )    
+        {
+        iEventObserver.HandleError( error );
+        }
+
+    if ( MUS_NO_TOOLBAR )
+        {
+        TRAPD( error, iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ? 
+                            R_MUSUI_VIEW_OPS_MSK_IHF_OFF :
+                            R_MUSUI_VIEW_OPS_MSK_IHF_ON ));
+        if ( error != KErrNone )    
+            {
+            iEventObserver.HandleError( error );
+            }        
+        }
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::AudioRoutingChanged( TBool aShowNote )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::AudioRoutingChanged" );
+    
+    if ( aShowNote )
+        {
+        if ( IsLoudSpeakerEnabled() )
+            {
+            MUS_LOG( "mus: [MUSUI ]     show activated note" );
+            TRAP_IGNORE( 
+            	MusUiDialogUtil::ShowGlobalInformationDialogL( R_MUS_NOTE_HF_ACTIVATED ) )
+            }
+        }
+    
+    iSharingObserver.RefreshAudioRoutingToolbarButton();
+      
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::AudioRoutingChanged" );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::AudioRouteChangeAllowed() const
+    {
+    // Do not allow audio routing if call has ended
+    return iActiveCall;
+    }
+    
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::VolumeChanged( TInt aVolume, TBool aAudioRouteChanged )
+    {
+    // Set Volume:
+    //If volume changed due to audio route change, we want to update volume
+    //popup control only if it is already visible
+    TBool onlyIfVisible = aAudioRouteChanged;
+    TRAP_IGNORE( iSharingObserver.ActivateVolumeControlL(aVolume, onlyIfVisible) );
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::SetRect(const TRect& aRect)
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::SetRect" );
+    
+    if ( EngineSession() )
+        {
+        TRAPD( err, EngineSession()->SetRectL( aRect ) );
+        if ( err != KErrNone )
+            {
+            iEventObserver.HandleError( err );
+            }
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::SetRect" );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CMusUiEventController::MusContactName()
+    {
+    return *iContactName;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CMusUiEventController::MusVideoCodecValue()
+    {
+    return *iVideoCodec;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CMusUiEventController::MusTelNumberValue()
+    {
+    MUS_LOG_TDESC("mus: [MUSUI ] <> CMusUiEventController::MusTelNumberValue()",
+                   iTelNumber->Des() )
+    return *iTelNumber;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CMusUiEventController::SessionTimeFormatted(
+                        const TTimeIntervalSeconds& aSeconds )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::SessionTimeFormatted" );
+    iTimeBuffer.SetLength( 0 );
+    TLocale locale;
+    _LIT( KZeroSymbol, "0" );
+    TInt sessionHours( 0 );
+    TInt sessionMinutes( 0 );
+    TInt sessionSeconds( aSeconds.Int() );
+    if ( aSeconds.Int() > ( KMusOneMinuteInSeconds - 1 ) )
+        {
+        sessionMinutes = (int)(aSeconds.Int() / KMusOneMinuteInSeconds );
+        sessionSeconds = sessionSeconds - ( sessionMinutes * KMusOneMinuteInSeconds );
+        }
+    if ( sessionMinutes > ( KMusOneMinuteInSeconds - 1 ) )
+        {
+        sessionHours = (int)( sessionMinutes / KMusOneMinuteInSeconds );
+        sessionMinutes = sessionMinutes - ( sessionHours * KMusOneMinuteInSeconds );
+        }
+    if ( sessionHours != 0 )
+        {
+        iTimeBuffer.AppendNum( sessionHours );
+        iTimeBuffer.Append( locale.TimeSeparator( KMusLocaleHoursAndMinutesSeparator ) );
+        if ( sessionMinutes < KMusNumberValueTen )
+            {
+            iTimeBuffer.Append( KZeroSymbol );
+            }
+        }
+
+    iTimeBuffer.AppendNum( sessionMinutes );
+    iTimeBuffer.Append( locale.TimeSeparator( KMusLocaleMinutesAndSecondsSeparator ) );
+    if ( sessionSeconds < KMusNumberValueTen )
+        {
+        iTimeBuffer.Append( KZeroSymbol );
+        }
+    iTimeBuffer.AppendNum( sessionSeconds );
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::SessionTimeFormatted" );
+    return iTimeBuffer;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::SaveContactQueryL()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::SaveContactQueryL" );
+    if ( !MusUiContactUtil::ShareViewFieldExistsL( *iEventObserver.EikonEnv(), 
+                                                   iContactId ) )
+        {
+        delete iDialogPrompt;
+        iDialogPrompt = NULL;
+        iDialogPrompt = StringLoader::LoadL( R_MUS_VIEW_SAVE_ADDRESS_QUERY_TXT );
+        iEventObserver.ShowAsyncConfirmationQueryDialogL( *iDialogPrompt );
+        }
+    else
+        {
+        AsyncQueryDialogAcceptedL( EFalse );
+        }
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::SaveContactQueryL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleError( const TInt aError )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiEventController::HandleError %d", 
+              aError );
+
+    iEventObserver.HandleError( aError );
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleError" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::ExitOccured()
+    {
+    return ( iShutdownState != EMusUiShutdownNotDefined );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::AudioRoutingCanBeChanged()
+    {
+    return ( EngineSession() && EngineSession()->AudioRoutingCanBeChanged() );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::IsLoudSpeakerEnabled()
+    {
+    return ( EngineSession() && EngineSession()->IsLoudSpeakerEnabled() );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::DeviceHasDedicatedVolumeKeys()
+    {
+    return FeatureManager::FeatureSupported( KFeatureIdSideVolumeKeys );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleExitL( TBool aTerminateCall )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::HandleExitL" );
+    if ( iShutdownState == EMusUiShutdownNotDefined )
+        {
+        iShutdownState = EMusUiShutdownStarted;
+        
+        if ( iStatusPropertyWatch )
+            {
+            iStatusPropertyWatch->Cancel();    
+            }
+        
+        if ( iMmcMonitor )
+            {
+            iMmcMonitor->Cancel();    
+            }
+        
+        if ( iActivityManager )
+            {
+            iActivityManager->Cancel();    
+            }
+        
+        if ( iCallbackService )
+            {
+            iCallbackService->Cancel();    
+            }
+
+        iEventObserver.SetToolbarVisibility( EFalse );
+        
+        // This must be done before showing the end note, because showing of
+        // note may cause the session to continue for extra few seconds.
+        DeleteEngineSession();
+        if ( iShowDialog )
+        	{
+            MusUiDialogUtil::ShowGlobalInformationDialogL( 
+            		                 R_MUS_NOTE_HF_DEACTIVATED );
+        	}
+        // Sharing Ended note
+        MusUiDialogUtil::ShowGlobalInformationDialogL( 
+                                R_MUS_LIVE_SHARING_VIEW_NOTE_SHARING_ENDED );
+        
+        if( aTerminateCall )
+			{
+			iEventObserver.TerminateCall();
+			}
+
+        // TODO: Continue Recording query, if sharing live video and receiving end
+        //    terminates the sharing session
+
+        ExitProcedureL( EFalse );
+
+        }
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleExitL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::ExitProcedureL( TBool aUserAcceptance )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::ExitProcedureL" );
+    
+    iSharingObserver.DismissMenuBar();
+    
+    switch ( iShutdownState )
+        {
+        case EMusUiShutdownStarted: 
+            {
+            MUS_LOG( "mus: [MUSUI ]     ExitProcedureL: EMusUiShutdownStarted" );
+            // No general functionality, skip the state
+            iShutdownState = EMusUiShutdownVideoSaved;
+            ExitProcedureL( EFalse );
+            break;
+            }
+        case EMusUiShutdownVideoSaved:
+            {
+            MUS_LOG( "mus: [MUSUI ]     ExitProcedureL: EMusuiShutdownVideoSaved" );
+            iEventObserver.HandleExit();
+            break;
+            }
+
+        case EMusUiShutdownContactSavingQueried:
+            {
+            MUS_LOG( "mus: [MUSUI ]     ExitProcedureL: EMusUiShutdownContactSavingQueried" );
+            // Stop app execution
+            if ( aUserAcceptance )
+                {
+                if ( iResourceHandler->RequestKeypadL( EFalse ) )
+                	{
+                		MusUiContactUtil::ActivateContactViewL( 
+                                                    *iEventObserver.EikonEnv(), 
+                                                    iContactId, 
+                                                    TypedAddress(), 
+                                                    MusTelNumberValue() );
+                	}
+                }
+            iEventObserver.HandleExit();
+            break;
+            }
+        case EMusUiShutdownOver:
+            {
+            iEventObserver.HandleExit();
+            break;
+            }
+        case EMusUiShutdownNotDefined:
+        default:
+            {
+            break;
+            }
+        }
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::ExitProcedureL" );
+    }
+    
+    
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::AsyncQueryDialogAcceptedL( TBool aAccepted )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::AsyncQueryDialogAcceptedL" );
+    
+    if ( ExitOccured() )
+        {
+        ExitProcedureL( aAccepted );
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::AsyncQueryDialogAcceptedL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::ConnectionEstablished() const
+    {
+    return iConnectionEstablished;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::SetConnectionInitialized( 
+    TBool aConnectionInitialized )
+    {
+    MUS_LOG1( 
+        "mus: [MUSUI ]  -> CMusUiEventController::SetConnectionInitialized ( %d )", 
+        aConnectionInitialized );
+    
+    iConnectionInitialized = aConnectionInitialized;
+    
+    if ( !iForeground && !ExitOccured() )
+        {
+        TRAP_IGNORE( EnableDisplayL(EFalse) )
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::ConnectionInitialized() const
+    {
+    return iConnectionInitialized;
+    }
+    
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::EnableDisplayL( TBool aEnable )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::EnableDisplayL" );
+    if ( EngineSession() )
+        {
+        EngineSession()->EnableDisplayL( aEnable );
+        }
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::EnableDisplayL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::ChangeOrientationL( 
+                        CAknAppUiBase::TAppUiOrientation aOrientation )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::ChangeOrientationL" );
+    iEventObserver.SwitchOrientationL( aOrientation );
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::ChangeOrientationL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::IsDisplayEnabledL()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::IsDisplayEnabledL" );
+    TBool ret = EFalse;
+    if ( EngineSession() )
+        {
+        ret = EngineSession()->IsDisplayEnabledL();
+        }
+    MUS_LOG1( "mus: [MUSUI ]  <- CMusUiEventController::IsDisplayEnabledL, %d", ret );
+    return ret;   
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::IsAudioRoutingLoudSpeaker()
+	{
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::IsAudioRoutingLoudSpeaker" );
+    TBool ret = EFalse;
+    if ( EngineSession() )
+        {
+        ret = EngineSession()->IsAudioRoutingLoudSpeaker();
+        }
+    MUS_LOG1( "mus: [MUSUI ]  <- CMusUiEventController::IsAudioRoutingLoudSpeaker, %d", ret );
+    return ret;   
+	}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::ToolbarVolumeSelected()
+    {
+    return iToolbarVolumeSelected;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::IsMicMutedL()
+    {
+    __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) );
+    
+    return EngineSession()->IsMicMutedL();
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::ManualAddressTyped() const
+    {
+    return EFalse;
+    }    
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleForegroundEventL( TBool aForeground )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::HandleForegroundEventL" );
+    
+    iForeground = aForeground;
+
+    if ( ConnectionInitialized() &&  !ExitOccured() )
+        {
+        EnableDisplayL( aForeground );
+        
+        // Change toolbar according to a real state. Other items than speaker
+        // and mic states cannot be changed from phone app and thus there is
+        // no need to check them
+        if ( aForeground )
+            {
+            if ( MUS_NO_TOOLBAR )
+                {
+                iSharingObserver.EnableMiddleSoftkeyL( IsLoudSpeakerEnabled() ?
+                                            R_MUSUI_VIEW_OPS_MSK_IHF_OFF :
+                                            R_MUSUI_VIEW_OPS_MSK_IHF_ON );
+                }
+            else
+                {
+                if ( IsMicMutedL() )
+                    {
+                    iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute,
+                                                            EMusuiCmdToolbarUnmute,
+                                                            EFalse );
+                    }
+                else
+                    {
+                    iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute,
+                                                            EMusuiCmdToolbarMute,
+                                                            EFalse );
+                    }
+                
+                if ( IsLoudSpeakerEnabled() )
+                    {
+                    iSharingObserver.ReplaceToolbarCommand( 
+                                                        EMusuiCmdToolbarSpeakerOn,
+                                                        EMusuiCmdToolbarSpeakerOff,
+                                                        EFalse );
+                    }
+                else
+                    {
+                    iSharingObserver.ReplaceToolbarCommand( 
+                                                        EMusuiCmdToolbarSpeakerOff,
+                                                        EMusuiCmdToolbarSpeakerOn,
+                                                        EFalse );
+                    }          
+               if ( ConnectionEstablished() )
+                    {
+                    iEventObserver.SetToolbarVisibility( aForeground );
+                    }
+               
+                }            
+            }
+            
+        }
+    
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleForegroundEventL" );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiEventController::IsForeground() const
+    {
+    return iForeground;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::OfferToolbarEventL( TInt aCommand )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiEventController::OfferToolbarEventL [%d]",
+              aCommand );
+    
+    __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) );
+
+    switch ( aCommand )
+        {
+        case EMusuiCmdToolbarVolume:
+            {
+            iToolbarVolumeSelected = !iToolbarVolumeSelected;
+            iSharingObserver.HighlightSelectedToolbarItem( 
+                                                EMusuiCmdToolbarVolume );
+            iSharingObserver.ActivateVolumeControlL( 
+                                            EngineSession()->VolumeL() );
+            break;
+            }  
+        case EMusuiCmdToolbarMute:
+            {       
+            EngineSession()->MuteMicL( ETrue );
+            iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarMute,
+                                                    EMusuiCmdToolbarUnmute,
+                                                    ETrue );
+            break;
+            }
+        case EMusuiCmdToolbarUnmute:
+            {
+            EngineSession()->MuteMicL( EFalse );
+            iSharingObserver.ReplaceToolbarCommand( EMusuiCmdToolbarUnmute,
+                                                    EMusuiCmdToolbarMute,
+                                                    ETrue );
+            break;
+            }
+        case EMusuiCmdToolbarSpeakerOff:
+            {
+            EngineSession()->EnableLoudspeakerL( ELoudspeakerDisabled, EFalse );
+            // Toolbar will be changed when asynchronous request is completed
+            break;
+            }
+        case EMusuiCmdToolbarSpeakerOn:
+            {
+            EngineSession()->EnableLoudspeakerL( ELoudspeakerEnabled, EFalse );
+            // Toolbar will be changed when asynchronous request is completed
+            break;     
+            }
+        default:    // Never should be the case
+            {
+            HandleExitL();
+            break;
+            }
+                
+        }
+    
+    MUS_LOG1( "mus: [MUSUI ]  <- CMusUiEventController::OfferToolbarEventL [%d]",
+              aCommand );
+                                                            
+    }
+
+
+// -----------------------------------------------------------------------------
+// Handles commands common to all sharing types.
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleCommandL( TInt aCommand )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::HandleCommandL" );
+    
+    switch ( aCommand )
+        {
+        case EMusuiCmdViewVolumeUp:
+            {
+            // Set Volume:
+            __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) );
+            EngineSession()->VolumeUpL();
+            // Status pane update will be done later. When we get 
+			// VolumeChanged() callback
+            break;
+            }
+        case EMusuiCmdViewVolumeDown:
+            {
+            // Set Volume:
+            __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) );
+            EngineSession()->VolumeDownL();
+            // Status pane update will be done later. When we get 
+			// VolumeChanged() callback
+            break;
+            }
+        case EMusuiCmdViewVolumeChanged:
+            {
+            __ASSERT_ALWAYS( EngineSession(), User::Leave( KErrNotReady ) );
+            TInt volumeFromEngine = EngineSession()->VolumeL();
+            TInt volumeFromUi = iEventObserver.GetUiVolumeValue();
+            if ( volumeFromUi != volumeFromEngine )
+                {
+                EngineSession()->SetVolumeL( volumeFromUi );
+                }
+            break;
+            }
+           
+        case EMusuiCmdViewLoadspeaker:
+            {
+            EngineSession()->EnableLoudspeakerL( ELoudspeakerEnabled, ETrue );
+            break;
+            }
+            
+        case EMusuiCmdViewHandset:
+            {
+            EngineSession()->EnableLoudspeakerL( ELoudspeakerDisabled, ETrue );
+            break;
+            }
+
+        case EMusuiCmdViewMicrophoneMute:
+            {
+            EngineSession()->MuteMicL( ETrue );
+            break;            
+            }
+            
+        case EMusuiCmdViewMicrophoneUnmute:
+            {
+            EngineSession()->MuteMicL( EFalse );
+            break;
+            }
+           
+        case EMusuiCmdViewEndActiveCall:
+            {
+            MUS_LOG( "mus: [MUSUI ]     CMusUiReceiveController::ConstructL:\
+                                    EMusuiCmdViewEndActiveCall" );
+            HandleExitL( ETrue );
+            break;
+            }
+        case EMusuiGenCmdExit:
+        case EAknSoftkeyExit:
+            {
+            HandleExitL();
+            break;
+            }
+
+        case EAknCmdHelp:
+            {
+            if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+                {
+                HlpLauncher::LaunchHelpApplicationL(
+                        iEventObserver.EikonEnv()->WsSession(),
+                        iEventObserver.EikonEnv()->AppUi()->AppHelpContextL() );
+                }
+            break;
+            }
+
+        default:
+            {
+            //NOP
+            break;
+            }
+        }
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleCommandL" );
+    }
+    
+
+// -----------------------------------------------------------------------------
+// Handles status changes common to all sharing types.
+// -----------------------------------------------------------------------------
+//
+void CMusUiEventController::HandleChangedStatusL(
+                        TMusAvailabilityStatus aStatus )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiEventController::HandleChangedStatusL" );
+    switch( aStatus )
+        {
+        case EErrNoActiveCall:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrNoActiveCall" );
+            iActiveCall = EFalse;
+            HandleExitL();
+            break;
+            }
+        case EErrCallOnHold:
+        case EErrConferenceCall: 
+        case EMultimediaSharingNotAvailable:
+            {
+            MUS_LOG( "mus: [MUSUI ]\
+    EErrCallOnHold, EErrConferenceCall, EMultimediaSharingNotAvailable" );
+            HandleExitL();
+            break;
+            }
+        case EErrSipRegistration:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrSipRegistration" );
+            MusUiDialogUtil::ShowInformationDialogL( 
+                                    R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A );
+            HandleExitL();
+            break;
+            }
+        case EErrRoaming:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrRoaming" );
+            HandleExitL();
+            break;
+            }
+        case EErrNetwork:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrNetwork" );
+            MusUiDialogUtil::ShowInformationDialogL( 
+                                    R_MUS_LIVE_SHARING_VIEW_NOTE_SERVICE_N_A );
+            HandleExitL();
+            break;
+            }
+        case EErrConnection:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrConnection" );
+            MusUiDialogUtil::ShowInformationDialogL( 
+                                    R_MUS_LIVE_SHARING_VIEW_NOTE_ONLY_3G );
+            HandleExitL();
+            break;
+            }
+
+        case EErrServerShutDown:
+            {
+            MUS_LOG( "mus: [MUSUI ]     EErrServerShutDown" );
+            HandleExitL();
+            break;
+            }
+
+        default:
+            {
+            MUS_LOG( "mus: [MUSUI ]     Default" );
+            // TODO
+            break;
+            }
+        }
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiEventController::HandleChangedStatusL" );
+    }
+
+