Revision: 201033
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 20:23:40 +0300
changeset 34 01f0bb65bcf1
parent 29 36d7ded3ca23
child 37 e9675fb210bd
Revision: 201033 Kit: 201035
mmsharing/inc/musmanageripccommon.h
mmsharing/livecommsui/lcui/inc/lcview.h
mmsharing/livecommsui/lcui/inc/lcviewmanager_p.h
mmsharing/livecommsui/lcui/livecommsui.qrc
mmsharing/livecommsui/lcui/resources/lcviews/lcvtview.docml
mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp
mmsharing/livecommsui/lcui/src/lcvideowidget.cpp
mmsharing/livecommsui/lcui/src/lcview.cpp
mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp
mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/ipvtengineplugin.mmp
mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/lcvtindicatorcontroller.h
mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengmcesession.h
mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengsessionmanager.h
mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmcesession.cpp
mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengsessionmanager.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmainwindow.h
mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstubs.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcview.h
mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/symbian/stub_lcuiengine_p.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcview.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcviewmanager.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro
mmsharing/livecommsui/lcuiengine/inc/lcuiengine.h
mmsharing/livecommsui/lcuiengine/inc/lcuiengine_p.h
mmsharing/livecommsui/lcuiengine/src/lcuiengine_p.cpp
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcuiengine.h
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcenginestub.cpp
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcsessionstub.cpp
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcvideoplayerstub.cpp
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp
mmsharing/livecommsui/livecommsui.pro
mmsharing/mmshmanagercli/inc/musmanagerclientsession.h
mmsharing/mmshmanagercli/src/musmanagerclientsession.cpp
mmsharing/mmshmanagercli/src/musmanagerserverstarter.cpp
mmsharing/mmshmanagersrv/src/musmanagerservermain.cpp
--- a/mmsharing/inc/musmanageripccommon.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/inc/musmanageripccommon.h	Thu Sep 02 20:23:40 2010 +0300
@@ -27,6 +27,7 @@
 _LIT( KMusManagerServerName,"musmanagerserver" );
 _LIT( KMusManagerServerFilename, "musmanagerserver" );
 _LIT( KMusManagerServerSemaphoreName, "musmanagerserverSemaphore" );
+_LIT( KMusManagerServerClosingSemaphoreName, "musmanagerserverClosingSemaphore" );
 
 const TUid KServerUid3 = { KMusManagerServerUid };
 
--- a/mmsharing/livecommsui/lcui/inc/lcview.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/inc/lcview.h	Thu Sep 02 20:23:40 2010 +0300
@@ -86,6 +86,7 @@
     void disableControls();
     void enableControls();    
     void watchInactivity();
+    void updateVolumeSlider(int aVolumeLevel);
 
 protected: // From HbView
     
--- a/mmsharing/livecommsui/lcui/inc/lcviewmanager_p.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/inc/lcviewmanager_p.h	Thu Sep 02 20:23:40 2010 +0300
@@ -36,9 +36,9 @@
     LcMainWindow();
     virtual ~LcMainWindow();
     
-protected: // From HbMainWindow
-    
-    bool event(QEvent *event);
+protected: // From QObject
+
+    bool eventFilter ( QObject * watched, QEvent * event ); 
     
 signals:
         
--- a/mmsharing/livecommsui/lcui/livecommsui.qrc	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/livecommsui.qrc	Thu Sep 02 20:23:40 2010 +0300
@@ -1,14 +1,15 @@
-<!DOCTYPE RCC><RCC version="1.0">
+<!DOCTYPE RCC>
+<RCC version="1.0">
     <qresource prefix="/">
         <file alias="hbpushbutton_color.css">resources/hbpushbutton_color.css</file>
     </qresource>
     <qresource prefix="/xml" >
-        <file alias="lcidleview.docml">resources/lcviews/lcidleview.docml</file>
-        <file alias="lcreceiveview.docml">resources/lcviews/lcreceiveview.docml</file>
-        <file alias="lcreceiveonlyview.docml">resources/lcviews/lcreceiveonlyview.docml</file>
-        <file alias="lcsendview.docml">resources/lcviews/lcsendview.docml</file>
-        <file alias="lctwowayview.docml">resources/lcviews/lctwowayview.docml</file>
-        <file alias="lcvtview.docml">resources/lcviews/lcvtview.docml</file>
+        <file alias="lcidleview.docml">resources/lcviews/lcidleview.docml.bin</file>
+        <file alias="lcreceiveview.docml">resources/lcviews/lcreceiveview.docml.bin</file>
+        <file alias="lcreceiveonlyview.docml">resources/lcviews/lcreceiveonlyview.docml.bin</file>
+        <file alias="lcsendview.docml">resources/lcviews/lcsendview.docml.bin</file>
+        <file alias="lctwowayview.docml">resources/lcviews/lctwowayview.docml.bin</file>
+        <file alias="lcvtview.docml">resources/lcviews/lcvtview.docml.bin</file>
     </qresource>
     <qresource prefix="/" >
         <file alias="win_appear.fxml" >resources/win_appear.fxml</file>
--- a/mmsharing/livecommsui/lcui/resources/lcviews/lcvtview.docml	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/resources/lcviews/lcvtview.docml	Thu Sep 02 20:23:40 2010 +0300
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hbdocument context="LcView" version="1.1">    
+<hbdocument context="LcView" version="1.1">
     <object name="lc_act_swapviews" type="HbAction">
         <string locid="txt_vt_opt_swap_views" name="text"/>
-    </object>    
+    </object>
     <object name="lc_act_menu_disablecamera" type="HbAction">
         <string locid="txt_vt_menu_disable_camera" name="text"/>
     </object>
@@ -13,18 +13,18 @@
         <string locid="txt_vt_menu_change_camera" name="text"/>
     </object>
     <object name="lc_act_disablecamera" type="HbAction">
-        <icon iconName="qtg_mono_camcorder_off" name="icon"/>        
+        <icon iconName="qtg_mono_camcorder_off" name="icon"/>
         <bool name="visible" value="TRUE"/>
     </object>
     <object name="lc_act_changecamera" type="HbAction">
-        <icon iconName="qtg_mono_change_cam_mode" name="icon"/>        
+        <icon iconName="qtg_mono_change_cam_mode" name="icon"/>
     </object>
     <object name="lc_act_mute" type="HbAction">
         <icon iconName="qtg_mono_mute" name="icon"/>
     </object>
     <object name="lc_act_speaker" type="HbAction">
         <icon iconName="qtg_mono_speaker" name="icon"/>
-    </object>            
+    </object>
     <object name="lc_act_openkeypad" type="HbAction">
         <string locid="txt_vt_opt_open_keypad" name="text"/>
     </object>
@@ -40,8 +40,8 @@
                 <real name="z" value="12"/>
             </widget>
             <widget name="lc_label_recipient" type="HbLabel">
-                <real name="z" value="10.0004"/>                                
-                <fontspec name="fontSpec" role="Primary" textheight="26.8"/>
+                <real name="z" value="10.0004"/>
+                <fontspec name="fontSpec" role="Primary" textheight="4un"/>
             </widget>
             <widget name="lc_button_endCall" type="HbPushButton">
                 <icon iconName="qtg_mono_end_call" name="icon"/>
@@ -50,7 +50,7 @@
             </widget>
             <widget name="lc_label_duration" type="HbLabel">
                 <real name="z" value="10.0006"/>
-                <fontspec name="fontSpec" role="Secondary" textheight="26.8"/>
+                <fontspec name="fontSpec" role="Secondary" textheight="4un"/>
             </widget>
             <widget name="lc_widget_sendvideo2" type="HbTransparentWindow">
                 <real name="z" value="13"/>
@@ -60,7 +60,7 @@
                 <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
                 <sizehint height="44un" type="FIXED" width="44un"/>
                 <bool name="visible" value="FALSE"/>
-            </widget>            
+            </widget>
         </widget>
         <widget name="lc_menu" role="HbView:menu" type="HbMenu">
             <ref object="lc_act_swapviews" role="HbMenu:addAction"/>
@@ -120,22 +120,22 @@
         </widget>
         <widget name="lc_widget_sendvideo2" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="144" type="FIXED" width="176"/>
+            <sizehint height="21.49254un" type="FIXED" width="26.26866un"/>
         </widget>
         <widget name="lc_toolbar" role="HbView:toolBar" type="HbToolBar">
             <bool name="visible" value="FALSE"/>
         </widget>
         <widget name="lc_widget_recvvideo" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="288" type="FIXED" width="352"/>
+            <sizehint height="42.98508un" type="FIXED" width="52.53731un"/>
         </widget>
         <widget name="lc_widget_recvvideo2" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="288" type="FIXED" width="352"/>
+            <sizehint height="42.98508un" type="FIXED" width="52.53731un"/>
         </widget>
         <widget name="lc_widget_sendvideo" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="144" type="FIXED" width="176"/>
+            <sizehint height="21.49254un" type="FIXED" width="26.26866un"/>
         </widget>
     </section>
     <section name="lc_layout_landscape_swapped">
@@ -181,22 +181,22 @@
         </widget>
         <widget name="lc_widget_sendvideo2" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="288" type="FIXED" width="352"/>
+            <sizehint height="42.98508un" type="FIXED" width="52.53731un"/>
         </widget>
         <widget name="lc_toolbar" role="HbView:toolBar" type="HbToolBar">
             <bool name="visible" value="FALSE"/>
         </widget>
         <widget name="lc_widget_recvvideo" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="144" type="FIXED" width="176"/>
