terminalsecurity/SCP/SCPClient/src/SCPLockObserver.cpp
branchRCL_3
changeset 26 19bba8228ff0
parent 25 b183ec05bd8c
--- a/terminalsecurity/SCP/SCPClient/src/SCPLockObserver.cpp	Tue Aug 31 16:04:06 2010 +0300
+++ b/terminalsecurity/SCP/SCPClient/src/SCPLockObserver.cpp	Wed Sep 01 12:27:42 2010 +0100
@@ -24,7 +24,6 @@
 #include "SCPQueryDialog.h"
 #include "SCPDebug.h"
 
-
 // ================= MEMBER FUNCTIONS =======================
 //
 // ----------------------------------------------------------
@@ -55,9 +54,9 @@
 CSCPLockObserver::~CSCPLockObserver()
     {
     
-    Dprint(_L("CSCPLockObserver::~CSCPLockObserver"));
-    
+    Dprint(_L("CSCPLockObserver::~CSCPLockObserver >>>"));
     Cancel();
+    Dprint(_L("CSCPLockObserver::~CSCPLockObserver <<<"));
     }
 //
 // ----------------------------------------------------------
@@ -80,31 +79,27 @@
         
     iStatus = KRequestPending;
     
-    switch(iType)
-        {
-            case ESecUiDeviceLockObserver:
-                
-                Dprint(_L("CSCPLockObserver::Start() Device Lock Observer"));
-                
-                iProperty.Attach(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus); 
-                break;
-            case ESecUiCallStateObserver:
-                
-                Dprint(_L("CSCPLockObserver::Start() Call State Observer"));
-                
-                iProperty.Attach(KPSUidCtsyCallInformation, KCTsyCallState); 
-                break;
+    switch(iType) {
+        case ESecUiDeviceLockObserver:
+            
+            Dprint(_L("CSCPLockObserver::Start() Device Lock Observer"));
+            
+            iProperty.Attach(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus); 
+            break;
+        case ESecUiCallStateObserver: {
+            Dprint(_L("CSCPLockObserver::Start() Call State Observer"));                
+            iProperty.Attach(KPSUidCtsyCallInformation, KCTsyCallState);
+        }
+        break;
 
-            default:
-                break;
-        }
+        default:
+            break;
+    }
     
     iProperty.Subscribe(iStatus);
+    iSubscribedToEvent = ETrue;
     SetActive();
-    iSubscribedToEvent = ETrue;
-    
-    Dprint(_L("CSCPLockObserver::Start() END"));
-    
+    Dprint(_L("CSCPLockObserver::Start() END"));    
     return KErrNone;
     }
 //
@@ -113,9 +108,30 @@
 // C++ constructor
 // ----------------------------------------------------------
 // 
-CSCPLockObserver::CSCPLockObserver(CSCPQueryDialog* aDialog, TInt aType) : CActive(0), iDialog(aDialog), iSubscribedToEvent(EFalse), iType(aType)
-	{                            
-    }
+CSCPLockObserver :: CSCPLockObserver(CSCPQueryDialog* aDialog, TInt aType) : CActive(0),
+        iDialog(aDialog), iType(aType), 
+        iInformCallEnding(EFalse), iSubscribedToEvent(EFalse) {
+    
+    TInt lStatus;
+    RProperty :: Get(KPSUidCtsyCallInformation, KCTsyCallState, lStatus);
+    
+    switch(lStatus) {
+        default:
+        case EPSCTsyCallStateUninitialized:
+        case EPSCTsyCallStateNone:
+            iInformCallEnding = EFalse;
+            break;
+        case EPSCTsyCallStateDisconnecting:
+        case EPSCTsyCallStateAlerting:
+        case EPSCTsyCallStateHold:
+        case EPSCTsyCallStateRinging:
+        case EPSCTsyCallStateDialling:
+        case EPSCTsyCallStateAnswering:
+        case EPSCTsyCallStateConnected:
+            iInformCallEnding = ETrue;
+            break;
+    };
+}
 //
 // ----------------------------------------------------------
 // CSCPLockObserver::ConstructL()
@@ -141,50 +157,64 @@
 // Called by Active Scheduler
 // ----------------------------------------------------------
 // 
