mmsharing/mmshui/src/musuigeneralview.cpp
branchRCL_3
changeset 23 bc78a40cd63c
child 24 6c57ef9392d2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshui/src/musuigeneralview.cpp	Wed Sep 01 12:31:01 2010 +0100
@@ -0,0 +1,930 @@
+/*
+* 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:  Mus Applications Event Observer Interface
+*
+*/
+
+
+
+#include "musuigeneralview.h"     
+#include "musui.hrh"
+#include "musuiappui.h"         // Application UI class
+#include "musuistatuspanehandler.h"
+#include "musuieventcontroller.h"
+#include "musuiviewcontainer.h"
+#include "musuidefinitions.h"
+#include "mussettings.h"
+#include "mussettingskeys.h"
+#include "muslogger.h" // debug logging
+#include "musuiactivetimer.h"
+#include "musuibackgroundviewcontainer.h"
+#include <musui.rsg>
+#include <musui.mbg>
+
+#include <eikenv.h>               // Eikon enviroment
+#include <aknViewAppUi.h>
+#include <avkon.hrh>
+#include <eikmenup.h>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+#include <AknIncallBubbleNotify.h>
+#include <featmgr.h>
+
+const TInt KBackgroundIntervalForClose = 10 * 1000 * 1000; // 10s
+const TInt KMusFgBgEventFiltering = 200 * 1000; // 200 ms
+
+// -----------------------------------------------------------------------------
+// EPOC two-phased constructor
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::ConstructL()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::ConstructL" );
+
+    BaseConstructL( R_MUSUI_VIEW );
+    TInt toolbarId = R_MUS_TOOLBAR;
+    if (!AknLayoutUtils::PenEnabled())
+	    {
+	    toolbarId = R_MUS_TOOLBAR_NONTOUCH;
+	    }
+    CreateAndSetToolbarL(toolbarId);    
+    
+    // check if operator specific functionality is needed  
+    iOperatorSpecificFunctionality = 
+        ( MultimediaSharingSettings::OperatorVariantSettingL() == 
+                                        MusSettingsKeys::EOperatorSpecific );
+    
+    iIncallBubble = CAknIncallBubble::NewL();
+    iSessionEndTimer = CMusUiActiveTimer::NewL( this );
+    
+    iFgBgTimer = CMusUiActiveTimer::NewL( this );
+                                                    
+    if( MUS_NO_TOOLBAR )
+        {
+        MUS_LOG( "mus: [MUSUI ] Operator variant hides toolbar!" );
+        Toolbar()->SetToolbarVisibility( EFalse );
+        Toolbar()->MakeVisible(EFalse);
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::ConstructL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CMusUiGeneralView::~CMusUiGeneralView()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::~CMusUiGeneralView" );
+            
+    delete iSessionEndTimer; 
+    
+    delete iFgBgTimer;          
+    
+    if ( iIncallBubble )
+        {
+        TRAP_IGNORE( iIncallBubble->SetIncallBubbleAllowedInUsualL( ETrue ) )    
+        }
+    delete iIncallBubble; 
+    
+    /* Remove and delete background container */
+    if ( iBackgroundContainer )
+      {
+      AppUi()->RemoveFromViewStack( *this, iBackgroundContainer );
+      }
+    delete iBackgroundContainer;
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::~CMusUiGeneralView" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// Fetches a pointer to the application's AppUi class ( CMusUiAppUi )
+// -----------------------------------------------------------------------------
+//
+CMusUiAppUi* CMusUiGeneralView::MusAppUi() const
+    {
+    MUS_LOG( "mus: [MUSUI ]     CMusUiGeneralView::MusAppUi()" );
+    return static_cast<CMusUiAppUi*>( iEikonEnv->AppUi() );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// To be overridden in subclasses
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::HandleKeyUpEvent( TInt /*aKeyCode*/ )
+    {
+    // NOP
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::SetToolbarVisibility( TBool aVisible )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiGeneralView::SetToolbarVisibility: %d",
+                            aVisible );
+    
+    if( MUS_NO_TOOLBAR )
+        {
+        MUS_LOG( "mus: [MUSUI ] Operator variant hides toolbar!" );
+        Toolbar()->SetToolbarVisibility( EFalse );
+        Toolbar()->MakeVisible(EFalse);
+        return;
+        }
+    
+    // Show toolbar only after established session and before of exit procedure 
+    if ( aVisible &&
+         EventController() &&
+         !EventController()->ExitOccured() &&
+         EventController()->ConnectionEstablished() )
+        {
+        MUS_LOG( "mus: [MUSUI ] setting toolbar visible" );
+        
+        if ( SharingContainer().WaitDialogShown() )
+            {
+            // Cannot show toolbar at the moment as it would go over the dialog.
+            // Instead, request container to set visibility once dialog
+            // is dismissed.
+            SharingContainer().RequestToolbarVisibilityOnceDialogDismissed( this );
+            }
+        else
+            {
+            Toolbar()->SetToolbarVisibility( ETrue );
+			Toolbar()->MakeVisible(ETrue);
+            }
+        }
+    else if ( !aVisible && EventController()->ExitOccured() )
+        {
+        Toolbar()->SetToolbarVisibility( EFalse );
+		Toolbar()->MakeVisible(EFalse);
+        }
+    else
+        {
+        MUS_LOG( "mus: [MUSUI ] We do not set fixed toolbar invisible" );
+        if (!AknLayoutUtils::PenEnabled())
+        	{
+        	Toolbar()->SetToolbarVisibility( EFalse );
+			Toolbar()->MakeVisible(EFalse);
+        	}
+        
+        SharingContainer().RequestToolbarVisibilityOnceDialogDismissed( NULL );
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::SetToolbarVisibility" );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::AsyncQueryDialogAcceptedL( TBool aAccepted )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::AsyncQueryDialogAcceptedL" );
+    
+    EventControllerL().AsyncQueryDialogAcceptedL( aAccepted );
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::AsyncQueryDialogAcceptedL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiGeneralView::FocusedToolbarItem() const
+    {
+    MUS_LOG( "mus: [MUSUI ]  <-> CMusUiGeneralView::FocusedToolbarItem" );
+    return Toolbar()->FocusedItem();
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::DynInitToolbarL( TInt /*aResourceId*/,
+                                         CAknToolbar* /*aToolbar*/ )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::DynInitToolbarL" );
+
+    Toolbar()->SetWithSliding( EFalse );
+
+    // Hide items according to states of speaker and microphone:
+    
+    Toolbar()->HideItem( EventControllerL().IsMicMutedL() ?
+                            EMusuiCmdToolbarMute :
+                            EMusuiCmdToolbarUnmute,
+                        ETrue,
+                        ETrue );
+    
+    TBool loudSpeakerEnabled( EventControllerL().IsLoudSpeakerEnabled() );
+      
+    Toolbar()->HideItem( loudSpeakerEnabled ?
+                                EMusuiCmdToolbarSpeakerOn :
+                                EMusuiCmdToolbarSpeakerOff,
+                         ETrue,
+                         ETrue );
+    
+    // Dim audio routing button if audio routing cannot be changed
+    // or when some button is selected
+    TBool dimAudioRouting( iToolbarItemSelected || 
+                           !EventControllerL().AudioRoutingCanBeChanged() );
+                                                 
+    Toolbar()->SetItemDimmed( loudSpeakerEnabled ?
+                                    EMusuiCmdToolbarSpeakerOff :
+                                    EMusuiCmdToolbarSpeakerOn,
+                              dimAudioRouting,
+                              ETrue );                 
+    
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::DynInitToolbarL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::OfferToolbarEventL( TInt aCommand )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiGeneralView::OfferToolbarEventL: %d",
+                            aCommand );
+    EventControllerL().OfferToolbarEventL( aCommand );
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::OfferToolbarEventL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiGeneralView::ShowWaitDialogL( const TDesC& aPrompt, 
+                                       TInt aTimerInSeconds,
+                                       TInt aExpirationMessageResourceId )
+    {
+    MUS_LOG_TDESC( "mus: [MUSUI ]    -> CMusUiGeneralView::ShowWaitDialogL: ",
+                            aPrompt );
+                            
+    TBool retVal = SharingContainer().RunWaitDialogL( 
+                                                aPrompt, 
+                                                aTimerInSeconds,
+                                                aExpirationMessageResourceId );
+    
+    MUS_LOG1( "mus: [MUSUI ]  <- CMusUiGeneralView::ShowWaitDialogL: retVal = %d",
+              retVal )
+    
+    return retVal;
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::DismissWaitDialogL( TBool aReturnValue )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::DismissWaitDialogL" );
+ 
+    SharingContainer().DismissWaitDialogL( aReturnValue );       
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::DismissWaitDialogL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::SetWaitDialogCallbackL( MProgressDialogCallback* aCallback )
+    {
+    SharingContainer().SetWaitDialogCallbackL( aCallback );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::ShowStatusPaneTitleL()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::ShowStatusPaneTitleL" );
+
+    MusAppUi()->MusStatusPane()->ActivateNaviPaneMediaL();
+
+    // Status Pane Title:
+    if ( EventControllerL().MusContactName().Length() > 0 )
+        {
+        MusAppUi()->MusStatusPane()->SetTitleL( 
+                                        EventControllerL().MusContactName() );
+        }
+    else if ( EventControllerL().MusTelNumberValue().Length() > 0 )
+        {
+        MusAppUi()->MusStatusPane()->SetTitleL(
+                                    EventControllerL().MusTelNumberValue() );
+        }
+    else
+        {
+        MusAppUi()->MusStatusPane()->SetTitleFromResourceL(
+                                R_MUS_LIVE_SHARING_VIEW_TITLE );
+        }
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::ShowStatusPaneTitleL" );
+    }
+        
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::EnableMiddleSoftkeyL( TInt aResourceId )
+    {
+    // Update Middle softkey
+    CEikButtonGroupContainer* cba = Cba();
+    if ( cba )
+        {
+        cba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+                          aResourceId );
+        cba->DrawDeferred();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::ActivateVolumeControlL( TInt aValue, TBool aOnlyIfVisible )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::ActivateVolumeControlL" );
+    MusAppUi()->MusStatusPane()->ActivateVolumeControlL( aValue, aOnlyIfVisible );
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::ActivateVolumeControlL" );
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::HighlightSelectedToolbarItem( TInt aCommand )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::HightlightSelectedToolbarItem" );
+    iToolbarItemSelected = !iToolbarItemSelected;
+    CAknButton* button = static_cast<CAknButton*>( Toolbar()->ControlOrNull(
+                                                                aCommand ) );
+    button->SetCurrentState( iToolbarItemSelected ? 1 : 0, ETrue );
+
+    TBool dimAudioRouting( iToolbarItemSelected || 
+                           !( EventController() &&
+                              EventController()->AudioRoutingCanBeChanged() ) );
+                           
+    for ( TInt i = EMusuiCmdToolbarVolume; i < EMusUiCmdToolbarLastIndex; i++ )
+        {
+        // Undim audio routing buttons only if changing the routing is allowed                  
+        if ( i == EMusuiCmdToolbarSpeakerOn )
+            {
+            Toolbar()->SetItemDimmed( 
+                                EMusuiCmdToolbarSpeakerOn,
+                                dimAudioRouting,
+                                ETrue );  
+            }
+        else if ( i == EMusuiCmdToolbarSpeakerOff )
+            {
+            Toolbar()->SetItemDimmed( 
+                                EMusuiCmdToolbarSpeakerOff,
+                                dimAudioRouting,
+                                ETrue );  
+            }
+        else if ( i != aCommand )
+            {
+            Toolbar()->SetItemDimmed( i, iToolbarItemSelected, ETrue );
+            }
+        else
+            {
+            // NOP
+            }
+        }
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::HightlightSelectedToolbarItem" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::ReplaceToolbarCommand( TInt aOldCommand,
+                                               TInt aNewCommand,
+                                               TBool aSetNewCommandFocused )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiGeneralView::ReplaceToolbarCommand: %d",
+                            aNewCommand );  
+    
+    // Hide the old item:
+    Toolbar()->HideItem( aOldCommand, ETrue, EFalse );
+    // Show new item:
+    Toolbar()->HideItem( aNewCommand, EFalse, ETrue );
+    
+    TBool dimAudioRouting( iToolbarItemSelected || 
+                           !( EventController() &&
+                              EventController()->AudioRoutingCanBeChanged() ) );
+    
+    if ( aNewCommand == EMusuiCmdToolbarSpeakerOn ||
+         aNewCommand == EMusuiCmdToolbarSpeakerOff )
+        {
+        // Dim audio routing button if audio routing cannot be changed                     
+        Toolbar()->SetItemDimmed( aNewCommand,
+                                  dimAudioRouting,
+                                  ETrue );    
+        }
+        
+    if ( aSetNewCommandFocused &&
+         !AknLayoutUtils::PenEnabled() )
+        {
+        TRAP_IGNORE( Toolbar()->SetFocusedItemL( aNewCommand ) );
+        }
+        
+    MUS_LOG1( "mus: [MUSUI ]  <- CMusUiGeneralView::ReplaceToolbarCommand: %d",
+                            aNewCommand );    
+    }   
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::DismissMenuBar()
+	{
+	 MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::DismissMenuBar" );
+	 StopDisplayingMenuBar();
+	 MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::DismissMenuBar" );
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::RefreshAudioRoutingToolbarButton()
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::RefreshAudioRoutingToolbarButton" )
+    TBool loudSpeakerEnabled( EventController() &&
+                          EventController()->IsLoudSpeakerEnabled() );
+    if ( MUS_NO_TOOLBAR )
+        {
+        TRAP_IGNORE( EnableMiddleSoftkeyL( loudSpeakerEnabled ?
+                                               R_MUSUI_VIEW_OPS_MSK_IHF_OFF :
+                                               R_MUSUI_VIEW_OPS_MSK_IHF_ON ) );
+        } 
+    else if ( Toolbar()->IsShown() )
+        {
+        // If toolbar is not shown, it will be refreshed automatically when shown.
+        TInt focusedItem( Toolbar()->FocusedItem() );
+        TBool focusInAudioRouting( focusedItem == EMusuiCmdToolbarSpeakerOff ||
+                                   focusedItem == EMusuiCmdToolbarSpeakerOn );
+                                   
+        TBool loudSpeakerEnabled( EventController() &&
+                                  EventController()->IsLoudSpeakerEnabled() );
+        
+        // Hide old audio routing buttton
+        Toolbar()->HideItem( loudSpeakerEnabled ?
+                                EMusuiCmdToolbarSpeakerOn :
+                                EMusuiCmdToolbarSpeakerOff,
+                             ETrue,
+                             EFalse );
+                                  
+        // Show new audio routing button                              
+        Toolbar()->HideItem( loudSpeakerEnabled ?
+                                    EMusuiCmdToolbarSpeakerOff :
+                                    EMusuiCmdToolbarSpeakerOn,
+                             EFalse,
+                             ETrue );                     
+        
+        // Dim new audio routing button if audio routing cannot be changed
+        // or when some button is selected        
+        TBool dimAudioRouting( iToolbarItemSelected || 
+                               !( EventController() &&
+                               EventController()->AudioRoutingCanBeChanged() ) );
+                                                     
+        Toolbar()->SetItemDimmed( loudSpeakerEnabled ?
+                                        EMusuiCmdToolbarSpeakerOff :
+                                        EMusuiCmdToolbarSpeakerOn,
+                                  dimAudioRouting,
+                                  ETrue );
+        
+        // If audio routing button has been focused, focus also the new button
+        // if it is not dimmed
+        if ( focusInAudioRouting && 
+             !dimAudioRouting && 
+             !AknLayoutUtils::PenEnabled() )
+            {
+            TRAP_IGNORE( Toolbar()->SetFocusedItemL( loudSpeakerEnabled ?
+                                                EMusuiCmdToolbarSpeakerOff :
+                                                EMusuiCmdToolbarSpeakerOn ) )
+            }  
+        
+         
+        }
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::RefreshAudioRoutingToolbarButton" )
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::UpdateSessionTime( const TDesC& aSessionTime )
+    {
+    MUS_LOG_TDESC( "mus: [MUSUI ]  -> CMusUiGeneralView::UpdateSessionTime: ",
+                   aSessionTime );
+    
+    TRAPD( err, MusAppUi()->MusStatusPane()->SetLeftLabelL( aSessionTime ) );
+    if ( err != KErrNone )
+        {
+        EventController()->HandleError( err );
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::UpdateSessionTime" );
+    }
+        
+
+// -----------------------------------------------------------------------------
+// takes care of view command handling
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::HandleCommandL( TInt aCommand )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::HandleCommandL" );
+    
+    EventControllerL().HandleCommandL( aCommand );
+    
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::HandleCommandL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMusUiEventController& CMusUiGeneralView::EventControllerL() const
+    {
+    __ASSERT_ALWAYS( EventController(), User::Leave( KErrNotFound ) );
+    
+    return *EventController();
+    }
+
+
+// -----------------------------------------------------------------------------
+// Called when focus event occurs. Timer is started once coming to foreground
+// as often in such case we receive burst of foreground/background events.
+// Timer is used to filter that burst and to determine the final condition.
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::HandleForegroundEventL( TBool aForeground, TBool aExit )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiGeneralView::HandleForegroundEventL: %d",
+                            aForeground );
+    
+    SetCurrentFgBgEvent( ( aForeground ? EMusFgEvent : EMusBgEvent ) );
+    iCurrentExitSetting = aExit;
+        
+    if ( !iFgBgTimer->IsActive() )
+        {
+        if ( aForeground )
+            {
+            MUS_LOG( "mus: [MUSUI ] delayed to fg" );
+            }
+        else
+            {
+            DoBackgroundEventL( iCurrentExitSetting );
+            MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::HandleForegroundEventL,\
+immediately to bg" );
+            return;
+            }
+        }
+
+    iFgBgTimer->After( KMusFgBgEventFiltering );    
+
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::HandleForegroundEventL" );
+    }
+ 
+ 
+// -----------------------------------------------------------------------------
+// From MMusUiActiveTimerObserver
+// -----------------------------------------------------------------------------
+//    
+void CMusUiGeneralView::TimerComplete( CMusUiActiveTimer* aTimer )
+    {
+    MUS_LOG( "mus: [MUSUI ]  -> CMusUiGeneralView::TimerComplete" );
+                          
+    if ( aTimer == iSessionEndTimer )
+        {
+        MUS_LOG( "mus: [MUSUI ]     Close application because of going \
+in background" );
+                  
+        TRAP_IGNORE( EventControllerL().HandleExitL() )
+        }
+    else
+        {        
+        TRAP_IGNORE( CompleteForegroundEventL() )
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::TimerComplete" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// From MEikMenuObserver, Called by framework before constructing menupane.
+// Initializes menu items common to all sharing types.
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::DynInitMenuPaneL( TInt aResourceId,
+                                          CEikMenuPane* aMenuPane )
+    {
+    MUS_LOG1( "mus: [MUSUI ]  -> CMusUiGeneralView::DynInitMenuPaneL [%d]",
+                            aResourceId );
+
+    if ( aResourceId == R_MUSUI_VIEW_MENU )
+        {
+
+        // Delete Single session items:
+        aMenuPane->DeleteMenuItem( EMusuiCmdViewShareVideo );
+        aMenuPane->DeleteMenuItem( EMusuiCmdViewShareImage );
+        aMenuPane->DeleteMenuItem( EMusuiCmdViewShareLive );        
+        if ( MUS_NO_TOOLBAR )
+            {
+            aMenuPane->DeleteMenuItem( EventControllerL().IsMicMutedL() ?
+                                           EMusuiCmdViewMicrophoneMute :
+                                           EMusuiCmdViewMicrophoneUnmute );
+            }
+        else
+            {
+            aMenuPane->DeleteMenuItem( EMusuiCmdViewMicrophoneMute );
+            aMenuPane->DeleteMenuItem( EMusuiCmdViewMicrophoneUnmute );
+            }
+        
+        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp );
+            }
+        }
+        
+    MUS_LOG( "mus: [MUSUI ]  <- CMusUiGeneralView::DynInitMenuPaneL" );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMusUiGeneralView::DoActivateL
+// From CAknView, Gets called from framework when activating this view
+// -----------------------------------------------------------------------------
+void CMusUiGeneralView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+                                     TUid /*aCustomMessageId*/,
+                                     const TDesC8& /*aCustomMessage*/ )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoActivateL()" )
+    
+    
+    MusAppUi()->MusStatusPane()->ClearNaviPaneL();
+    MusAppUi()->MusStatusPane()->SetTitleFromResourceL(
+        R_MUS_LIVE_SHARING_VIEW_TITLE );
+    
+    iIncallBubble->SetIncallBubbleAllowedInUsualL( EFalse );
+    
+    /* Draw the skin background in the client rectangle area.*/
+    if ( !iBackgroundContainer )
+       {
+       /* Construct background container with clientrect area and
+        * Ordinal position of 0 ie highest so that it draws the initial 
+        * skin background first.
+        */       
+       iBackgroundContainer = 
+           CMusUiBackgroundViewContainer::NewL( ClientRect(), 0 );
+       /* Add container to view stack so that it get view events */
+       AppUi()->AddToViewStackL( *this, iBackgroundContainer );
+       }
+    else
+       {
+       /* Set the windows ordinal position to highest ie 0,
+        * so that background gets priority and drawn first.        
+        */
+       iBackgroundContainer->SetOrdinalPosition( 0 );       
+       }
+    /* Draw the skin background now */
+    iBackgroundContainer->DrawNow();
+                            
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoActivateL()" )
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMusUiGeneralView::DoDeactivate
+// From AknView, Gets called from framework when deactivating this view
+// -----------------------------------------------------------------------------
+void CMusUiGeneralView::DoDeactivate()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoDeactivate()" )
+    if ( iBackgroundContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iBackgroundContainer );
+        delete iBackgroundContainer;
+        iBackgroundContainer = NULL;
+        }
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoDeactivate()" )
+    }
+
+
+// -----------------------------------------------------------------------------
+// Asynchronous completion of last fg/bg condition.
+// -----------------------------------------------------------------------------
+// 
+void CMusUiGeneralView::CompleteForegroundEventL()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::CompleteForegroundEventL()" )
+    
+    if ( iCurrentFgBgEvent == EMusFgEvent )
+        {
+        DoForegroundEventL();
+        }
+    else if ( iCurrentFgBgEvent == EMusBgEvent && EventControllerL().IsForeground() )
+        {
+        // Bg handling when already at bg would cause problems in state
+        // restoring phase when coming back to fg. Easiest to deal with that
+        // at this level.
+        DoBackgroundEventL( iCurrentExitSetting );
+        }
+
+    SetCurrentFgBgEvent( EMusFgBgEventNone );   
+    
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::CompleteForegroundEventL()" )
+    }
+
+
+// -----------------------------------------------------------------------------
+// Complete foreground event.
+// -----------------------------------------------------------------------------
+// 
+void CMusUiGeneralView::DoForegroundEventL()
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoForegroundEventL()" )
+    
+    RefreshView();
+    
+    iSessionEndTimer->Cancel();    
+        
+    EventControllerL().HandleForegroundEventL( ETrue );
+    iIncallBubble->SetIncallBubbleAllowedInUsualL( EFalse );
+    
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoForegroundEventL()" )
+    }
+
+    
+// -----------------------------------------------------------------------------
+// Complete background event.
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::DoBackgroundEventL( TBool aExit )
+    {
+    MUS_LOG( "mus: [MUSUI ] -> CMusUiGeneralView::DoBackgroundEventL()" )
+    
+    if ( aExit )
+        {
+        MUS_LOG( "mus: [MUSUI ]     Go to background, \
+                  wait some seconds before closing..." );
+        iSessionEndTimer->After( KBackgroundIntervalForClose );
+        }
+    if ( !MusAppUi()->ExitValue() )
+        {
+        MUS_LOG( "mus: [MUSUI ]     Calling EventControllerL()" );
+        EventControllerL().HandleForegroundEventL( EFalse );
+        // If exiting, next will be called by destructor    
+    	iIncallBubble->SetIncallBubbleAllowedInUsualL( ETrue );  
+        } 
+        
+    SetCurrentFgBgEvent( EMusFgBgEventNone );
+    
+    MUS_LOG( "mus: [MUSUI ] <- CMusUiGeneralView::DoBackgroundEventL()" )
+    }
+
+// -----------------------------------------------------------------------------
+// Set current fg/bg condition.
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::SetCurrentFgBgEvent( TMusFgBgEventType aEventType )
+    {
+    MUS_LOG1( "mus: [MUSUI ] -> CMusUiGeneralView::SetCurrentFgBgEvent() event:%d",
+              aEventType )
+             
+    iCurrentFgBgEvent = aEventType;         
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CMusUiGeneralView::OperatorSpecificFunctionality() const
+    {
+    return iOperatorSpecificFunctionality;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiGeneralView::ToolbarPlaceHolderHeight() const
+    {
+    TInt toolbarPlaceHolderHeight( 0 );
+    CAknAppUiBase::TAppUiOrientation orientation = MusAppUi()->AppOrientation();
+    if ( !Toolbar()->IsShown() && 
+         orientation == CAknAppUiBase::EAppUiOrientationPortrait &&                        
+         AknLayoutUtils::PenEnabled() )
+        {
+        // In touch UI in portrait mode the toolbar 
+        // fills the whole lower part of the screen
+        toolbarPlaceHolderHeight = Toolbar()->Size().iHeight;
+        }
+    return toolbarPlaceHolderHeight;       
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMusUiGeneralView::ToolbarPlaceHolderWidth() const 
+    { 
+    TInt toolbarPlaceHolderWidth( 0 ); 
+    CAknAppUiBase::TAppUiOrientation orientation = MusAppUi()->AppOrientation(); 
+    if ( !Toolbar()->IsShown() && 
+         orientation == CAknAppUiBase::EAppUiOrientationLandscape &&                        
+         AknLayoutUtils::PenEnabled() ) 
+        { 
+        // In touch UI in EAppUiOrientationLandscape mode the toolbar 
+        // fills the whole lower part of the screen 
+        toolbarPlaceHolderWidth = Toolbar()->Size().iWidth; 
+        } 
+    return toolbarPlaceHolderWidth;       
+    } 
+
+// -----------------------------------------------------------------------------
+// Increase/Decrease background container ordinal so that other controls
+// can preceed background
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::UpdateBackgroundOrdinalPosition( TBool aUp )
+    {
+    // If there is no background container then do not care
+    if ( iBackgroundContainer )
+        {
+        iBackgroundContainer->UpdateOrdinalPositionValue( aUp );              
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Do refresh for background container only if display is disabled.
+// Refreshing if display is enabled would cause bg container
+// to draw itself on top of display area, making it invisible.
+// -----------------------------------------------------------------------------
+//
+void CMusUiGeneralView::RefreshBackgroundContainer()
+    {
+    if ( !iBackgroundContainer )
+        {
+        return;
+        }  
+    TBool displayEnabled( EFalse );
+    if ( EventController() )
+        {
+        TRAP_IGNORE( displayEnabled = EventController()->IsDisplayEnabledL() )
+        }
+
+    if ( !displayEnabled )
+        {
+        MUS_LOG( "mus: [MUSUI ] <-> CMusUiGeneralView::RefreshBackgroundContainer()" )
+        iBackgroundContainer->SetRect( ClientRect() );
+        }
+    }
+
+// end of file
+
+
+
+
+
+