+            <sizehint height="21.49254un" type="FIXED" width="26.26866un"/>
         </widget>
         <widget name="lc_widget_recvvideo2" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="144" type="FIXED" width="176"/>
+            <sizehint height="21.49254un" type="FIXED" width="26.26866un"/>
         </widget>
         <widget name="lc_widget_sendvideo" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="288" type="FIXED" width="352"/>
+            <sizehint height="42.98508un" type="FIXED" width="52.53731un"/>
         </widget>
     </section>
     <section name="lc_layout_landscape_dialpad">
@@ -214,11 +214,11 @@
                 <bool name="visible" value="FALSE"/>
             </widget>
             <layout type="anchor">
-            		<anchoritem dst="lc_label_dialpad" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+                <anchoritem dst="lc_label_dialpad" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
                 <anchoritem dst="lc_label_dialpad" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
-                <anchoritem dst="lc_widget_recvvideo" dstEdge="LEFT" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="LEFT"/>                
+                <anchoritem dst="lc_widget_recvvideo" dstEdge="LEFT" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="LEFT"/>
                 <anchoritem dst="lc_widget_recvvideo" dstEdge="TOP" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="TOP"/>
-                <anchoritem dst="lc_widget_recvvideo2" dstEdge="LEFT" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="LEFT"/>                
+                <anchoritem dst="lc_widget_recvvideo2" dstEdge="LEFT" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="LEFT"/>
                 <anchoritem dst="lc_widget_recvvideo2" dstEdge="TOP" spacing="var(hb-param-margin-gene-screen)" src="" srcEdge="TOP"/>
                 <anchoritem dst="lc_widget_sendvideo" dstEdge="TOP" spacing="1un" src="" srcEdge="TOP"/>
                 <anchoritem dst="lc_widget_sendvideo2" dstEdge="LEFT" spacing="1un" src="" srcEdge="RIGHT"/>
@@ -230,16 +230,16 @@
             <bool name="visible" value="FALSE"/>
         </widget>
         <widget name="lc_widget_sendvideo" type="HbTransparentWindow">						
-						<sizehint height="0" type="FIXED" width="0"/>		
-						<bool name="visible" value="FALSE"/>				
-				</widget>        
+            <sizehint height="0un" type="FIXED" width="0un"/>
+            <bool name="visible" value="FALSE"/>
+        </widget>
         <widget name="lc_widget_recvvideo" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="39.00un" type="FIXED" width="47.58un"/>
-        </widget>        
+            <sizehint height="39un" type="FIXED" width="47.58un"/>
+        </widget>
         <widget name="lc_widget_recvvideo2" type="HbTransparentWindow">
             <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="39.00un" type="FIXED" width="47.58un"/>
+            <sizehint height="39un" type="FIXED" width="47.58un"/>
         </widget>
         <widget name="lc_widget_sendvideo2" type="HbTransparentWindow">            
             <sizehint height="0" type="FIXED" width="0"/> 
@@ -247,7 +247,7 @@
         </widget>  
         <widget name="lc_label_dialpad" type="HbWidget">                
             <bool name="visible" value="TRUE"/>
-				</widget>
+        </widget>
     </section>
     <metadata activeUIState="landscape" display="NHD-3.2-inch_landscape" unit="un">
         <uistate name="Common ui state" sections="#common"/>
--- a/mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/src/lcuicomponentrepository.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -69,7 +69,7 @@
     mSlots->insert( lcActEnableCameraId, SLOT( disableCamera() ) );
     mSlots->insert( lcActMuteId, SLOT( mute() ) );
     mSlots->insert( lcActGalleryId, SLOT( notSupported() ) );
-    mSlots->insert( lcActChangeCameraId, SLOT( notSupported() ) );    
+    mSlots->insert( lcActChangeCameraId, SLOT( changeCamera() ) );    
     mSlots->insert( lcActAdjustVideoId, SLOT( notSupported() ) );
     mSlots->insert( lcActShareImageId, SLOT( notSupported() ) );
     mSlots->insert( lcActSwapViewsId, SLOT( swap() ) );
@@ -79,7 +79,7 @@
     mSlots->insert( lcActSpeakerId, SLOT( speaker() ) );
 
     mSlots->insert( lcActMenuDisableCameraId, SLOT( disableCamera() ) );    
-    mSlots->insert( lcActMenuChangeCameraId, SLOT( notSupported() ) );  
+    mSlots->insert( lcActMenuChangeCameraId, SLOT( changeCamera() ) );    
     
     LC_QDEBUG( "livecomms [UI] <- LcUiComponentRepository::LcUiComponentRepository()" )
 }
@@ -505,7 +505,7 @@
         static_cast<HbAction*>( findObject( lcActEnableCameraId ) );
 
     QObject::connect( changeCamera, SIGNAL(triggered()), 
-      &view, SLOT(notSupported()) );
+      &view, SLOT(changeCamera()) );
 
     QObject::connect( disableCamera, SIGNAL(triggered()), 
       &view, SLOT(disableCamera()) );
--- a/mmsharing/livecommsui/lcui/src/lcvideowidget.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/src/lcvideowidget.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -62,15 +62,15 @@
 
         QPainter::CompositionMode origCompositionMode = painter->compositionMode();
         painter->setCompositionMode(QPainter::CompositionMode_Source);
-        #if ( defined __WINSCW__ ) || ( defined __WINS__ )
-                if( mLocalPlayer ){
-                    painter->setBrush(QColor(Qt::darkGreen));            
-                }else{
-                    painter->setBrush(QColor(Qt::darkRed));
-                }
-        #else
+#if ( defined __WINSCW__ ) || ( defined __WINS__ )
+        if( mLocalPlayer ){
+            painter->setBrush(QColor(Qt::darkGreen));            
+        }else{
+            painter->setBrush(QColor(Qt::darkRed));
+        }
+#else
         painter->setBrush(QColor(0,0,0,0));
-        #endif
+#endif
         painter->drawRoundedRect( option->exposedRect, 
             lcVideoWidgetCornerRounding, lcVideoWidgetCornerRounding);
         
--- a/mmsharing/livecommsui/lcui/src/lcview.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/src/lcview.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -38,7 +38,7 @@
 #include <qtimer.h>
 #include <hblineedit.h>
 #include <dialpad.h>
-#include <HbTapGesture>
+#include <hbtapgesture.h>
 #include <DialpadVtKeyHandler.h>
 
 
@@ -74,9 +74,9 @@
    mEffectHandler(0),
    mItemContextMenu(0),   
    mIsOptionMenuOpen(false),
-   mDialpad(0),
+   mDialpad(0),   
+   mDialpadVtKeyHandler(0),
    timerId(0),
-   mDialpadVtKeyHandler(0),
    isViewReady(0)
 {
     LC_QDEBUG( "livecomms [UI] -> LcView::LcView()" )
@@ -215,6 +215,10 @@
             SLOT( updateVideoRects() ), Qt::QueuedConnection );
     }
     
+    //Subscribe to the Volume Change Events.
+    connect( &mEngine, SIGNAL(volumeChanged(int)), 
+            this, SLOT(updateVolumeSlider(int)) );
+    
     LC_QDEBUG( "livecomms [UI] <- LcView::init()" )
 }
 
@@ -291,10 +295,9 @@
 //
 void LcView::activated()
 {
-    LC_QDEBUG( "livecomms [UI] -> LcView::activated()" )
+    LC_QDEBUG( "livecomms [UI] -> LcView::activated()" )   
+
     updateVideoRects();
-
-    //synchronize with engine
     
     if ( mEngine.mainCamera() ) {
         setCameraActionToSecondary();
@@ -313,7 +316,13 @@
     } else {
         setSpeakerActionToSpeaker();
     }
-    
+
+    if( mEngine.isLocalPlayerPlaying() ){
+        setCameraActionToDisable();        
+    } else {
+        setCameraActionToEnable();
+    }
+
     if ( mChangeCameraAction ) {
         connect( 
             &mEngine, SIGNAL(cameraChangedToMain()),
@@ -375,6 +384,14 @@
                  mEffectHandler, SLOT(showSendWindow()) );
         connect( &mEngine, SIGNAL(localPlayerPaused()), 
                  mEffectHandler, SLOT(hideSendWindow()) );
+        connect( &mEngine, SIGNAL(localPlayerPlaying()), 
+                 this, SLOT(setCameraActionToDisable()));
+        connect( &mEngine, SIGNAL(localPlayerPaused()), 
+                 this, SLOT(setCameraActionToEnable()));
+        connect( &mEngine, SIGNAL(localPlayerUnavailable()), 
+                 this, SLOT(setCameraActionToEnable()));
+        connect( &mEngine, SIGNAL(localPlayerPlaying()), 
+                         this, SLOT(updateVideoRects()));
     }
 
     if ( mReceivedVideoWidget ) {
@@ -382,6 +399,8 @@
                  mEffectHandler, SLOT(showReceiveWindow()) );
         connect( &mEngine, SIGNAL(remotePlayerPaused()), 
                  mEffectHandler, SLOT(hideReceiveWindow()) );
+        connect( &mEngine, SIGNAL(remotePlayerPlaying()), 
+                         this, SLOT(updateVideoRects()) );
     }
     
     mEngine.setCurrentView(this);
@@ -1037,4 +1056,19 @@
     LC_QDEBUG_2("livecomms [UI] - LcView::isPositioned(),",isViewReady)
     return isViewReady;    
 }
