diff -r b183ec05bd8c -r 19bba8228ff0 terminalsecurity/SCP/SCPClient/src/SCPLockObserver.cpp --- 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"));