-void CSCPLockObserver::RunL()
-	{
-	
-    Dprint(_L("CSCPLockObserver::RunL() BEGIN"));
-    
+void CSCPLockObserver :: RunL() {
+    Dprint(_L("[CSCPLockObserver]-> RunL() >>>"));
     
-    switch(iType)
-        {
-            case ESecUiDeviceLockObserver:
-                 TInt autolockState;
-                 iProperty.Get( autolockState );
-                 if (autolockState > EAutolockOff)
-                    {
-                    
-                    Dprint(_L("CSCPLockObserver::RunL() TryCancelQueryL Device Lock"));
-                    
-                	iDialog->TryCancelQueryL(ESecUiDeviceLocked);
-                	iSubscribedToEvent = EFalse;
+    switch(iType) {
+        case ESecUiDeviceLockObserver:
+        TInt autolockState;
+        iProperty.Get(autolockState);
+        
+        if(autolockState > EAutolockOff) {            
+            Dprint(_L("CSCPLockObserver::RunL() TryCancelQueryL Device Lock"));
+            iDialog->TryCancelQueryL(ESecUiDeviceLocked);
+            iSubscribedToEvent = EFalse;
+        }
+        else if((autolockState == EAutolockOff)||(autolockState == EAutolockStatusUninitialized))
+            {
+            Dprint(_L("CSCPLockObserver::RunL() TryCancelQueryL Device UnLocked"));
+            iDialog->TryCancelQueryL(ESecUiNone);
+            iSubscribedToEvent = EFalse;
+            }
+        break;
+        case ESecUiCallStateObserver: {
+            TInt callState;
+            iProperty.Get(callState);
+            Dprint( (_L("CSCPLockObserver::RunL() callState before Start() : %d"), callState ));
+            Start();
+            
+            switch(callState) {
+                default:
+                    break;
+                case EPSCTsyCallStateNone:
+                    if(iInformCallEnding) {
+                        Dprint( (_L("CSCPLockObserver::RunL() Branched to EPSCTsyCallStateNone")));
+                        iDialog->TryCancelQueryL(EEnded);                    
+                        iInformCallEnding = EFalse;
                     }
+                    break;
+                case EPSCTsyCallStateAlerting:
+                case EPSCTsyCallStateHold:
+                case EPSCTsyCallStateRinging:
+                case EPSCTsyCallStateDialling:
+                case EPSCTsyCallStateAnswering:
+                case EPSCTsyCallStateConnected: {
+                        Dprint(_L("CSCPLockObserver::RunL() TryCancelQueryL Active Call"));                
+                        TRAPD(lErr, iDialog->TryCancelQueryL(EInProgress));
+                        Dprint( (_L("CSCPLockObserver::RunL() lErr : %d"), lErr ));                        
+                        iInformCallEnding = ETrue;
+                }
                 break;
-            case ESecUiCallStateObserver:
-                TInt callState;
-                iProperty.Get( callState );
-				 
-				 Dprint( (_L("CSCPLockObserver::RunL() callState : %d"),callState ));
-                if(callState == EPSCTsyCallStateDisconnecting)
-                    {
-                     
-                    Dprint(_L("CSCPLockObserver::RunL() TryCancelQueryL Active Call"));
-                    
-                	iDialog->TryCancelQueryL(EPSCTsyCallStateDisconnecting);
-                	iSubscribedToEvent = EFalse;   
-                    }
-                break;
+            };
+        }
+        break;
+        default:
+            break;
+    }
+    
+    Dprint(_L("[CSCPLockObserver]-> RunL() <<<"));    
+}
 
-            default:
-                break;
-        }
-
-   
-	
-    Dprint(_L("CSCPLockObserver::RunL() END"));
-    
-	}
 // ----------------------------------------------------------------------------
 // CSCPLockObserver::RunError
 // ----------------------------------------------------------------------------
@@ -192,6 +222,8 @@
     {
         return KErrNone;
     }	
+    
+   
 //
 // ----------------------------------------------------------
 // CSCPLockObserver::DoCancel()
@@ -204,7 +236,8 @@
     Dprint(_L("CSCPLockObserver::DoCancel() BEGIN"));
     
     if(iSubscribedToEvent)
-    	iProperty.Cancel();
+        iProperty.Cancel();
+    
     iStatus = KErrNone;
     
     Dprint(_L("CSCPLockObserver::DoCancel() END"));