+
+
+// -----------------------------------------------------------------------------
+// LcView::updateVolumeSlider 
+// -----------------------------------------------------------------------------
+//
+void LcView::updateVolumeSlider( int aVolumeLevel )
+{
+    LC_QDEBUG("livecomms [UI] -> LcView::updateVolumeSlider()")
+    //TBD: Show volume slider, with update volume level
+    LC_QDEBUG_2("Volume Level Is,",aVolumeLevel)
+    LC_QDEBUG("livecomms [UI] <- LcView::updateVolumeSlider()")   
+}
+
+
 // End of file
--- a/mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/src/lcviewmanager_p.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -46,6 +46,7 @@
 {
     // TODO: remove flag WindowFlagFixedHorizontal if portait layout
     // is going to be supported.
+    qApp->installEventFilter(this);
 }
 
 // -----------------------------------------------------------------------------
@@ -57,21 +58,23 @@
 }
 
 // -----------------------------------------------------------------------------
-// LcMainWindow::event
+// LcMainWindow::eventFilter
 // -----------------------------------------------------------------------------
 //
-bool LcMainWindow::event(QEvent *event)
-{
-    if ( event->type() == QEvent::FocusIn ){
-        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::event(), focus in" )
+bool LcMainWindow::eventFilter ( QObject * watched, QEvent * event )
+{    
+    if ( event->type() == QEvent::ApplicationActivate ){
+        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationActivate" )
         emit appFocusGained();
-    } else if ( event->type() == QEvent::FocusOut ){
-        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::event(), focus out" )
+    } else if (( event->type() == QEvent::ApplicationDeactivate ) && 
+            ( !this->windowSurface()) ){
+        LC_QDEBUG( "livecomms [UI] -> LcMainWindow::eventFilter(), ApplicationDeactivate" )
         emit appFocusLost();
     }
-    return HbMainWindow::event(event);
+    return QObject::eventFilter(watched, event);
 }
 
+
 // -----------------------------------------------------------------------------
 // LcViewManagerPrivate::LcViewManagerPrivate
 // -----------------------------------------------------------------------------
@@ -102,12 +105,12 @@
 {
     LC_QDEBUG( "livecomms [UI] -> LcViewManagerPrivate::~LcViewManagerPrivate()" )
 
+    delete mEngine;
     QList<HbView *> views = mMainWindow.views();
     foreach( HbView* view, views ){
         mMainWindow.removeView(view);
     }
-    delete mRepository;
-    delete mEngine;
+    delete mRepository;    
 
     LC_QDEBUG( "livecomms [UI] <- LcViewManagerPrivate::~LcViewManagerPrivate()" ) 
 }
--- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/ipvtengineplugin.mmp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/group/ipvtengineplugin.mmp	Thu Sep 02 20:23:40 2010 +0300
@@ -54,20 +54,12 @@
 
 LIBRARY         euser.lib
 LIBRARY         bafl.lib
-LIBRARY         inetprotutil.lib
-LIBRARY		phoneclient.lib
 LIBRARY		centralrepository.lib
-LIBRARY		sipprofilecli.lib
-LIBRARY		sipclient.lib
-LIBRARY         sipcodec.lib
-LIBRARY 	mceclient.lib  
-LIBRARY 	drmcommon.lib
 LIBRARY		charconv.lib
-LIBRARY         telephonyaudiorouting.lib
 LIBRARY         cntmodel.lib ecom.lib
-LIBRARY ecam.lib
 LIBRARY ws32.lib
 LIBRARY bitgdi.lib
 LIBRARY fbscli.lib
 LIBRARY cone.lib
+LIBRARY lcvtindicatorcontroller.lib
 DEBUGLIBRARY    flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/lcvtindicatorcontroller.h	Thu Sep 02 20:23:40 2010 +0300
@@ -0,0 +1,39 @@
+/*!
+* Copyright (c) 2010 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:  Handles phone indicators.
+*/
+
+#ifndef LCVTINDICATORCONTROLLER_H_
+#define LCVTINDICATORCONTROLLER_H_
+
+// FORWARD DECLARATION
+
+class LcVtIndicatorControllerImpl;
+
+class LcVtIndicatorController
+    {
+public:
+    IMPORT_C explicit LcVtIndicatorController();
+    IMPORT_C virtual ~LcVtIndicatorController();
+
+    IMPORT_C void enableActiveCallIndicator();
+    IMPORT_C void disableActiveCallIndicator();
+    
+private:
+    LcVtIndicatorControllerImpl* mIndicatorimpl;
+    
+    friend class UT_LcVtIndicatorController;
+    };
+
+#endif /* LCVTINDICATORCONTROLLER_H_ */
--- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengmcesession.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengmcesession.h	Thu Sep 02 20:23:40 2010 +0300
@@ -28,6 +28,8 @@
 
 #include <e32base.h>
 
+#include    <lcvtindicatorcontroller.h>
+
 
 // FORWARD DECLARATIONS
 class CContactTextField;
@@ -283,6 +285,9 @@
         * iBackground is set to EFalse
         */
         TBool iBackground;
+        
+        // indicator control
+        LcVtIndicatorController* iIndicatorCtr;
 
 
     };
--- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengsessionmanager.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/inc/musengsessionmanager.h	Thu Sep 02 20:23:40 2010 +0300
@@ -56,6 +56,12 @@
         CMccDataReceiver* iMsgReceiver;
         CMccDataSender* iMsgSender;
 
+    private: // Constants
+        
+        static const int VTSETTING_ALWAYS_ASK_FIRST = 0;
+        static const int VTSETTING_DO_NOT_SHOW = 1;
+        static const int VTSETTING_SHOW_AUTOMATICALLY = 2;
+        
     };  
     
 #endif // CMUSENGSESSIONMANAGER_H
--- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmcesession.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengmcesession.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -35,6 +35,7 @@
 #include <cntdef.h>
 #include <cntfldst.h>
 
+
 #include "svptimer.h"
 
 RDrawableWindow* testWindow = 0;
@@ -63,6 +64,9 @@
     iTimer = CSVPTimer::NewL( *this, 1 ); 
     iCameraHandler.SetSession( this );
     
+    // indicator control
+    iIndicatorCtr = new  ( ELeave ) LcVtIndicatorController();
+    
     MUS_LOG( "mus: [ENGINE]  <- CMusEngMceSession::ConstructL()" )
     }
 
@@ -78,6 +82,12 @@
     delete iRemoteVideoPlayer; 
     delete iLiveVideoPlayer;    
     delete iScreen;
+    
+    if (iIndicatorCtr)
+        {
+        iIndicatorCtr->disableActiveCallIndicator();
+        delete iIndicatorCtr;
+        }    
     MUS_LOG( "mus: [ENGINE]  <- CMusEngMceSession::~CMusEngMceSession()" )
     }
 	
@@ -618,6 +628,14 @@
     if ( iScreen ){
         iScreen->Update(aIsForeground);
     }
+    
+    if ( aIsForeground )
+        {
+        iIndicatorCtr->disableActiveCallIndicator();
+        }
+    else {
+        iIndicatorCtr->enableActiveCallIndicator();
+        }
     return KErrNone;
     }
 
--- a/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengsessionmanager.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ipvtengine/src/musengsessionmanager.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -23,7 +23,8 @@
 #include "mccdatareceiver.h"
 #include "musenglogger.h"
 #include "mccdatastructures.h"
-
+#include <settingsinternalcrkeys.h>
+#include <centralrepository.h>
 
 // -----------------------------------------------------------------------------
 //
@@ -94,10 +95,19 @@
 //
 TBool CMusEngSessionManager::IsFeatureSupported( TLcFeature aLcFeature )
     {
-    return ( aLcFeature == ELcSendVideoQuery );
+    TBool ret = EFalse;
+    if ( ELcSendVideoQuery == aLcFeature )
+        {
+        TInt videoSendingSetting;
+        CRepository* repository = CRepository::NewL( KCRUidTelephonySettings );
+        if ( KErrNone == repository->Get(KSettingsVTVideoSending, videoSendingSetting) )
+            {
+            if ( VTSETTING_ALWAYS_ASK_FIRST == videoSendingSetting ) 
+                ret = ETrue;
+            }
+        delete repository;
+        }
+    return ret;
     }
 
-
-
-
 // End of File
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmainwindow.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbmainwindow.h	Thu Sep 02 20:23:40 2010 +0300
@@ -23,6 +23,9 @@
 #include <hbnamespace.h>
 
 class QGraphicsWidget;
+class QWindowSurface 
+    {
+    };
 class HbAction;
 class HbView;
 
@@ -44,12 +47,18 @@
     void show(){};
     QList<HbView *> views() const;
     QRectF sceneRect() const;
+
+    //Overiding function for stub
+    QWindowSurface *windowSurface() const;
     
 private: // Data added for the unit testing stub
-	HbView* mCurrentView; // Not owned
-	int mViewCount;
-	Qt::Orientation mOrientation;
-  QList<HbView*> mTestViews;
+    HbView* mCurrentView; // Not owned
+    int mViewCount;
+    Qt::Orientation mOrientation;
+    QList<HbView*> mTestViews;
+
+public :     
+    QWindowSurface *mSurface;
 };
 
 #endif // HBMAINWINDOW_H
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstubs.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/hbstubs/hbstubs.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -41,6 +41,7 @@
 #include <hblineedit.h>
 #include <QCoreApplication>
 #include <QGesture>
+#include <QWidget.h>
 #include <hbtapgesture.h>
 
 // Helper Class
