phoneapp/phoneuiqtviewadapter/src/phonevisibilityhandler.cpp
changeset 78 baacf668fe89
parent 76 cfea66083b62
--- a/phoneapp/phoneuiqtviewadapter/src/phonevisibilityhandler.cpp	Mon Oct 04 16:06:10 2010 +0300
+++ b/phoneapp/phoneuiqtviewadapter/src/phonevisibilityhandler.cpp	Fri Oct 15 12:58:46 2010 +0300
@@ -40,10 +40,11 @@
     m_hideDeviceDialogs(false),
     m_deviceLockEnabled(false),
     m_carModeSubscriber(0),
-    m_carModePublisher(0)
+    m_carModePublisher(0),
+    m_phoneVisible(false)
 {
-    PHONE_TRACE;
-    sendToBackground(false); // Send phone to background
+    PHONE_TRACE
+    sendToBackground(); // Send phone to background
 
     m_carModePublisher = new QValueSpacePublisher("/phone",this);
     m_carModePublisher->setValue(QString("/carmode"),QVariant(false));
@@ -63,7 +64,6 @@
     
     QT_TRAP_THROWING(CPhonePubSubProxy::Instance()->NotifyChangeL(
         KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, this));
-
 }
 
 
@@ -72,7 +72,7 @@
  */
 PhoneVisibilityHandler::~PhoneVisibilityHandler()
 {
-    PHONE_TRACE;
+    PHONE_TRACE
     CPhonePubSubProxy::Instance()->CancelAllNotifications(this);
 }
 
@@ -81,21 +81,33 @@
  */
 void PhoneVisibilityHandler::bringToForeground()
 {
-    PHONE_TRACE2("m_carModeEnabled=", m_carModeEnabled);
+    PHONE_TRACE2("m_carModeEnabled=", m_carModeEnabled)
     
     if (!m_carModeEnabled) {
         disableKeyGuard();
-        m_view.bringToForeground();
-        adjustVisibility(BringForwards);
+        adjustVisibility(BringForwards);    // change coe priority
+        m_view.bringToForeground(); // change z-order
     }
 }
 
 /*!
+    PhoneVisibilityHandler::bringVideoCallToForeground.
+ */
+void PhoneVisibilityHandler::bringVideoCallToForeground()
+{
+    PHONE_TRACE
+    TApaTaskList taskList(m_eikonEnv->WsSession());
+    const TUid KVideoTelUid = TUid::Uid(0x101F8681);
+    TApaTask task = taskList.FindApp(KVideoTelUid);
+    task.BringToForeground();
+}
+
+/*!
     PhoneVisibilityHandler::hideDeviceDialogs.
  */
 void PhoneVisibilityHandler::hideDeviceDialogs(bool hide)
 {
-    PHONE_TRACE2(": hide =", hide);
+    PHONE_TRACE2(": hide =", hide)
     m_hideDeviceDialogs = hide;
     adjustVisibility(KeepCurrentPos);
 }
@@ -103,39 +115,36 @@
 /*!
     PhoneVisibilityHandler::phoneVisible.
  */
-bool PhoneVisibilityHandler::phoneVisible()
+bool PhoneVisibilityHandler::phoneVisible() const
 {
     PHONE_TRACE
-    // Should we check if there is phone's devicedialogs visible?
-    return (m_eikonEnv->RootWin().OrdinalPosition() == 0);
+    return m_phoneVisible;
+}
+
+/*!
+     PhoneVisibilityHandler::windowVisibilityChange
+ */
+void PhoneVisibilityHandler::windowVisibilityChange(bool visible)
+{
+    PHONE_TRACE2(": visible =", visible)
+    m_phoneVisible = visible;
 }
 
 /*!
     PhoneVisibilityHandler::sendToBackground.
  */