@@ -276,6 +277,18 @@
     return QRectF( 0, 0, 360, 640 );
 }
 
+// -----------------------------------------------------------------------------
+// HbMainWindow::windowSurface
+// -----------------------------------------------------------------------------
+//
+QWindowSurface* HbMainWindow::windowSurface() const
+{
+    return mSurface;
+}
+
+
+
+
 // HbWidget
 
 // -----------------------------------------------------------------------------
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcview.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/inc/ut_lcview.h	Thu Sep 02 20:23:40 2010 +0300
@@ -105,9 +105,7 @@
     LcView* mView;
     LcUiEngine* mEngine;
     HbLabel* mRecipient;
-    LcUiComponentRepository* mRepository;
-    HbAction* mAction;
-    HbAction* mAction2;
+    LcUiComponentRepository* mRepository;    
     HbPushButton* mEndCallButton;
 };
 
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/symbian/stub_lcuiengine_p.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/lcuiengine_stub/symbian/stub_lcuiengine_p.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -147,7 +147,7 @@
 
 void LcUiEnginePrivate::setMainCamera(const bool aMainCamera)
 {
-    mMainCamera = aMainCamera;
+    mMainCamera = aMainCamera;    
 }
 
 bool LcUiEnginePrivate::mainCamera() const
@@ -354,7 +354,7 @@
 
 void lcutStub_LcUiEngine_setMuted( bool val )
 {
-    lcutStub_LcUiEngine_layout = val;
+    lcutStub_LcUiEngine_muted = val;
 }
 
 void lcutStub_LcUiEngine_setSpeaker( bool val )
@@ -394,6 +394,10 @@
     lcutStub_LcUiEngine_localplaying = true;
 }
 
+void LcUiEnginePrivate::volumeLevelChanged(const XQSettingsKey& /*aKey*/, const QVariant& /*aValue*/)
+{
+}
+
 // End of file
 
 
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcview.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcview.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -72,8 +72,11 @@
     mView = new LcView( *mEngine, *mRepository );
     mView->mRecipient = mRecipient;
     mView->mEndCallButton = mEndCallButton;
-    mAction = new HbAction();
-    mAction2 = new HbAction();
+    mView->mChangeCameraAction = new HbAction();
+    mView->mMuteAction = new HbAction();
+    mView->mSpeakerAction = new HbAction();
+    mView->mDisableCameraAction = new HbAction();   
+    mView->mDisableCameraMenuAction = new HbAction(); 
 }
 
 void UT_LcView::cleanup()
@@ -82,9 +85,7 @@
     delete mRecipient;
     delete mView;
     delete mEngine;
-    delete mRepository;
-    delete mAction;
-    delete mAction2;
+    delete mRepository;    
     delete mEndCallButton;
 }
 
@@ -105,10 +106,6 @@
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) );
     
     lcutStub_LcUiEngine_reset();
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-
     mView->activated();
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) );
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) );
@@ -123,6 +120,42 @@
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_updateSession, 0 ) );
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setOrientation, 1 ) );
     QVERIFY( lcutStub_LcUiEngine_expectCall( lcutStub_LcUiEngine_setContentAreas, 2 ) );
+    
+    // normal scenario
+    lcutStub_LcUiEngine_reset();
+    mView->mChangeCameraAction = new HbAction();
+    mView->mMuteAction = new HbAction();
+    mView->mSpeakerAction = new HbAction();
+    mView->mDisableCameraAction = new HbAction();   
+     
+    mView->mEngine.setMainCamera( true );
+    lcutStub_LcUiEngine_setMuted( true);
+    lcutStub_LcUiEngine_setSpeaker( true );
+    lcutStub_LcUiEngine_setLocalPlaying( true );
+    mView->activated();
+    QVERIFY( mView->mChangeCameraAction );
+    QVERIFY( mView->mChangeCameraAction->icon() ==  HbIcon( lcIconNameSecondaryCamera ) );
+    QVERIFY( mView->mMuteAction );
+    QVERIFY( mView->mMuteAction->icon() ==  HbIcon( lcIconNameUnmuteMic ) );
+    QVERIFY( mView->mSpeakerAction );
+    QVERIFY( mView->mSpeakerAction->icon() ==  HbIcon( lcIconNameHandset ) );
+    QVERIFY( mView->mDisableCameraAction );
+    QVERIFY( mView->mDisableCameraAction->icon() ==  HbIcon( lcIconNameDisableCamera ) );
+    
+    // dude trust me , ofcourse not everything normal everytime
+    mView->mEngine.setMainCamera( false );    
+    lcutStub_LcUiEngine_setMuted( false );
+    lcutStub_LcUiEngine_setSpeaker( false );
+    lcutStub_LcUiEngine_setLocalPlaying( false );
+    mView->activated();
+    QVERIFY( mView->mChangeCameraAction );
+    QVERIFY( mView->mChangeCameraAction->icon() ==  HbIcon( lcIconNameMainCamera ) );
+    QVERIFY( mView->mMuteAction );
+    QVERIFY( mView->mMuteAction->icon() ==  HbIcon( lcIconNameMuteMic ) );
+    QVERIFY( mView->mSpeakerAction );
+    QVERIFY( mView->mSpeakerAction->icon() ==  HbIcon( lcIconNameLoudspeaker ) ); 
+    QVERIFY( mView->mDisableCameraAction );
+    QVERIFY( mView->mDisableCameraAction->icon() ==  HbIcon( lcIconNameEnableCamera ) );
 }
 
 void UT_LcView::testInit()
@@ -157,11 +190,6 @@
 
 void UT_LcView::testSetCameraActionToMain()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-
     mView->setCameraActionToMain();
     QVERIFY( mView->mChangeCameraAction->text().isEmpty() );
     QCOMPARE( mView->mChangeCameraAction->icon(), HbIcon(lcIconNameMainCamera) );
@@ -169,11 +197,6 @@
 
 void UT_LcView::testSetCameraActionToSecondary()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-
     mView->setCameraActionToSecondary();
     QVERIFY( mView->mChangeCameraAction->text().isEmpty() );
     QCOMPARE( mView->mChangeCameraAction->icon(), HbIcon(lcIconNameSecondaryCamera) );
@@ -181,11 +204,6 @@
 
 void UT_LcView::testSetMuteActionToUnmute()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-    
     mView->setMuteActionToUnmute();
     QVERIFY( mView->mMuteAction->text().isEmpty() );
     QCOMPARE (mView->mMuteAction->icon(), HbIcon(lcIconNameUnmuteMic));
@@ -193,11 +211,6 @@
 
 void UT_LcView::testSetMuteActionToMute()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-    
     mView->setMuteActionToMute();
     QVERIFY( mView->mMuteAction->text().isEmpty() );
     QCOMPARE (mView->mMuteAction->icon(), HbIcon(lcIconNameMuteMic));
@@ -205,11 +218,6 @@
 
 void UT_LcView::testSetSpeakerActionToHandset()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-
     mView->setSpeakerActionToHandset();
     QVERIFY( mView->mSpeakerAction->text().isEmpty() );
     QCOMPARE( mView->mSpeakerAction->icon(), HbIcon(lcIconNameHandset) );
@@ -217,11 +225,6 @@
 
 void UT_LcView::testSetSpeakerActionToSpeaker()
 {
-    mView->mChangeCameraAction = mAction;
-    mView->mMuteAction = mAction;
-    mView->mSpeakerAction = mAction;
-    mView->mDisableCameraAction = mAction;
-
     mView->setSpeakerActionToSpeaker();
     QVERIFY( mView->mSpeakerAction->text().isEmpty() );
     QCOMPARE( mView->mSpeakerAction->icon(), HbIcon(lcIconNameLoudspeaker) );
@@ -230,23 +233,13 @@
 void UT_LcView::testSetCameraActionToEnable()
 {
     mView->setCameraActionToEnable();
-
-    mView->mDisableCameraAction = mAction;
-    mView->mDisableCameraMenuAction = mAction2;
-
-    mView->setCameraActionToEnable();
     QVERIFY( mView->mDisableCameraAction->text().isEmpty() );
     QCOMPARE( mView->mDisableCameraAction->icon(), HbIcon(lcIconNameEnableCamera) );
     QCOMPARE( mView->mDisableCameraMenuAction->text(), hbTrId( "txt_vt_menu_enable_camera" ) );   
 }
 
 void UT_LcView::testSetCameraActionToDisable()
-{
-    mView->setCameraActionToDisable();
-
-    mView->mDisableCameraAction = mAction;
-    mView->mDisableCameraMenuAction = mAction2;
-
+{    
     mView->setCameraActionToDisable();
     QVERIFY( mView->mDisableCameraAction->text().isEmpty() );
     QCOMPARE( mView->mDisableCameraAction->icon(), HbIcon(lcIconNameDisableCamera) );
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcviewmanager.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/ut_lcviewmanager.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -166,19 +166,30 @@
      QSignalSpy spy( &mViewManager->mMainWindow, SIGNAL(appFocusGained()) );
      // Not interesting event
      QEvent event(QEvent::MaxUser);
-     mViewManager->mMainWindow.event(&event);
+     mViewManager->mMainWindow.eventFilter(0, &event);
      QVERIFY( spy.count() == 0 );
      
      // Focus in event
-     QEvent event2(QEvent::FocusIn);
-     mViewManager->mMainWindow.event(&event2);
+     QEvent event2(QEvent::ApplicationActivate);
+     mViewManager->mMainWindow.eventFilter(0, &event2);
      QVERIFY( spy.count() == 1 );
-     
+      
+     // test: Complete focus lost
      QSignalSpy spy2( &mViewManager->mMainWindow, SIGNAL(appFocusLost()) );
      // Focus in event
-     QEvent event3(QEvent::FocusOut);
-     mViewManager->mMainWindow.event(&event3);
+     QEvent event3(QEvent::ApplicationDeactivate);
+     mViewManager->mMainWindow.mSurface = 0;
+     mViewManager->mMainWindow.eventFilter(0, &event3);
      QVERIFY( spy2.count() == 1 );
+     
+     // test: partial focus lost i.e. in case of golbal popup.
+     QSignalSpy spy3( &mViewManager->mMainWindow, SIGNAL(appFocusLost()) );
+     // Partial focus in event i.e. Global popup
+     QEvent event4(QEvent::ApplicationDeactivate);
+     QWindowSurface surf;
+     mViewManager->mMainWindow.mSurface = &surf;
+     mViewManager->mMainWindow.eventFilter(0, &event4);
+     QVERIFY( spy3.count() == 0 );
 }
 
 // end of file
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro	Thu Sep 02 20:23:40 2010 +0300
@@ -31,9 +31,9 @@
 DEFINES += QT_NO_DEBUG_OUTPUT
 
 DEPENDPATH += .
+INCLUDEPATH = hbstubs $$INCLUDEPATH
 INCLUDEPATH += .
 INCLUDEPATH += $$LCUI_DIR/inc
-INCLUDEPATH += hbstubs
 INCLUDEPATH += $$MUS_DIR/tsrc/qtestutils/inc
 INCLUDEPATH += $$MUS_DIR/mmsharinguis_plat/live_comms_plugin_api/inc
 INCLUDEPATH += /epoc32/include/ecom
--- a/mmsharing/livecommsui/lcuiengine/inc/lcuiengine.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/inc/lcuiengine.h	Thu Sep 02 20:23:40 2010 +0300
@@ -123,6 +123,8 @@
     void remotePlayerPaused();
     void localPlayerUnavailable();
     void remotePlayerUnavailable();
+    void volumeChanged(int aVolumeLevel);
+    
     
 public slots:
 
@@ -166,7 +168,6 @@
     void shareCamera();
     void setCurrentView(HbView* view);
     bool SendDialTone( const QChar aKey );
-   
 
 private:
 
--- a/mmsharing/livecommsui/lcuiengine/inc/lcuiengine_p.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/inc/lcuiengine_p.h	Thu Sep 02 20:23:40 2010 +0300
@@ -25,9 +25,13 @@
 #include <QObject>
 #include <QString>
 #include <QTime>
+#include <XQSettingsKey>
+#include <XQSettingsManager>
+#include <QVariant>
 #include <lcuiengine.h>
 #include <lcengine.h>
 
+
 class MLcSession;
 class MLcAudioControl;
 class MLcZoomControl;
@@ -109,6 +113,7 @@
     void startReceiving();
     void stopForcefully();
     void handleEngineForegroundStatus();
+    void volumeLevelChanged(const XQSettingsKey& aKey, const QVariant& aValue);
     
 private: // From MLcSessionObserver
     
@@ -151,8 +156,12 @@
     void stopSessionDurationTimer();
     void fillRemoteInfo(bool informChanges);
     void startStopGuardTimer();
-    bool isAllowedToShareVideo();
-    int vtVideoSendingSetting();
+    void showSendVideoQueryWhenNecessary();
+
+    void subscribeVolumeEvents();
+    void unSubscribeVolumeEvents();
+    void doUpdate( MLcVideoPlayer& aPlayer );
+    void doUpdate( MLcSession& aSession );
     
 private: // New functions wrapping the leaving functions in LC plug-in API
     
@@ -193,11 +202,9 @@
     TRect mRemoteRect;
     LcActivityManager* mActivityManager;
     
-private: // Constants
-    
-    static const int VTSETTING_ALWAYS_ASK_FIRST = 0;
-    static const int VTSETTING_DO_NOT_SHOW = 1;
-    static const int VTSETTING_SHOW_AUTOMATICALLY = 2;
+    XQSettingsManager* mSettingsMgr;
+    XQSettingsKey* mEarVolumeKey; 
+    XQSettingsKey* mLoudSpeakerKey; 
     
 friend class LcUiEngine;    
 };
--- a/mmsharing/livecommsui/lcuiengine/src/lcuiengine_p.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/src/lcuiengine_p.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -51,8 +51,7 @@
 #include <xqsettingsmanager.h>
 #include <xqsettingskey.h>
 #include <settingsinternalcrkeys.h>
-
-
+#include <telincallvolcntrlcrkeys.h>
 
 #define LC_VTPLUGIN_NAME "Videotelephony";
 
@@ -81,7 +80,10 @@
       mIsMinimized(false),
       mFirstForegroundSwitch(true),
       mCurrentView(0),
-      mActivityManager(0)
+      mActivityManager(0),
+      mSettingsMgr(0),
+      mEarVolumeKey(0),
+      mLoudSpeakerKey(0) 
 {
     LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::LcUiEnginePrivate()" )
         
@@ -118,6 +120,14 @@
     }
 
     mActivityManager = new LcActivityManager;
+    
+    mSettingsMgr = new XQSettingsManager(this);
+    mEarVolumeKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, 
+            KCRUidInCallVolume.iUid, KTelIncallEarVolume);
+    mLoudSpeakerKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository, 
+            KCRUidInCallVolume.iUid,KTelIncallLoudspeakerVolume);
+    
+    subscribeVolumeEvents();
       
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::LcUiEnginePrivate()" )   
 }