-void PhoneVisibilityHandler::sendToBackground(bool homeScreenForeground)
+void PhoneVisibilityHandler::sendToBackground()
 {
-    PHONE_TRACE4(": homeScreenForeground =", homeScreenForeground, 
-        ", m_carModeEnabled =", m_carModeEnabled);
+    PHONE_TRACE2(":m_carModeEnabled =", m_carModeEnabled)
     
     if(m_carModeEnabled) {
         // Don't bring homescreen to foreground
         return;
     }
-    
     enableKeyGuard();
-    
-    bool setHsToForeground = homeScreenForeground && phoneVisible();
     // Send phone back on WSERV stack
-    adjustVisibility(SendToBack);
-    
-    // Fetch homescreen to foreground if needed
-    if (setHsToForeground) {
-        _LIT(KPhoneHsAppName,"hsapplication");
-        TApaTaskList taskList(m_eikonEnv->WsSession());
-        TApaTask task = taskList.FindApp(KPhoneHsAppName);
-        task.BringToForeground();
-    }
+    m_view.hide();  // change z-order
+    adjustVisibility(SendToBack); // change coe priority
 }
 
 /*!
@@ -151,7 +160,6 @@
         PHONE_TRACE2(": m_deviceLockEnabled=", m_deviceLockEnabled);
         m_view.setRestrictedMode(m_deviceLockEnabled);
         adjustVisibility(KeepCurrentPos);
-
     }
 }
 
@@ -205,7 +213,6 @@
         amountOfCalls = callInfos->GetCallsL().Count();
         CleanupStack::PopAndDestroy(callInfos);
         );
-    
     return amountOfCalls;
 }
 
@@ -223,36 +230,33 @@
 void PhoneVisibilityHandler::adjustVisibility(AdjustAction action)
 {
     PHONE_TRACE
+    int ordinalPos = m_eikonEnv->RootWin().OrdinalPosition();
     if (m_carModeEnabled || (action == SendToBack)) {
-        PHONE_TRACE1(": SendPhoneToBackground");
+        PHONE_TRACE1(": SendPhoneToBackground")
         m_eikonEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNeverAtFront);
-        
     } else if ((KeepCurrentPos == action) &&
         (m_eikonEnv->RootWin().OrdinalPriority() == ECoeWinPriorityNeverAtFront)) {
         // Skip situations where phone is put to back
         // and action is not to bring it up
         // Execution must come here if there is no calls
-        PHONE_TRACE1(": Skip");
+        PHONE_TRACE1(": Skip")
         
     } else if (m_hideDeviceDialogs) {
-        PHONE_TRACE1(": Hide dialogs");
+        PHONE_TRACE1(": Hide dialogs")
         m_eikonEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront + 100);
         
     } else if (m_deviceLockEnabled) {
         // critical notes are allowed to show on top of Phone application
-        PHONE_TRACE1(": Devicelock");
+        PHONE_TRACE1(": Devicelock")
         m_eikonEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront + 1);
         
     } else if (BringForwards == action) {
         // Try to show phone with normal priority
-        PHONE_TRACE1(": Bring forward");
-        m_eikonEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNormal);
-        
+        PHONE_TRACE1(": Bring forward")
+        m_eikonEnv->RootWin().SetOrdinalPosition(ordinalPos, ECoeWinPriorityNormal);
     } else {
         // Normalize visiblity after ie. device lock
-        PHONE_TRACE1(": Normalize");
-        int ordinalPos = m_eikonEnv->RootWin().OrdinalPosition();
-        
+        PHONE_TRACE1(": Normalize")
         m_eikonEnv->RootWin().SetOrdinalPosition(ordinalPos, ECoeWinPriorityNormal);
         // Flush is needed here, because otherwise launching an application may fail
         // if done same time with normalization.
@@ -262,14 +266,12 @@
 
 void PhoneVisibilityHandler::carModeChanged()
 {
-    PHONE_TRACE;
+    PHONE_TRACE
     m_carModeEnabled = m_carModeSubscriber->value().toBool();
     
     if(!m_carModeEnabled && (ongoingCalls() > 0)) {
         bringToForeground();
     }
-
     // Adjust visibility according mode (TODO!)
-    PHONE_TRACE2(": m_carModeEnabled=", m_carModeEnabled);
-    //adjustVisibility(KeepCurrentPos);	
+    PHONE_TRACE2(": m_carModeEnabled=", m_carModeEnabled)
 }