@@ -129,6 +139,11 @@
 LcUiEnginePrivate::~LcUiEnginePrivate()
 {
     LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::~LcUiEnginePrivate()" )
+
+    unSubscribeVolumeEvents();
+    delete mEarVolumeKey;
+    delete mLoudSpeakerKey;
+
     delete mLiveCommsEngine;
     delete mCloseTimer;
     delete mActivityManager;
@@ -171,11 +186,12 @@
     startStopGuardTimer();
     
     int err = terminateSession();
-    
-    if ( !err && session().LcSessionState() ==  MLcSession::EClosing ) {        
-        LC_QDEBUG( "livecomms [UI] not closing UI yet, waiting for session termination..." )
-    } else {
-        LC_QDEBUG( "livecomms [UI] closing UI..." )
+    LC_QDEBUG_2( "livecomms [UI] terminateSession error = ",  err )
+    // if there is an error in terminating session 
+    // or session state is already closed , stop ui
+    // else wait for session state events.
+    if( err || session().LcSessionState() ==  MLcSession::EClosed ){
+        LC_QDEBUG( "livecomms [UI] closing ui... ")
         emit mUiEngine.stopped();
     }
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::stop()" )
@@ -609,41 +625,7 @@
 void LcUiEnginePrivate::StateChanged( MLcSession& aSession )
 {
     LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::StateChanged( session )" )
-    
-    MLcSession::TLcSessionState newState = MLcSession::EUninitialized;
-    newState = aSession.LcSessionState();
-    
-    LC_QDEBUG_2( "livecomms [UI] new state=", newState )
-    
-    if ( newState == MLcSession::EOpen ) {
-        LC_QDEBUG( "livecomms [UI] state is MLcSession::EOpen" )
-        cancelCloseTimer();
-        hideNotes( false );
-        if( isAllowedToShareVideo() ) {
-            startLocalVideo();
-        }
-        startRemoteVideo();
-        fillRemoteInfo( true );
-        emitViewLayoutChanged();
-        startSessionDurationTimer();
-        
-    } else if ( newState == MLcSession::EReceived ) {
-        LC_QDEBUG( "livecomms [UI] state is MLcSession::EReceived" )
-        mRecipient = DESC_TO_QSTRING( session().RemoteDisplayName() );        
-        if ( mAcceptQuery && 
-             featureSupported( CLcEngine::ELcShowAcceptQuery ) ) {
-            mAcceptQuery->show();
-        } else {
-            startReceiving();
-        }        
-    } else if ( newState == MLcSession::EClosed ) {
-        LC_QDEBUG( "livecomms [UI] state is MLcSession::EClosed, closing UI..." )
-        emit mUiEngine.stopped();
-            
-    } else if ( newState == MLcSession::EOpening ){
-        LC_QDEBUG( "livecomms [UI] state is MLcSession::EOpening" )
-    }
-
+    doUpdate( aSession );
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::StateChanged( session )" )
 }
 
@@ -653,50 +635,9 @@
 //
 void LcUiEnginePrivate::StateChanged( MLcVideoPlayer& aPlayer )
 {
-    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::StateChanged( player )" )
-    
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::StateChanged( player )" )    
     emitViewLayoutChanged();
-    
-    if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPlaying ) { 
-        if ( &aPlayer == session().RemoteVideoPlayer() ) {
-            if ( mWaitingNote ) {
-                mWaitingNote->hide();
-            }
-            emit mUiEngine.remotePlayerPlaying();
-        }
-        if ( &aPlayer == session().LocalVideoPlayer() ) {
-            emit mUiEngine.localPlayerPlaying();
-        }
-    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPreparing ) {
-        if ( &aPlayer == session().RemoteVideoPlayer() ) {
-            emit mUiEngine.remotePlayerPreparing();
-        }
-        if ( &aPlayer == session().LocalVideoPlayer() ) {           
-            emit mUiEngine.localPlayerPreparing();
-        }    
-    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EBuffering ) {
-        if ( &aPlayer == session().RemoteVideoPlayer() ) {
-            emit mUiEngine.remotePlayerBuffering();
-        }
-        if ( &aPlayer == session().LocalVideoPlayer() ) {
-            emit mUiEngine.localPlayerBuffering();
-        }    
-    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPaused ) {
-        if ( &aPlayer == session().RemoteVideoPlayer() ) {
-            emit mUiEngine.remotePlayerPaused();
-        }
-        if ( &aPlayer == session().LocalVideoPlayer() ) {
-            emit mUiEngine.localPlayerPaused();
-        }    
-    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EUnavailable ) {
-        if ( &aPlayer == session().RemoteVideoPlayer() ) {
-            emit mUiEngine.remotePlayerUnavailable();
-        }
-        if ( &aPlayer == session().LocalVideoPlayer() ) {
-            emit mUiEngine.localPlayerUnavailable();
-        }    
-    }
-    
+    doUpdate( aPlayer );    
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::StateChanged( player )" )
 }
 
@@ -704,10 +645,11 @@
 // LcUiEnginePrivate::Updated
 // -----------------------------------------------------------------------------
 //
-void LcUiEnginePrivate::Updated( MLcSession& /*aSession*/ )
+void LcUiEnginePrivate::Updated( MLcSession& aSession )
 {
     LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Updated( session )" )
     emitViewLayoutChanged();
+    doUpdate( aSession );
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Updated( session )" )
 }
 
@@ -715,10 +657,11 @@
 // LcUiEnginePrivate::Updated
 // -----------------------------------------------------------------------------
 //
-void LcUiEnginePrivate::Updated( MLcVideoPlayer& /*aPlayer*/ )
+void LcUiEnginePrivate::Updated( MLcVideoPlayer& aPlayer )
 {
     LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::Updated( player )" )
     emitViewLayoutChanged();
+    doUpdate( aPlayer );    
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::Updated( player )" )
 }
 
@@ -1419,40 +1362,14 @@
 // LcUiEnginePrivate::isAllowedToShareVideo
 // -----------------------------------------------------------------------------
 //
-bool LcUiEnginePrivate::isAllowedToShareVideo()
+void LcUiEnginePrivate::showSendVideoQueryWhenNecessary()
 {
-    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::isAllowedToShareVideo()" )
-    if (!featureSupported( CLcEngine::ELcSendVideoQuery )) //outgoing videocall
-        return true;
-    else { //incoming videocall
-        int ownVtVideoSendingSetting = vtVideoSendingSetting();
-        if (VTSETTING_SHOW_AUTOMATICALLY == ownVtVideoSendingSetting)
-            return true;
-        else if (VTSETTING_DO_NOT_SHOW == ownVtVideoSendingSetting)
-            return false;
-        else {
-            if (mShareOwnVideoQuery)
-                mShareOwnVideoQuery->show();
-            return false;
-        }
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::showSendVideoQueryWhenNecessary()" )
+    if (featureSupported( CLcEngine::ELcSendVideoQuery )) {
+        if (mShareOwnVideoQuery)
+            mShareOwnVideoQuery->show();
     }
-    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::isAllowedToShareVideo()" )
-}
-
-// -----------------------------------------------------------------------------
-// LcUiEnginePrivate::vtVideoSendingSetting
-// -----------------------------------------------------------------------------
-//
-int LcUiEnginePrivate::vtVideoSendingSetting()
-{
-    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::vtVideoSendingSetting()" )
-    XQSettingsManager settings;
-    XQSettingsKey settingsKey(XQSettingsKey::TargetCentralRepository, 
-                              KCRUidTelephonySettings.iUid, 
-                              KSettingsVTVideoSending);
-    QVariant ownVtVideoSendingSetting = settings.readItemValue(settingsKey);
-    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::vtVideoSendingSetting()" )
-    return ownVtVideoSendingSetting.toInt();
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::showSendVideoQueryWhenNecessary()" )
 }
 
 // -----------------------------------------------------------------------------
@@ -1485,4 +1402,146 @@
     }
     LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::startLocalVideo()" )
 }
+
+// -----------------------------------------------------------------------------
+// LcUiEnginePrivate::subscribeVolumeEvents
+// -----------------------------------------------------------------------------
+//
+
+void LcUiEnginePrivate::subscribeVolumeEvents()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::subscribeVolumeEvents()" )
+    mSettingsMgr->startMonitoring( *mEarVolumeKey, XQSettingsManager::TypeInt );
+    mSettingsMgr->startMonitoring( *mLoudSpeakerKey, XQSettingsManager::TypeInt );
+    connect(mSettingsMgr, 
+            SIGNAL(valueChanged(const XQSettingsKey&, const QVariant&)), 
+            this, SLOT(volumeLevelChanged(const XQSettingsKey&, const QVariant&)));
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::subscribeVolumeEvents()" )
+}
+
+
+// -----------------------------------------------------------------------------
+// LcUiEnginePrivate::unSubscribeVolumeEvents
+// -----------------------------------------------------------------------------
+//
+void LcUiEnginePrivate::unSubscribeVolumeEvents()
+{
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::unSubscribeVolumeEvents()")
+    mSettingsMgr->stopMonitoring( *mEarVolumeKey );
+    mSettingsMgr->stopMonitoring( *mLoudSpeakerKey );
+    disconnect(mSettingsMgr, 
+                SIGNAL( valueChanged(const XQSettingsKey&, const QVariant& ) ), 
+                this, SLOT(volumeLevelChanged(const XQSettingsKey&, const QVariant&)));
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::unSubscribeVolumeEvents()" )
+}
+
+
+// -----------------------------------------------------------------------------
+// LcUiEnginePrivate::volumeLevelChanged
+// -----------------------------------------------------------------------------
+//
+
+void LcUiEnginePrivate::volumeLevelChanged( const XQSettingsKey& aKey, 
+                                            const QVariant& aValue )
+{
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::volumeLevelChanged()" )
+
+    // Ensure We only send value for the valid keys. 
+    if ((aKey.key() == mEarVolumeKey->key() && aKey.uid() == mEarVolumeKey->uid()) ||
+        (aKey.key() == mLoudSpeakerKey->key() && aKey.uid() == mLoudSpeakerKey->uid()) ) {
+    
+        emit mUiEngine.volumeChanged( aValue.toInt() );
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::volumeLevelChanged()" )
+}
+
+// -----------------------------------------------------------------------------
+// LcUiEnginePrivate::doUpdate( MLcVideoPlayer& aPlayer )
+// -----------------------------------------------------------------------------
+//
+
+void LcUiEnginePrivate::doUpdate( MLcVideoPlayer& aPlayer )
+{
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::doUpdate(), videoplayer" )
+    if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPlaying ) { 
+        if ( &aPlayer == session().RemoteVideoPlayer() ) {
+            if ( mWaitingNote ) {
+                mWaitingNote->hide();
+            }
+            emit mUiEngine.remotePlayerPlaying();
+        }
+        if ( &aPlayer == session().LocalVideoPlayer() ) {
+            emit mUiEngine.localPlayerPlaying();
+        }
+    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPreparing ) {
+        if ( &aPlayer == session().RemoteVideoPlayer() ) {
+            emit mUiEngine.remotePlayerPreparing();
+        }
+        if ( &aPlayer == session().LocalVideoPlayer() ) {           
+            emit mUiEngine.localPlayerPreparing();
+        }    
+    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EBuffering ) {
+        if ( &aPlayer == session().RemoteVideoPlayer() ) {
+            emit mUiEngine.remotePlayerBuffering();
+        }
+        if ( &aPlayer == session().LocalVideoPlayer() ) {
+            emit mUiEngine.localPlayerBuffering();
+        }    
+    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EPaused ) {
+        if ( &aPlayer == session().RemoteVideoPlayer() ) {
+            emit mUiEngine.remotePlayerPaused();
+        }
+        if ( &aPlayer == session().LocalVideoPlayer() ) {
+            emit mUiEngine.localPlayerPaused();
+        }    
+    } else if ( aPlayer.LcVideoPlayerState() == MLcVideoPlayer::EUnavailable ) {
+        if ( &aPlayer == session().RemoteVideoPlayer() ) {
+            emit mUiEngine.remotePlayerUnavailable();
+        }
+        if ( &aPlayer == session().LocalVideoPlayer() ) {
+            emit mUiEngine.localPlayerUnavailable();
+        }    
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::doUpdate(),videoplayer" )
+}
+
+// -----------------------------------------------------------------------------
+// LcUiEnginePrivate::doUpdate( MLcSession& aSession )
+// -----------------------------------------------------------------------------
+//
+
+void LcUiEnginePrivate::doUpdate( MLcSession& aSession )
+{
+    LC_QDEBUG( "livecomms [UI] -> LcUiEnginePrivate::doUpdate(),session" )
+    MLcSession::TLcSessionState newState = MLcSession::EUninitialized;
+    newState = aSession.LcSessionState();    
+    LC_QDEBUG_2( "livecomms [UI] session state = ", newState )    
+    if ( newState == MLcSession::EOpen ) {
+        LC_QDEBUG( "livecomms [UI] session state is MLcSession::EOpen" )
+        cancelCloseTimer();
+        hideNotes( false );
+        showSendVideoQueryWhenNecessary();
+        startRemoteVideo();
+        fillRemoteInfo( true );
+        emitViewLayoutChanged();
+        startSessionDurationTimer();
+        
+    } else if ( newState == MLcSession::EReceived ) {
+        LC_QDEBUG( "livecomms [UI] state state is MLcSession::EReceived" )
+        mRecipient = DESC_TO_QSTRING( session().RemoteDisplayName() );        
+        if ( mAcceptQuery && 
+             featureSupported( CLcEngine::ELcShowAcceptQuery ) ) {
+            mAcceptQuery->show();
+        } else {
+            startReceiving();
+        }        
+    } else if ( newState == MLcSession::EClosed ) {
+        LC_QDEBUG( "livecomms [UI] state state is MLcSession::EClosed, closing UI..." )
+        emit mUiEngine.stopped();
+            
+    } else if ( newState == MLcSession::EOpening ){
+        LC_QDEBUG( "livecomms [UI] state state is MLcSession::EOpening" )
+    }
+    LC_QDEBUG( "livecomms [UI] <- LcUiEnginePrivate::doUpdate(),session" )
+}
 // End of File
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcuiengine.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/inc/ut_lcuiengine.h	Thu Sep 02 20:23:40 2010 +0300
@@ -89,15 +89,11 @@
     void testIsMinimized();
     void testHandleForegroundStatus();
     void testSendDialTone();
-    void testVtVideoSendingSetting(); 
     void testShareVideoIsAllowedShownAutomatically(); 
     void testShareVideoIsNotAllowedShown();
-    void testShareVideoPermissionAskedAlways(); 
+    void testShareVideoPermissionAskedAlways();
+    void testVolumeLevelChanged();
     
-private: // utility functions
- 
-    bool setVtVideoSendingSetting(int key);
-
 private:
     
     LcUiEngine* mEngine;
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcenginestub.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcenginestub.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -89,8 +89,6 @@
 //
 TBool CLcEngineStub::IsFeatureSupported( TLcFeature aLcFeature )
     {
-    if (ELcSendVideoQuery == aLcFeature)
-        return true;
     return lcutStub_LcEngine_lcFeatureSupported;
     }
 
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcsessionstub.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcsessionstub.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -28,7 +28,7 @@
 #include <QStringList>
 
 
-static QStringList lcutStub_LcSession_calledMethods = 0;
+static QStringList lcutStub_LcSession_calledMethods;
 static MLcUiProvider* lcutStub_LcSession_uiProvider = 0;
  
 // -----------------------------------------------------------------------------
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcvideoplayerstub.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/lcstub/src/lcvideoplayerstub.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -29,7 +29,7 @@
 
 #include <QStringList>
 
-static QStringList lcutStub_LcPlayer_calledMethods = 0;
+static QStringList lcutStub_LcPlayer_calledMethods;
 static bool lcutStub_LcPlayer_asyncCompletionEnabled = false;
 
 // -----------------------------------------------------------------------------
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/ut_lcuiengine.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -40,6 +40,7 @@
 #include <xqsettingsmanager.h>
 #include <xqsettingskey.h>
 #include <settingsinternalcrkeys.h>
+#include <telincallvolcntrlcrkeys.h>
 
 const char lcutMultimediaSharingEng[] = "MultimediaSharing";
 const char lcutVideotelephonyEng[] = "Videotelephony";
@@ -418,7 +419,7 @@
     QVERIFY( mEngine->d->mShareOwnVideoQuery );
     QVERIFY( mEngine->d->mShareOwnVideoQuery->isVisible() );
     CLcVideoPlayer* localPlayer = LC_SESSION( mEngine )->iLocalPlayer;
-    //QVERIFY( localPlayer->iState == MLcVideoPlayer::EPaused );
+    localPlayer = 0;
     
     // MO call and sharing own video allowed by default , popup query not shown
     lcutStub_LcSession_reset();
@@ -430,8 +431,6 @@
     mEngine->d->StateChanged( *LC_SESSION( mEngine ) );    
     QVERIFY( mEngine->d->mShareOwnVideoQuery );
     QVERIFY( !mEngine->d->mShareOwnVideoQuery->isVisible() );
-    localPlayer = LC_SESSION( mEngine )->iLocalPlayer;
-    QVERIFY( localPlayer->iState == MLcVideoPlayer::EPlaying );
         
 }
 
@@ -834,9 +833,9 @@
 
 void UT_LcUiEngine::testStop()
 {
-    // Ensure that in MLcSession::EClosing state, "stopped" signal won't be emited
+    // Ensure that in MLcSession::EOpen state, "stopped" signal won't be emited
     // Check also that session duration timer is stopped
-    LC_SESSION( mEngine )->iState = MLcSession::EClosing;
+    LC_SESSION( mEngine )->iState = MLcSession::EOpen;
     mEngine->d->startSessionDurationTimer();
     QVERIFY( mEngine->d->mSessionDurationTimerId != 0 );
     QSignalSpy spy(mEngine, SIGNAL(stopped()));
@@ -848,11 +847,10 @@
     QCOMPARE( spy.count(), 0 );
     QVERIFY( mEngine->d->mSessionDurationTimerId == 0 );
 
-    // Ensure that any other state than MLcSession::EClosing, will cause emition
-    // of "stopped" signal
+    // Ensure that MLcSession::EClosed, will cause emition of "stopped" signal
     lcutStub_LcSession_reset();
     lcutStub_LcPlayer_reset();
-    LC_SESSION( mEngine )->iState = MLcSession::EInitialized;
+    LC_SESSION( mEngine )->iState = MLcSession::EClosed;
     mEngine->d->stop();
     QVERIFY( lcutStub_LcSession_expectCall( lcutStub_LcSession_terminateSession ) );
     QVERIFY( lcutStub_LcPlayer_expectCall( lcutStub_LcPlayer_NoCall ) );
@@ -1206,57 +1204,73 @@
 }
 
 
-void UT_LcUiEngine::testVtVideoSendingSetting() 
-{
-    int settingsKeyValueDoNotShow = 1;
-    if (!setVtVideoSendingSetting(settingsKeyValueDoNotShow))
-        QFAIL("Writing test key to central repository failed.");
-    QCOMPARE(mEngine->d->vtVideoSendingSetting(), settingsKeyValueDoNotShow);
-}
-
-
 void UT_LcUiEngine::testShareVideoIsAllowedShownAutomatically() 
 {
+    lcutStub_LcEngine_setLcFeatureSupported( false );
     mShareOwnVideoQuery->hide();
     mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
-    int settingsKeyValueShowAutomatically = 2;
-    if (!setVtVideoSendingSetting(settingsKeyValueShowAutomatically))
-        QFAIL("Writing test key to central repository failed.");
-    QVERIFY(mEngine->d->isAllowedToShareVideo());
+    mEngine->d->showSendVideoQueryWhenNecessary();
     QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible());
 }
 
 
 void UT_LcUiEngine::testShareVideoIsNotAllowedShown() 
 {
+    lcutStub_LcEngine_setLcFeatureSupported( false );
     mShareOwnVideoQuery->hide();
     mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
-    int settingsKeyValueDoNotShow = 1;
-    if (!setVtVideoSendingSetting(settingsKeyValueDoNotShow))
-        QFAIL("Writing test key to central repository failed.");
-    QVERIFY(!mEngine->d->isAllowedToShareVideo());
+    mEngine->d->showSendVideoQueryWhenNecessary();
     QVERIFY(mEngine->d->mShareOwnVideoQuery && !mEngine->d->mShareOwnVideoQuery->isVisible());    
 }
 
 
 void UT_LcUiEngine::testShareVideoPermissionAskedAlways() 
 {
+    lcutStub_LcEngine_setLcFeatureSupported( true );
     mShareOwnVideoQuery->hide();
     mEngine->d->setUiComponents(mInvitingNote,mWaitingNote,mAcceptQuery,mRecipientQuery,mShareOwnVideoQuery);
-    int settingsKeyValueAlwaysAsk = 0;
-    if (!setVtVideoSendingSetting(settingsKeyValueAlwaysAsk))
-        QFAIL("Writing test key to central repository failed.");
-    QVERIFY(!mEngine->d->isAllowedToShareVideo());
+    mEngine->d->showSendVideoQueryWhenNecessary();
     QVERIFY(mEngine->d->mShareOwnVideoQuery && mEngine->d->mShareOwnVideoQuery->isVisible());
 }
 
 
-bool UT_LcUiEngine::setVtVideoSendingSetting(int key)
+void UT_LcUiEngine::testVolumeLevelChanged()
 {
-    QVariant settingsKeyValue(key);  
-    XQSettingsManager settings;
-    XQSettingsKey settingsKey(XQSettingsKey::TargetCentralRepository, 
-                              KCRUidTelephonySettings.iUid, 
-                              KSettingsVTVideoSending);
-    return settings.writeItemValue(settingsKey, settingsKeyValue);
+    // Subscribe to the events.
+    mEngine->d->subscribeVolumeEvents();
+
+    QSignalSpy spy(mEngine, SIGNAL(volumeChanged(int)));
+    QCOMPARE( spy.count(), 0 );
+
+    
+    //Test1: Known Key Event handled
+    QVariant value;
+    value.setValue(5);
+    
+    XQSettingsKey validKey1(XQSettingsKey::TargetCentralRepository, 
+                            KCRUidInCallVolume.iUid, KTelIncallEarVolume);
+    mEngine->d->volumeLevelChanged(validKey1, value);
+    QCOMPARE( spy.count(), 1 );
+    spy.clear();
+
+    
+    //Test2: Known Key Event-2 handled
+    XQSettingsKey validKey2(XQSettingsKey::TargetCentralRepository, 
+                            KCRUidInCallVolume.iUid,KTelIncallLoudspeakerVolume);
+    mEngine->d->volumeLevelChanged(validKey2, value);
+    QCOMPARE( spy.count(), 1 );
+    spy.clear();
+    
+    //Test3: Unknow Key Event Ignored.
+    XQSettingsKey unKnownKey(XQSettingsKey::TargetCentralRepository, 
+                            787,899);
+    mEngine->d->volumeLevelChanged(unKnownKey, value);
+    QCOMPARE( spy.count(), 0 );
+    
+    // Un-Subscribe Events.
+    mEngine->d->unSubscribeVolumeEvents();
 }
+
+
+
+// End of file
--- a/mmsharing/livecommsui/livecommsui.pro	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/livecommsui/livecommsui.pro	Thu Sep 02 20:23:40 2010 +0300
@@ -22,6 +22,14 @@
 
 LCUI_DIR = lcui
 LCUIENGINE_DIR = lcuiengine
+DOCML_DIR = lcui/resources/lcviews
+
+DOCML += $$DOCML_DIR/lcidleview.docml
+DOCML += $$DOCML_DIR/lcreceiveview.docml
+DOCML += $$DOCML_DIR/lcreceiveonlyview.docml
+DOCML += $$DOCML_DIR/lcsendview.docml
+DOCML += $$DOCML_DIR/lctwowayview.docml
+DOCML += $$DOCML_DIR/lcvtview.docml
 
 RESOURCES += $$LCUI_DIR/livecommsui.qrc
 
@@ -49,7 +57,6 @@
 DEPLOYMENT += libFiles
 
 symbian: {
-    DOCML_DIR = lcui/resources/lcviews
 
     INCLUDEPATH += /epoc32/include/ecom
     INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
@@ -85,12 +92,6 @@
     MMP_RULES += defFiles
             
     :BLD_INF_RULES.prj_exports += "$$LCUI_DIR/inc/lcviewmanager.h /epoc32/include/lcviewmanager.h"
-    :BLD_INF_RULES.prj_exports += "$$LCUI_DIR/inc/lcexport.h /epoc32/include/lcexport.h"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lcidleview.docml z:/data/others/lcidleview.docml"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lcreceiveView.docml z:/data/others/lcreceiveview.docml"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lcsendview.docml z:/data/others/lcsendview.docml"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lctwowayview.docml z:/data/others/lctwowayview.docml"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lcvtview.docml z:/data/others/lcvtview.docml"
-    :BLD_INF_RULES.prj_exports += "$$DOCML_DIR/lcreceiveonlyView.docml z:/data/others/lcreceiveonlyview.docml"
+    :BLD_INF_RULES.prj_exports += "$$LCUI_DIR/inc/lcexport.h /epoc32/include/lcexport.h"    
 }
 
--- a/mmsharing/mmshmanagercli/inc/musmanagerclientsession.h	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/mmshmanagercli/inc/musmanagerclientsession.h	Thu Sep 02 20:23:40 2010 +0300
@@ -81,6 +81,8 @@
 private: // data
 
     TVersion Version() const;
+    
+    TRequestStatus iSessionCreationStatus;
     };
 
 
--- a/mmsharing/mmshmanagercli/src/musmanagerclientsession.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/mmshmanagercli/src/musmanagerclientsession.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -31,8 +31,10 @@
 */
 #define ASYNCHRONOUS_MESSAGE_SLOTS 255
 
+const TInt KMusServerSessionCreationWaitTimeoutInMicrosecs = 10000000; // 10 secs
+
 // ======== LOCAL FUNCTIONS ========
-
+      
 // ---------------------------------------------------------------------------
 //
 // ---------------------------------------------------------------------------
@@ -40,21 +42,49 @@
 RMusManagerClientSession::RMusManagerClientSession()
     : RSessionBase ()
     {
-
     }
 
+
 // ---------------------------------------------------------------------------
-//
+// Use timeout mechanism for session creation as otherwise it can block
+// so long that WServ terminates the process. There's no way to cancel
+// session creation other than destuction of client session. Therefore, in case
+// of timeout, leave and let creation finish silently or get canceled when
+// user of client session object deletes us.
 // ---------------------------------------------------------------------------
 //
 void RMusManagerClientSession::ConnectL()
     {
-    MUS_LOG( "mus: [MUSCLI]  -> RMusManagerClientSession::ConnectL()" );
-    TRequestStatus s;
+    MUS_LOG( "mus: [MUSCLI]  -> RMusManagerClientSession::ConnectL(), with timeout" );
+
+    if ( iSessionCreationStatus.Int() == KRequestPending )
+        {
+        // Previous creation still pending
+        User::Leave( KErrNotReady );
+        }
+    
+    RTimer timer;
+    CleanupClosePushL( timer );
+    User::LeaveIfError( timer.CreateLocal() );
+    
     User::LeaveIfError( CreateSession( KMusManagerServerName(), Version(),
-                                             ASYNCHRONOUS_MESSAGE_SLOTS, &s ) );
-
-    User::WaitForRequest( s );
+                            ASYNCHRONOUS_MESSAGE_SLOTS, &iSessionCreationStatus) );
+    TRequestStatus timeoutStatus;
+    timer.After( timeoutStatus, KMusServerSessionCreationWaitTimeoutInMicrosecs );
+    User::WaitForRequest( iSessionCreationStatus, timeoutStatus );
+    if ( timeoutStatus.Int() != KRequestPending )
+        {
+        MUS_LOG( "mus: [MUSCLI]  RMusManagerClientSession::ConnectL, timeout" );
+        User::Leave( KErrTimedOut );
+        } 
+    else
+        {
+        MUS_LOG( "mus: [MUSCLI]  RMusManagerClientSession::ConnectL, no timeout" );
+        timer.Cancel();
+        User::WaitForRequest( timeoutStatus );
+        }
+    CleanupStack::PopAndDestroy( &timer );
+    
     MUS_LOG( "mus: [MUSCLI]  <- RMusManagerClientSession::ConnectL()" );
     }
 
--- a/mmsharing/mmshmanagercli/src/musmanagerserverstarter.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/mmshmanagercli/src/musmanagerserverstarter.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -21,6 +21,8 @@
 #include "musmanageripccommon.h"
 #include "muslogger.h"
 
+const TInt KMusServerClosingWaitTimeoutInMicrosecs = 10000000; // 10 secs
+
 // ----------------------------------------------------------------------------
 // MusManagerServerStarter::Start
 // ----------------------------------------------------------------------------
@@ -59,8 +61,15 @@
     TFullName name;
     if (findServer.Next(name) == KErrNone)
         {
-    MUS_LOG( "mus: [MUSCLI]  <- MusManagerServerStarter::Start()" );
-        return ETrue; // Server already running
+        MUS_LOG( "mus: [MUSCLI]  <- MusManagerServerStarter::Start()" );
+    
+        // Server may be running but already doing destruction, report
+        // it as not running in such case.
+        RSemaphore closingSemaphore;
+        TBool closingCurrently( 
+            closingSemaphore.OpenGlobal( KMusManagerServerClosingSemaphoreName ) == KErrNone );
+        closingSemaphore.Close();
+        return !closingCurrently;
         }
     MUS_LOG( "mus: [MUSCLI]  <- MusManagerServerStarter::Start()" );
     return EFalse;
@@ -73,6 +82,23 @@
 TInt MusManagerServerStarter::CreateServerProcess( RSemaphore& aSemaphore )
     {
     TInt err = KErrNone;
+    
+    RSemaphore closingSemaphore;
+    if ( closingSemaphore.OpenGlobal( KMusManagerServerClosingSemaphoreName ) == KErrNone )
+        {
+        MUS_LOG( "mus: [MUSCLI]     CreateServerProcess, wait for server closing" );
+        // Don't wait forever if server is somehow horribly jammed
+        
+        TInt waitErr = closingSemaphore.Wait( KMusServerClosingWaitTimeoutInMicrosecs );
+        MUS_LOG1( "mus: [MUSCLI]    CreateServerProcess, waitErr( %d )",
+                  waitErr );
+        closingSemaphore.Close();
+        if ( waitErr != KErrNone )
+            {
+            return waitErr;
+            }
+        }
+    
     const TUidType serverUid( KNullUid, KNullUid, KServerUid3 );
     RProcess server;
     err = server.Create( KMusManagerServerName, KNullDesC() ,serverUid );
--- a/mmsharing/mmshmanagersrv/src/musmanagerservermain.cpp	Wed Aug 18 09:46:00 2010 +0300
+++ b/mmsharing/mmshmanagersrv/src/musmanagerservermain.cpp	Thu Sep 02 20:23:40 2010 +0300
@@ -70,9 +70,21 @@
 
 	// Start handling requests
 	CActiveScheduler::Start();
+	
+	// Open semaphore for destruction phase as it may take several seconds.
+	// Client can then interpret that it needs to soon start the server again.
+	// Even if creation of semaphore fails it is better to continue with gracefull shutdown.
+    RSemaphore closingSemaphore;
+    TInt err = closingSemaphore.CreateGlobal( KMusManagerServerClosingSemaphoreName, 0 );
 
     // This will be executed after the active scheduler has been stopped:
     CleanupStack::PopAndDestroy(server); 
+    
+    if ( err == KErrNone )
+        {
+        closingSemaphore.Signal();
+        }
+    closingSemaphore.Close();
 	}
 
 // -----------------------------------------------------------------------------