diff -r 94b923fa11ed -r 63339781d179 securitydialogs/Autolock/src/AutolockAppUi.cpp --- a/securitydialogs/Autolock/src/AutolockAppUi.cpp Thu Jul 15 19:36:50 2010 +0300 +++ b/securitydialogs/Autolock/src/AutolockAppUi.cpp Thu Aug 19 10:45:23 2010 +0300 @@ -58,6 +58,8 @@ #include #include +#include + // LOCAL CONSTANTS AND MACROS #define KSysApUid TUid::Uid(0x100058F3) #define KPhoneAppUid TUid::Uid(0x100058B3) @@ -77,52 +79,63 @@ // void CAutolockAppUi::ConstructL() { - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL")); #endif BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknDisableAnimationBackground ); //Disable priority control so that Autolock process priority isn't set to "background" by - //window server when it is not active. - iEikonEnv->WsSession().ComputeMode( RWsSession::EPriorityControlDisabled ); - RThread().SetProcessPriority( EPriorityHigh ); + //window server when it is not active. + iEikonEnv->WsSession().ComputeMode( RWsSession::EPriorityControlDisabled ); + RThread().SetProcessPriority( EPriorityHigh ); FeatureManager::InitializeLibL(); - RTelServer::TPhoneInfo PhoneInfo; - // prevent autolock shutdown - iEikonEnv->SetSystem( ETrue ); + RTelServer::TPhoneInfo PhoneInfo; + // prevent autolock shutdown + iEikonEnv->SetSystem( ETrue ); - iSideKey1 = 0; - iSideKey2 = 0; - iAppKey = 0; + CKeyLockPolicyApi* iCKeyLockPolicyApi = CKeyLockPolicyApi::NewL( EPolicyActivateKeyguard ); + TBool keyguardAllowed = iCKeyLockPolicyApi->KeyguardAllowed(); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) keyguardAllowed=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, keyguardAllowed ); + #endif + keyguardAllowed = iCKeyLockPolicyApi->EnableKeyguardFeature(); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) new keyguardAllowed=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, keyguardAllowed ); + #endif + delete iCKeyLockPolicyApi; - aCallButtonRect = TRect (0,0,0,0); - iGotEventDownDuringCall = -1; - //connect to ETel + iSideKey1 = 0; + iSideKey2 = 0; + iAppKey = 0; - TInt err( KErrGeneral ); + aCallButtonRect = TRect (0,0,0,0); + iGotEventDownDuringCall = -1; + //connect to ETel + + TInt err( KErrGeneral ); TInt thisTry( 0 ); - /*All server connections are tried to be made KTiesToConnectServer times because occasional + /*All server connections are tried to be made KTiesToConnectServer times because occasional fails on connections are possible at least on some servers*/ - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() connect to etel server")); #endif - // connect etel server - while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + // connect etel server + while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) { User::After( KTimeBeforeRetryingServerConnection ); } User::LeaveIfError( err ); - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() load tsy")); #endif // load tsy err = iServer.LoadPhoneModule( KMmTsyModuleName ); - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() load tsy ERROR: %d"), err); #endif if ( err != KErrAlreadyExists ) @@ -132,47 +145,49 @@ // not an error. User::LeaveIfError( err ); } - - thisTry = 0; - #if defined(_DEBUG) + + thisTry = 0; + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() open phone")); #endif - //open phone - User::LeaveIfError(iServer.SetExtendedErrorGranularity(RTelServer::EErrorExtended)); - User::LeaveIfError(iServer.GetPhoneInfo(PhoneIndex, PhoneInfo)); - User::LeaveIfError(iPhone.Open(iServer,PhoneInfo.iName)); + //open phone + User::LeaveIfError(iServer.SetExtendedErrorGranularity(RTelServer::EErrorExtended)); + User::LeaveIfError(iServer.GetPhoneInfo(PhoneIndex, PhoneInfo)); + User::LeaveIfError(iPhone.Open(iServer,PhoneInfo.iName)); User::LeaveIfError(iCustomPhone.Open(iPhone)); - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() phone opened")); #endif TBool systemLocked = EFalse; - TBool phoneLocked = EFalse; + TBool phoneLocked = EFalse; iWait = NULL; iWait = CWait::NewL(); - #ifndef __WINS__ - - - /***************************************************** - * Series 60 Customer / ETEL - * Series 60 ETEL API - *****************************************************/ - - // set autolock period to 0, if lock is disabled in DOS side - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() set autolock period to 0")); - #endif RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + TInt cRresult = KErrNone; + + #ifndef __WINS__ + + + /***************************************************** + * Series 60 Customer / ETEL + * Series 60 ETEL API + *****************************************************/ + + // set autolock period to 0, if lock is disabled in DOS side + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() set autolock period to 0")); + #endif - iWait->SetRequestType(EMobilePhoneGetLockInfo); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - TInt res = iWait->WaitForRequestL(); - User::LeaveIfError(res); - + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + // Eventhough we might lock the device on boot-up (systemLocked == ETrue), we // want to hide the app until the handshake is done. StartUp application will // active the app when it is finished. @@ -180,11 +195,11 @@ self.SetWgId(iCoeEnv->RootWin().Identifier()); self.SendToBackground(); // flush - iCoeEnv->WsSession().Flush(); - + iCoeEnv->WsSession().Flush(); + TInt lockValue = 0; CRepository* repository = CRepository::NewL(KCRUidSecuritySettings); - TInt cRresult = repository->Get(KSettingsAutolockStatus, lockValue); + cRresult = repository->Get(KSettingsAutolockStatus, lockValue); TBool hiddenReset = HiddenReset(); #if defined(_DEBUG) if(hiddenReset) @@ -192,9 +207,11 @@ RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() CR get result: %d"), cRresult); RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() CR lock value: %d"), lockValue); RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() CR lockInfo.iSetting: %d"), lockInfo.iSetting); + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() RMobilePhone::ELockSetEnabled: %d"), RMobilePhone::ELockSetEnabled); + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() RMobilePhone::ELockSetDisabled: %d"), RMobilePhone::ELockSetDisabled); #endif - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { repository->Set(KSettingsAutoLockTime, 0); if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) ) { @@ -215,16 +232,16 @@ #endif phoneLocked = ETrue; } - + delete repository; - #endif //__WINS__ + #endif //__WINS__ - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Enable emergency call support")); #endif - - #if defined(_DEBUG) + + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Autolock view")); #endif @@ -238,48 +255,48 @@ iEcsNote->ConstructSleepingNoteL(R_AVKON_EMERGENCY_CALL_NOTE); iEcsNote->ButtonGroupContainer().ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition(0,2); - if (AknLayoutUtils::PenEnabled()) // on touch devices, if Autolock is activated from IdleScreen in landscape, the buttons need to be drawn. - { - iEcsNote->ButtonGroupContainer().SetCommandL( 0, _L("") ); // as keyboard is locked, these buttons do nothing. Better to hide their labels. - iEcsNote->ButtonGroupContainer().SetCommandL( EAknSoftkeyCancel, _L("") ); - iEcsNote->ButtonGroupContainer().ButtonGroup()->AsControl()->MakeVisible(ETrue); - } + if (AknLayoutUtils::PenEnabled()) // on touch devices, if Autolock is activated from IdleScreen in landscape, the buttons need to be drawn. + { + iEcsNote->ButtonGroupContainer().SetCommandL( 0, _L("") ); // as keyboard is locked, these buttons do nothing. Better to hide their labels. + iEcsNote->ButtonGroupContainer().SetCommandL( EAknSoftkeyCancel, _L("") ); + iEcsNote->ButtonGroupContainer().ButtonGroup()->AsControl()->MakeVisible(ETrue); + } - // Emergency call support + // Emergency call support iEcsDetector = CAknEcsDetector::NewL(); iEcsDetector->SetObserver( this ); - iEmergencySupportReady = ETrue; + iEmergencySupportReady = ETrue; // ------------------------------------------------------------------------------------------------------------- - // Autolock view - CAutolockView* lockView = new(ELeave) CAutolockView; + // Autolock view + CAutolockView* lockView = new(ELeave) CAutolockView; CleanupStack::PushL(lockView); lockView->ConstructL(); - CleanupStack::Pop(); // lockView + CleanupStack::Pop(); // lockView AddViewL(lockView); // transfer ownership to CAknViewAppUi - SetDefaultViewL(*lockView); + SetDefaultViewL(*lockView); - // start autolock timer - iModel = CAutoLockModel::NewL(this, phoneLocked); + // start autolock timer + iModel = CAutoLockModel::NewL(this, phoneLocked); - // phone event observer - iPhoneObserver = CValueObserver::NewL(this); - //call bubble - iIncallBubble = CAknIncallBubble::NewL(); + // phone event observer + iPhoneObserver = CValueObserver::NewL(this); + //call bubble + iIncallBubble = CAknIncallBubble::NewL(); - //Autokeyguard Period observer - #ifdef RD_AUTO_KEYGUARD - iKeyguardObserver = CAutoKeyguardObserver::NewL(this); - #else //!RD_AUTO_KEYGUARD - iKeyguardObserver = NULL; - #endif //RD_AUTO_KEYGUARD + //Autokeyguard Period observer + #ifdef RD_AUTO_KEYGUARD + iKeyguardObserver = CAutoKeyguardObserver::NewL(this); + #else //!RD_AUTO_KEYGUARD + iKeyguardObserver = NULL; + #endif //RD_AUTO_KEYGUARD // Create the write policy. Also processes with write device data can write the value. TSecurityPolicy writePolicy( ECapabilityWriteDeviceData ); - // Create the read policy. Also processes with read device data can read the value. - TSecurityPolicy readPolicy( ECapabilityReadDeviceData ); - - TInt tRet = RProperty::Define( KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, RProperty::EInt, readPolicy, writePolicy ); + // Create the read policy. Also processes with read device data can read the value. + TSecurityPolicy readPolicy( ECapabilityReadDeviceData ); + + TInt tRet = RProperty::Define( KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, RProperty::EInt, readPolicy, writePolicy ); if ( tRet != KErrNone ) { @@ -287,7 +304,7 @@ RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\ FAILED to define the SECUI query Flag: %d"), tRet); #endif - } + } tRet = RProperty::Define( KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, RProperty::EInt, readPolicy, writePolicy ); if ( tRet != KErrNone ) @@ -320,21 +337,57 @@ RSCPClient scpClient; if ( scpClient.Connect() == KErrNone ) { - TInt confStatus = scpClient.CheckConfiguration( KSCPInitial ); - + TInt confStatus = KErrNone; + // check whether this is normal or exceptional boot. This solves the issue when PIN is requested, Autolock starts, and scpClient.CheckConfiguration verifies the internal lock code + TInt startupReason(ENormalStartup); + RProperty::Get(KPSUidStartup, KPSStartupReason, startupReason); + + TInt secQueryStatus = ESecurityQueryUninitialized; + TInt tRet = RProperty::Get(KPSUidStartup, KStartupSecurityCodeQueryStatus, secQueryStatus); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) startupReason=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, startupReason ); + RDebug::Printf( "%s %s (%u) secQueryStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, secQueryStatus ); + RDebug::Printf( "%s %s (%u) cRresult=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, cRresult ); + RDebug::Printf( "%s %s (%u) lockInfo.iSetting=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, lockInfo.iSetting ); + RDebug::Printf( "%s %s (%u) tRet=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, tRet ); + #endif + + TInt simStatusValue; + tRet = RProperty::Get(KPSUidStartup, KPSSimStatus, simStatusValue); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) tRet=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, tRet ); + RDebug::Printf( "%s %s (%u) simStatusValue=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, simStatusValue ); + RDebug::Printf( "%s %s (%u) ESimReadable=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, ESimReadable ); + #endif + + if( simStatusValue==ESimReadable && secQueryStatus==ESecurityQueryActive) + { // query during SIM-query. This should not happen because check on CSecurityNotifier::GetParamsL iEvent != RMobilePhone::EPin1Required + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) tRet=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, tRet ); + #endif + confStatus = KErrNone; // the best thing to do is to skip CheckConfiguration, because it might secretly accept the lock-code + } + else + confStatus = scpClient.CheckConfiguration( KSCPInitial ); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) confStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, confStatus ); + RDebug::Printf( "%s %s (%u) KErrAccessDenied=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, KErrAccessDenied ); + #endif if ( confStatus == KErrAccessDenied ) { #ifndef __WINS__ - if ( ( lockInfo.iSetting == RMobilePhone::ELockSetDisabled ) ) + if ( 1 ) // Previously was ( lockInfo.iSetting == RMobilePhone::ELockSetDisabled ) but now it needs to handle scenarios : ISA_format without drive format, and the opposite #else // __WINS__ if ( 1 ) // DOS lock is never active in WINS #endif // __WINS__ - { - // DOS lock is not active. Note that if DOS is locked, checking the code here will - // mess up the query sequence. On initial startup DOS is not locked. + { + // DOS lock is not active. Note that if DOS is locked, checking the code here will + // mess up the query sequence. On initial startup DOS is not locked. TInt finalConfStatus = scpClient.CheckConfiguration( KSCPComplete ); - + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) finalConfStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, finalConfStatus ); + #endif if ( finalConfStatus == KErrAccessDenied ) { #ifdef __WINS__ @@ -346,7 +399,7 @@ // The SCP server is out of sync and Autolock is not active. (c-drive formatted) // We must ask the security code. ( Note that it is very rare that this is executed ) - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\ Lock setting disabled, calling setlocksetting")); #endif @@ -369,25 +422,25 @@ // Just change the lock setting again to disabled to request the security code. // Set the TARM flag so SecUi knows it should display the "login" query. - TInt tarmFlag=0; - tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); - if ( tRet == KErrNone ) - { - tarmFlag |= KSCPFlagResyncQuery; - tRet = RProperty::Set( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); - } - - if ( tRet != KErrNone ) + TInt tarmFlag=0; + tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); + if ( tRet == KErrNone ) + { + tarmFlag |= KSCPFlagResyncQuery; + tRet = RProperty::Set( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); + } + + if ( tRet != KErrNone ) { #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\ FAILED to set TARM Admin Flag")); #endif } - - RMobilePhone::TMobilePhoneLockSetting lockChange; - lockChange = RMobilePhone::ELockSetDisabled; - iWait->SetRequestType(EMobilePhoneSetLockSetting); + + RMobilePhone::TMobilePhoneLockSetting lockChange; + lockChange = RMobilePhone::ELockSetDisabled; + iWait->SetRequestType(EMobilePhoneSetLockSetting); iPhone.SetLockSetting(iWait->iStatus, lockType, lockChange); res = iWait->WaitForRequestL(); @@ -405,8 +458,26 @@ // Eventhough we might lock the device on boot-up (systemLocked == ETrue), we // want to hide the app until the handshake is done. StartUp application will // active the app when it is finished. + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) systemLocked=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, systemLocked ); + RDebug::Printf( "%s %s (%u) phoneLocked=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, phoneLocked ); + #endif if( !systemLocked ) - {// app to background + { + // incoming call on boot + TInt value(EStartupUiPhaseUninitialized); + RProperty::Get(KPSUidStartup, KPSStartupUiPhase, value); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) KPSStartupUiPhase value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, value ); + #endif + if( valueStart(); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) err=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, err ); + #endif + } + // app to background #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() app to background")); #endif @@ -424,10 +495,10 @@ TInt lockState = 0; #ifdef RD_REMOTELOCK - lockState = EManualLocked; - #else //!RD_REMOTELOCK - lockState = EAutolockOn; - #endif//RD_REMOTELOCK + lockState = EManualLocked; + #else //!RD_REMOTELOCK + lockState = EAutolockOn; + #endif//RD_REMOTELOCK iModel->LockSystemL(lockState); } @@ -437,7 +508,7 @@ #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() END")); #endif - } + } // ---------------------------------------------------- // CAutolockAppUi::~CAutolockAppUi() // Destructor @@ -456,8 +527,8 @@ if(iWait->IsActive()) { #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() CANCEL REQ")); - #endif + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() CANCEL REQ")); + #endif iPhone.CancelAsyncRequest(iWait->GetRequestType()); } } @@ -466,18 +537,18 @@ iCustomPhone.Close(); if (iPhone.SubSessionHandle()) - iPhone.Close(); + iPhone.Close(); if (iServer.Handle()) { iServer.UnloadPhoneModule(KMmTsyModuleName); iServer.Close(); } - delete iModel; - delete iPhoneObserver; - delete iIncallBubble; + delete iModel; + delete iPhoneObserver; + delete iIncallBubble; #ifdef RD_AUTO_KEYGUARD - delete iKeyguardObserver; + delete iKeyguardObserver; #endif delete iEcsDetector; @@ -489,102 +560,130 @@ #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() END")); #endif - } + } // ---------------------------------------------------- // CAutolockAppUi::HandleForegroundEventL() // Handles foreground event. // ---------------------------------------------------- // void CAutolockAppUi::HandleForegroundEventL(TBool aForeground) - { - #if defined(_DEBUG) + { + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleForegroundEventL()")); #endif - if (aForeground ) - { - if (iLocked) - { - // lock voice key - LockSideKeyL(); - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x15, aInitialRect); - } - - } - else - { - // app back to background - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.SendToBackground(); - } - } + if (aForeground ) + { + if (iLocked) + { + // lock voice key + LockSideKeyL(); + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x15, aInitialRect); + } + + } + else + { + // app back to background + TApaTask self(iCoeEnv->WsSession()); + self.SetWgId(iCoeEnv->RootWin().Identifier()); + self.SendToBackground(); + } + } - if (!aForeground && iLocked) - { + if (!aForeground && iLocked) + { TInt callState=0; TInt simStatus=0; RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callState ); RProperty::Get(KPSUidStartup, KPSSimStatus, simStatus); if (callState == EPSCTsyCallStateNone && simStatus != ESimNotPresent) - { - // try put autolock back to foreground - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x19, aInitialRect); - } - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.BringToForeground(); - } - else - { - // unlock voice key while there is active call - UnLockSideKey(); - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x16, aInitialRect); - } - } - } + { + // try put autolock back to foreground + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x19, aInitialRect); + } + TApaTask self(iCoeEnv->WsSession()); + self.SetWgId(iCoeEnv->RootWin().Identifier()); + self.BringToForeground(); + } + else + { + // unlock voice key while there is active call + UnLockSideKey(); + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x16, aInitialRect); + } + } + } - CAknAppUi::HandleForegroundEventL(aForeground); - - } - + CAknAppUi::HandleForegroundEventL(aForeground); + + } + + +// ---------------------------------------------------- +// HideSoftNotification() +// dismiss all the pending notes just before asking the unlocking code +// ---------------------------------------------------- +// +void HideSoftNotification() + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)HideSoftNotification")); + #endif + CAknSoftNotifier *softNotifier = NULL; + TRAPD (err, { + softNotifier = CAknSoftNotifier::NewL(); + softNotifier->AddNotificationL(ESetIdleState, 0); + };) + delete softNotifier; + } +// CAutolockAppUi::HandleCommandL(TInt aCommand) +// ---------------------------------------------------- + // ---------------------------------------------------- // CAutolockAppUi::HandleMessageL // // Handles the TARM command to unlock the phone. // ---------------------------------------------------- -// +// MCoeMessageObserver::TMessageResponse CAutolockAppUi::HandleMessageL( TUint32 aClientHandleOfTargetWindowGroup, TUid aMessageUid, const TDesC8& aMessageParameters ) { - - if(!FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) - { - User::Leave(KErrNotSupported); - } + + if(!FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) + { + User::Leave(KErrNotSupported); + } #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL()")); #endif MCoeMessageObserver::TMessageResponse messageResponse( EMessageHandled ); - if ( aMessageUid.iUid == SCP_CMDUID_UNLOCK ) + if ( aMessageUid.iUid == SCP_CMDUID_UNLOCK+1 ) + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) calling CancelDeviceLockQuery=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); + #endif + CancelDeviceLockQuery(); + } + else if ( aMessageUid.iUid == SCP_CMDUID_UNLOCK ) { // For security reasons we must check from the SCP server did this // command originate from it. @@ -611,15 +710,16 @@ else { iLocked = EFalse; - DisableWGListChangeEventListening(); - UnLockKeys(); - iModel->SetLockedL(EFalse); - // Disable keyguard after remote unlock - RAknKeyLock iKeyLock; - TInt tempResult = iKeyLock.Connect(); - iKeyLock.DisableKeyLock(); - // end Disable keyguard after remote unlock - SwitchToPreviousAppL(); + HideSoftNotification(); // dismiss all the pending notes + DisableWGListChangeEventListening(); + UnLockKeys(); + iModel->SetLockedL(EFalse); + // Disable keyguard after remote unlock + RAknKeyLock iKeyLock; + TInt tempResult = iKeyLock.Connect(); + iKeyLock.DisableKeyLock(); + // end Disable keyguard after remote unlock + SwitchToPreviousAppL(); } } else @@ -651,8 +751,8 @@ return messageResponse; } - - + + // ------------------------------------------------------------------------------ // CAutolockAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) // This function is called by the UIKON framework just before it displays @@ -668,8 +768,10 @@ void CAutolockAppUi::HandlePointerEventL(const TPointerEvent& aPointerEvent) { + #if defined(_DEBUG) RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - } + #endif + } // ---------------------------------------------------- // CAutolockAppUi::HandleKeyEventL( // const TKeyEvent& aKeyEvent,TEventCode /*aType*/) @@ -680,11 +782,11 @@ { if ( aKeyEvent.iCode == EKeyBell || (aType == EEventKeyUp && aKeyEvent.iScanCode == EStdKeyDeviceF) || (aKeyEvent.iCode == EKeyDeviceF) ) - { - if(iLocked) - HandleCommandL(ESecUiCmdUnlock); - return EKeyWasConsumed; - } + { + if(iLocked) + HandleCommandL(ESecUiCmdUnlock); + return EKeyWasConsumed; + } TBool featureNoPowerkey = FeatureManager::FeatureSupported( KFeatureIdNoPowerkey ); // If power key pressed, tell SysAp about if @@ -714,87 +816,68 @@ } } -// ---------------------------------------------------- -// HideSoftNotification() -// dismiss all the pending notes just before asking the unlocking code -// ---------------------------------------------------- -// -void HideSoftNotification() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)HideSoftNotification")); - #endif - CAknSoftNotifier *softNotifier = NULL; - TRAPD (err, { - softNotifier = CAknSoftNotifier::NewL(); - softNotifier->AddNotificationL(ESetIdleState, 0); - };) - delete softNotifier; - } -// CAutolockAppUi::HandleCommandL(TInt aCommand) -// ---------------------------------------------------- -// + void CAutolockAppUi::HandleCommandL(TInt aCommand) { - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL()")); #endif - switch ( aCommand ) + switch ( aCommand ) { case EEikCmdExit: - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL() EEikCmdExit")); - #endif + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL() EEikCmdExit")); + #endif Exit(); break; - } + } case ESecUiCmdUnlock: - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL() ESecUiCmdUnlock")); - #endif - // stop observing emergency call event - iEmergencySupportReady = EFalse; - iEcsDetector->Reset(); // Ecs queue is cleared; keys up til here are forgotten - // ask secuity code - CSecurityHandler* handler = new (ELeave) CSecurityHandler(iPhone); - CleanupStack::PushL(handler); - TSecUi::InitializeLibL(); - - // Put the lights on when security query is shown - SendMessageToSysAp( EEikSecurityQueryLights ); - HideSoftNotification(); // dismiss all the pending notes just before asking the unlocking code - + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL() ESecUiCmdUnlock")); + #endif + // stop observing emergency call event + iEmergencySupportReady = EFalse; + iEcsDetector->Reset(); // Ecs queue is cleared; keys up til here are forgotten + // ask secuity code + CSecurityHandler* handler = new (ELeave) CSecurityHandler(iPhone); + CleanupStack::PushL(handler); + TSecUi::InitializeLibL(); + + // Put the lights on when security query is shown + SendMessageToSysAp( EEikSecurityQueryLights ); + HideSoftNotification(); // dismiss all the pending notes just before asking the unlocking code + TRAPD(err, - { - iDeviceLockQueryStatus = ETrue; - if(handler->AskSecCodeInAutoLockL()) - { - iLocked = EFalse; - DisableWGListChangeEventListening(); - iDeviceLockQueryStatus = EFalse; - UnLockKeys(); - iModel->SetLockedL(EFalse); - SwitchToPreviousAppL(); - } + { + iDeviceLockQueryStatus = ETrue; + if(handler->AskSecCodeInAutoLockL()) + { + iLocked = EFalse; + DisableWGListChangeEventListening(); + iDeviceLockQueryStatus = EFalse; + UnLockKeys(); + iModel->SetLockedL(EFalse); + SwitchToPreviousAppL(); + } else - { // make sure that we will be topmost still - iDeviceLockQueryStatus = EFalse; + { // make sure that we will be topmost still + iDeviceLockQueryStatus = EFalse; TInt callState; RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); if ( callState == EPSCTsyCallStateNone && !FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) ) { - TApaTask self(CCoeEnv::Static()->WsSession()); - self.SetWgId(CCoeEnv::Static()->RootWin().Identifier()); - self.BringToForeground(); + TApaTask self(CCoeEnv::Static()->WsSession()); + self.SetWgId(CCoeEnv::Static()->RootWin().Identifier()); + self.BringToForeground(); TBool featureNoPowerkey = FeatureManager::FeatureSupported( KFeatureIdNoPowerkey ); if ( featureNoPowerkey ) {//set lights on in case user pressed "red button". If he pressed cancel the lights are on anyway so it doesn't matter. SendMessageToSysAp(EEikKeyLockLightsOnRequest); } - // we don't want enable lock if call in progress + // we don't want enable lock if call in progress RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); TInt keyguardDisableState(ECoreAppUIsDisableKeyguardUninitialized); //If there is alarm on the keyguard status is set to disabled. In that case don't enable keyguard as it will be done by SysAp @@ -802,26 +885,26 @@ RProperty::Get( KPSUidCoreApplicationUIs, KCoreAppUIsDisableKeyguard, keyguardDisableState ); if ((callState == EPSCTsyCallStateNone) && (keyguardDisableState != ECoreAppUIsDisableKeyguard)) { - RAknKeyLock keylock; - if ( keylock.Connect() == KErrNone ) - { - keylock.EnableAutoLockEmulation(); - keylock.Close(); - } - } + RAknKeyLock keylock; + if ( keylock.Connect() == KErrNone ) + { + keylock.EnableAutoLockEmulation(); + keylock.Close(); + } + } } } - };) + };) - // start observing emergency call event - iEmergencySupportReady = ETrue; - CleanupStack::PopAndDestroy(handler); // handler - TSecUi::UnInitializeLib(); // secui - - User::LeaveIfError(err); + // start observing emergency call event + iEmergencySupportReady = ETrue; + CleanupStack::PopAndDestroy(handler); // handler + TSecUi::UnInitializeLib(); // secui + + User::LeaveIfError(err); - break; - } + break; + } default: break; } @@ -833,43 +916,43 @@ //---------------------------------------------------- // void CAutolockAppUi::SwitchToPreviousAppL() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::SwitchToPreviousAppL()")); - #endif - iEcsDetector->Reset(); // Ecs queue is cleared; keys up til here are forgotten - // stop observing phone events - iPhoneObserver->Stop(); - CAknView* view = View(KAutoLockViewId); - if(view) - { - STATIC_CAST(CAutolockView*, view)->MakeVisible(EFalse); - } - else - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) no view ????=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, view ); - #endif - } - // app to background - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.SendToBackground(); - // flush - iCoeEnv->WsSession().Flush(); - } + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::SwitchToPreviousAppL()")); + #endif + iEcsDetector->Reset(); // Ecs queue is cleared; keys up til here are forgotten + // stop observing phone events + iPhoneObserver->Stop(); + CAknView* view = View(KAutoLockViewId); + if(view) + { + STATIC_CAST(CAutolockView*, view)->MakeVisible(EFalse); + } + else + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) no view ????=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, view ); + #endif + } + // app to background + TApaTask self(iCoeEnv->WsSession()); + self.SetWgId(iCoeEnv->RootWin().Identifier()); + self.SendToBackground(); + // flush + iCoeEnv->WsSession().Flush(); + } // ---------------------------------------------------- // CAutolockAppUi::BringAppToForegroundL() // Activates autolock app //---------------------------------------------------- // void CAutolockAppUi::BringAppToForegroundL() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL()")); - #endif - TBool tarmAdminFlag(EFalse); - TBool remotelockState(EFalse); + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL()")); + #endif + TBool tarmAdminFlag(EFalse); + TBool remotelockState(EFalse); if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) { tarmAdminFlag = TarmState(); @@ -881,37 +964,67 @@ remotelockState = (autolockState == ERemoteLocked); #endif//RD_REMOTELOCK // If TARM admin flag is set, bring Autolock to foreground regardless of call state. + + if(!tarmAdminFlag) { //If phone has been remote locked bring Autolock to foreground regardless of call state. if(!remotelockState) { // check if there is active call - TInt callState; - RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); + TInt callState; + RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) callState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, callState ); + #endif + + TInt value(EStartupUiPhaseUninitialized); + RProperty::Get(KPSUidStartup, KPSStartupUiPhase, value); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) KPSStartupUiPhase value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, value ); + RDebug::Printf( "%s %s (%u) EStartupUiPhaseSystemWelcomeDone=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStartupUiPhaseSystemWelcomeDone ); + #endif + if(value EPSCTsyCallStateNone) + { + callState = EPSCTsyCallStateNone+0; // so that is locks + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) new+0 callState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, callState ); + #endif + } if (callState != EPSCTsyCallStateNone ) { - iModel->SetLockedL(EFalse); - iModel->ResetInactivityTimeout(); - UnLockKeys(); - return; - } + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) 1=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); + #endif + UnLockKeys(); + iModel->SetLockedL(EFalse); + iModel->ResetInactivityTimeout(); + return; + } } } - #ifndef __WINS__ + #ifndef __WINS__ - #ifndef __NO_DOS__ + #ifndef __NO_DOS__ - /***************************************************** - * Series 60 Customer / ETEL - * Series 60 ETEL API - *****************************************************/ + /***************************************************** + * Series 60 Customer / ETEL + * Series 60 ETEL API + *****************************************************/ - // check that device locked in DOS side too - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + // check that device locked in DOS side too + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL() GetLockInfo")); @@ -925,6 +1038,8 @@ // if not don't lock ui either #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL() KErrNone")); + RDebug::Printf( "%s %s (%u) lockInfo.iSetting=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, lockInfo.iSetting ); + RDebug::Printf( "%s %s (%u) RMobilePhone::ELockSetDisabled=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, RMobilePhone::ELockSetDisabled ); #endif if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) { @@ -935,46 +1050,49 @@ } #endif - #endif + #endif - // in case Telephone-app is topmost, then the user is confused because he sees but can't use it. - // therefore it's required to hide it, by sending to background. ETMA-7M8A2Y 20090105 - if ( AknLayoutUtils::PenEnabled() ) - { - TApaTaskList apaTaskList(CCoeEnv::Static()->WsSession()); + // in case Telephone-app is topmost, then the user is confused because he sees but can't use it. + // therefore it's required to hide it, by sending to background. ETMA-7M8A2Y 20090105 + if ( AknLayoutUtils::PenEnabled() ) + { + TApaTaskList apaTaskList(CCoeEnv::Static()->WsSession()); - TApaTask apaTask = apaTaskList.FindApp(KPhoneAppUid); - if (apaTask.Exists()) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAknKeyLockControl::EnableKeylock() Bring phone to background")); - #endif - // Bring phone to background - apaTask.SendToBackground(); - } - } - - iPhoneObserver->Start(); - iLocked = ETrue; - // app to foreground - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.BringToForeground(); - ActivateLocalViewL(KAutoLockViewId); - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; + TApaTask apaTask = apaTaskList.FindApp(KPhoneAppUid); + if (apaTask.Exists()) + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAknKeyLockControl::EnableKeylock() Bring phone to background")); + #endif + // Bring phone to background + apaTask.SendToBackground(); + } + } + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) iPhoneObserver->Start=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); + #endif + + iPhoneObserver->Start(); + iLocked = ETrue; + // app to foreground + TApaTask self(iCoeEnv->WsSession()); + self.SetWgId(iCoeEnv->RootWin().Identifier()); + self.BringToForeground(); + ActivateLocalViewL(KAutoLockViewId); + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; STATIC_CAST(CAutolockView*, view)->HandleCall(0x17, aInitialRect); - STATIC_CAST(CAutolockView*, view)->MakeVisible(ETrue); - } - else - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) no view ????=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, view ); - #endif - } - } + STATIC_CAST(CAutolockView*, view)->MakeVisible(ETrue); + } + else + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) no view ????=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, view ); + #endif + } + } // ---------------------------------------------------- // CAutolockAppUi::LockKeysL() @@ -982,61 +1100,66 @@ //---------------------------------------------------- // void CAutolockAppUi::LockKeysL() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::LockKeysL()")); - #endif - // capture appkey & volume key - if (!iAppKey) - { - RWindowGroup& groupWin=iCoeEnv->RootWin(); - iAppKey = groupWin.CaptureKeyUpAndDowns(EStdKeyApplication0, 0, 0); // Capture app key - } - // Any orientation change is a waste of battery and triggers unnecesary window events and paining. - // Not only that: in landscape the BigRedButton is too small. - // Therefore we always stay in portrait. The icon looks much nicer. - SetOrientationL( EAppUiOrientationPortrait ); - LockSideKeyL(); - } + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::LockKeysL()")); + #endif + // capture appkey & volume key + if (!iAppKey) + { + RWindowGroup& groupWin=iCoeEnv->RootWin(); + iAppKey = groupWin.CaptureKeyUpAndDowns(EStdKeyApplication0, 0, 0); // Capture app key + } + TInt gripStatus = EPSHWRMGripClosed; + RProperty::Get( KPSUidHWRM, KHWRMGripStatus, gripStatus ); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) gripStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, gripStatus ); + #endif + if(gripStatus==EPSHWRMGripOpen) + ForceOrientation(0); + else + ForceOrientation(1); + LockSideKeyL(); + } // ---------------------------------------------------- // CAutolockAppUi::UnLockKeys() // unlocks keys //---------------------------------------------------- // void CAutolockAppUi::UnLockKeys() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::UnLockKeysL()")); - #endif - // uncapture appkey - if (iAppKey) - { - RWindowGroup& groupWin=iCoeEnv->RootWin(); - groupWin.CancelCaptureKeyUpAndDowns(iAppKey); - iAppKey = 0; - } - UnLockSideKey(); - } + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::UnLockKeysL()")); + #endif + // uncapture appkey + if (iAppKey) + { + RWindowGroup& groupWin=iCoeEnv->RootWin(); + groupWin.CancelCaptureKeyUpAndDowns(iAppKey); + iAppKey = 0; + } + UnLockSideKey(); + } // ---------------------------------------------------- // CAutolockAppUi::LockSideKeyL() // unlocks side-key //---------------------------------------------------- // void CAutolockAppUi::LockSideKeyL() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::LockSideKeyL()")); - #endif - if (!iSideKey1) - { - RWindowGroup& groupWin=iCoeEnv->RootWin(); - iSideKey1 = groupWin.CaptureKey(EKeyDeviceF,0,0); // EKeySide -> EKeyDeviceF - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) capturing EStdKeyDeviceF=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStdKeyDeviceF ); - #endif - iSideKey2 = groupWin.CaptureKeyUpAndDowns(EStdKeyDeviceF, 0, 0); // EStdKeyDevice6 -> EStdKeyDeviceF - } - } + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::LockSideKeyL()")); + #endif + if (!iSideKey1) + { + RWindowGroup& groupWin=iCoeEnv->RootWin(); + iSideKey1 = groupWin.CaptureKey(EKeyDeviceF,0,0); // EKeySide -> EKeyDeviceF + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) capturing EStdKeyDeviceF=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStdKeyDeviceF ); + #endif + iSideKey2 = groupWin.CaptureKeyUpAndDowns(EStdKeyDeviceF, 0, 0); // EStdKeyDevice6 -> EStdKeyDeviceF + } + } // ------------------------------------------------------------------------------------------------------------- // part of emergency call handling when telephony+devicelock is active @@ -1170,27 +1293,27 @@ } // ------------------------------------------------------------------------------------------------------------- - + // ---------------------------------------------------- // CAutolockAppUi::UnLockSideKey() // unlocks side-key //---------------------------------------------------- // void CAutolockAppUi::UnLockSideKey() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::UnLockSideKeyL()")); - #endif - if (iSideKey1) - { - RWindowGroup& groupWin=iCoeEnv->RootWin(); - groupWin.CancelCaptureKeyUpAndDowns(iSideKey2); - groupWin.CancelCaptureKey(iSideKey1); - iSideKey1 = 0; - iSideKey2 = 0; - } - } - + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::UnLockSideKeyL()")); + #endif + if (iSideKey1) + { + RWindowGroup& groupWin=iCoeEnv->RootWin(); + groupWin.CancelCaptureKeyUpAndDowns(iSideKey2); + groupWin.CancelCaptureKey(iSideKey1); + iSideKey1 = 0; + iSideKey2 = 0; + } + } + // // --------------------------------------------------------- @@ -1218,28 +1341,28 @@ // TBool CAutolockAppUi::IsPinBlocked() { - RMmCustomAPI::TSecurityCodeType secCodeType; - TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); - TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + RMmCustomAPI::TSecurityCodeType secCodeType; + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); - if(wcdmaSupported || upinSupported) - { - RMobilePhone::TMobilePhoneSecurityCode activePin; - iCustomPhone.GetActivePin(activePin); - if(activePin == RMobilePhone::ESecurityUniversalPin) - secCodeType = RMmCustomAPI::ESecurityUniversalPin; - else - secCodeType = RMmCustomAPI::ESecurityCodePin1; - } - else - secCodeType = RMmCustomAPI::ESecurityCodePin1; - - TBool isBlocked = EFalse; + if(wcdmaSupported || upinSupported) + { + RMobilePhone::TMobilePhoneSecurityCode activePin; + iCustomPhone.GetActivePin(activePin); + if(activePin == RMobilePhone::ESecurityUniversalPin) + secCodeType = RMmCustomAPI::ESecurityUniversalPin; + else + secCodeType = RMmCustomAPI::ESecurityCodePin1; + } + else + secCodeType = RMmCustomAPI::ESecurityCodePin1; + + TBool isBlocked = EFalse; iCustomPhone.IsBlocked(secCodeType,isBlocked); #if defined(_DEBUG) RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::IsPinBlocked result: %d"), isBlocked); #endif - return isBlocked; + return isBlocked; } // @@ -1250,132 +1373,218 @@ // void CAutolockAppUi::HandleWsEventL( const TWsEvent& aEvent,CCoeControl* aDestination ) { - const TInt type = aEvent.Type(); - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) type=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, type ); - #endif + const TInt type = aEvent.Type(); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) type=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, type ); + #endif - switch ( type ) - { - case KAknFullOrPartialForegroundLost: // partial or full fg lost - if( iIncallBubble ) + switch ( type ) + { + case KAknFullOrPartialForegroundLost: // partial or full fg lost + if( iIncallBubble ) { #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleWsEventL: DISABLE call bubble")); - #endif + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleWsEventL: DISABLE call bubble")); + #endif iIncallBubble->SetIncallBubbleAllowedInIdleL( EFalse ); } - break; - case KAknFullOrPartialForegroundGained: // partial or full fg gained - if( iIncallBubble ) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleWsEventL: ENABLE call bubble")); - #endif - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x1A, aInitialRect); - } + break; + case KAknFullOrPartialForegroundGained: // partial or full fg gained + if( iIncallBubble ) + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleWsEventL: ENABLE call bubble")); + #endif + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x1A, aInitialRect); + } - iIncallBubble->SetIncallBubbleAllowedInIdleL( ETrue ); - } - break; - case EEventWindowGroupListChanged: - HandleWindowGroupListChange(); - break; - case EEventPointer: - case EEventDragDrop: - { - TInt callState = 0; - RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); - TPointerEvent *pointer = aEvent.Pointer(); - CAknView* view = View(KAutoLockViewId); - if(view) - { - STATIC_CAST(CAutolockView*, view)->ScreenDeviceChanged(); - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x1, aInitialRect); - if(aCallButtonRect.iBr.iX==0) // initialize if not done already - aCallButtonRect = TRect (aInitialRect); - } - if ( callState != EPSCTsyCallStateNone && callState != EPSCTsyCallStateUninitialized ) - { - if(pointer->iType==TPointerEvent::EButton1Down) - { - TPoint iPosition = pointer->iPosition; - if(aCallButtonRect.iBr.iX400 ) - { - iGotEventDownDuringCall=1; - } - } - if(pointer->iType==TPointerEvent::EButton1Up) - { - TPoint iPosition = pointer->iPosition; - // touching at any point inside and below the BigRedButton. This is to handle the case where another dialog overlaps - if(iGotEventDownDuringCall==1 && aCallButtonRect.iBr.iX400 ) - { - TApaTaskList tasklist( iCoeEnv->WsSession() ); - TApaTask phonetask = tasklist.FindApp( KPhoneAppUid ); - if ( phonetask.Exists() ) - { // send End key to Telephony to end the call - TRawEvent event; - event.Set(TRawEvent::EKeyDown, EStdKeyNo); - iEikonEnv->WsSession().SimulateRawEvent(event); - User::After(1000); - event.Set(TRawEvent::EKeyUp, EStdKeyNo); - iEikonEnv->WsSession().SimulateRawEvent(event); - } - } - iGotEventDownDuringCall=0; // even if outside - } - } - } - break; - case EEventKeyUp: // on touch devices, this happens only for the switch-key, which should turn on the lights. - case EEventKey: - case EEventKeyDown: - if(iLocked) - { // need to capture the switch-key for the case activeCall because Autolock stays on top, even over Akn - TKeyEvent *key = aEvent.Key(); - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) key->iCode=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, key->iCode ); - RDebug::Printf( "%s %s (%u) key->iScanCode=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, key->iScanCode ); - #endif - if ( (key->iScanCode == EStdKeyDeviceF) || (key->iCode == EKeyDeviceF) ) - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) good key=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); - #endif - RWsSession& ws = iEikonEnv->WsSession(); - TApaTaskList tasklist( ws ); - TApaTask capserver = tasklist.FindApp( KAknCapServerUid ); - if( capserver.Exists() ) - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) found KAknCapServerUid=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, KAknCapServerUid ); - #endif - capserver.SendKey( *key ); - } - SendMessageToSysAp( EEikSecurityQueryLights ); - } + iIncallBubble->SetIncallBubbleAllowedInIdleL( ETrue ); + } + break; + case EEventWindowGroupListChanged: + HandleWindowGroupListChange(); + break; + case EEventPointer: + case EEventDragDrop: + { + TInt gripStatus = EPSHWRMGripClosed; + RProperty::Get( KPSUidHWRM, KHWRMGripStatus, gripStatus ); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) 1 gripStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, gripStatus ); + RDebug::Printf( "%s %s (%u) EPSHWRMGripClosed=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EPSHWRMGripClosed ); + #endif + if(gripStatus==EPSHWRMGripStatusUninitialized) + { + gripStatus=EPSHWRMGripClosed; + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) new gripStatus=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, gripStatus ); + #endif } - break; - default: - iGotEventDownDuringCall=0; // any other event invalidates the Press inside the BigRedButton - break; - } - - // All events are sent to base class. - CAknViewAppUi::HandleWsEventL( aEvent, aDestination ); + TInt callState = 0; + RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) callState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, callState ); + #endif + TPointerEvent *pointer = aEvent.Pointer(); + CAknView* view = View(KAutoLockViewId); + if(view) + { + STATIC_CAST(CAutolockView*, view)->ScreenDeviceChanged(); + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x1, aInitialRect); + if(aCallButtonRect.iBr.iX==0) // initialize if not done already + aCallButtonRect = TRect (aInitialRect); + } + if ( callState != EPSCTsyCallStateNone && callState != EPSCTsyCallStateUninitialized ) + { + if(pointer->iType==TPointerEvent::EButton1Down) + { + TPoint iPosition = pointer->iPosition; + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) iPosition.iX=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iPosition.iX ); + RDebug::Printf( "%s %s (%u) aCallButtonRect.iBr.iX=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aCallButtonRect.iBr.iX ); + RDebug::Printf( "%s %s (%u) iPosition.iY=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iPosition.iY ); + RDebug::Printf( "%s %s (%u) aCallButtonRect.iBr.iY=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aCallButtonRect.iBr.iY ); + #endif + if(aCallButtonRect.iBr.iX400) || (gripStatus!=EPSHWRMGripClosed && aCallButtonRect.iBr.iYiType==TPointerEvent::EButton1Up) + { + TPoint iPosition = pointer->iPosition; + // touching at any point inside and below the BigRedButton. This is to handle the case where another dialog overlaps + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) iGotEventDownDuringCall=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iGotEventDownDuringCall ); + RDebug::Printf( "%s %s (%u) iPosition.iX=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iPosition.iX ); + RDebug::Printf( "%s %s (%u) aCallButtonRect.iBr.iX=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aCallButtonRect.iBr.iX ); + RDebug::Printf( "%s %s (%u) iPosition.iY=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iPosition.iY ); + RDebug::Printf( "%s %s (%u) aCallButtonRect.iBr.iY=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aCallButtonRect.iBr.iY ); + #endif + if(iGotEventDownDuringCall==1 && aCallButtonRect.iBr.iX400) || (gripStatus!=EPSHWRMGripClosed && aCallButtonRect.iBr.iYWsSession().SimulateRawEvent(event); + User::After(1000); + event.Set(TRawEvent::EKeyUp, EStdKeyNo); + iEikonEnv->WsSession().SimulateRawEvent(event); + User::After(100000); // give time for the call to end + } + } + iGotEventDownDuringCall=0; // even if outside the touch area + aCallButtonRect.iBr.iX = 0; + } + } + } + break; + case EEventKeyUp: // on touch devices, this happens only for the switch-key, which should turn on the lights. + case EEventKey: + case EEventKeyDown: + if(iLocked) + { // need to capture the switch-key for the case activeCall because Autolock stays on top, even over Akn + TKeyEvent *key = aEvent.Key(); + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) key->iCode=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, key->iCode ); + RDebug::Printf( "%s %s (%u) key->iScanCode=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, key->iScanCode ); + #endif + if ( (key->iScanCode == EStdKeyDeviceF) || (key->iCode == EKeyDeviceF) ) + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) good key=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); + #endif + RWsSession& ws = iEikonEnv->WsSession(); + TApaTaskList tasklist( ws ); + TApaTask capserver = tasklist.FindApp( KAknCapServerUid ); + if( capserver.Exists() ) + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) found KAknCapServerUid=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, KAknCapServerUid ); + #endif + capserver.SendKey( *key ); + } + SendMessageToSysAp( EEikSecurityQueryLights ); + } + } + break; + default: + iGotEventDownDuringCall=0; // any other event invalidates the Press inside the BigRedButton + break; + } + + // All events are sent to base class. + CAknViewAppUi::HandleWsEventL( aEvent, aDestination ); // part of emergency call handling when telephony+devicelock is active // this solution is meant only for 3.1 and 3.2 // Emergency detector only handles key down events if ( iEmergencySupportReady ) - iEcsDetector->HandleWsEventL( aEvent, aDestination); - #if defined(_DEBUG) + iEcsDetector->HandleWsEventL( aEvent, aDestination); + #if defined(_DEBUG) RDebug::Printf( "%s %s (%u) 0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); #endif } @@ -1390,9 +1599,30 @@ return iLocked; } +void CAutolockAppUi::ForceOrientation(TInt value) + { + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, value ); + #endif + if(value==1) + { + SetOrientationL( EAppUiOrientationLandscape ); + SetOrientationL( EAppUiOrientationPortrait ); + } + if(value==0) + { + SetOrientationL( EAppUiOrientationPortrait ); + SetOrientationL( EAppUiOrientationLandscape ); + } + aCallButtonRect.iBr.iX = 0; + #if defined(_DEBUG) + RDebug::Printf( "%s %s (%u) done value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, value ); + #endif + } + void CAutolockAppUi::CancelDeviceLockQuery() { - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Printf( "%s %s (%u) 0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); #endif TRawEvent rawEvent; @@ -1404,15 +1634,15 @@ TBool CAutolockAppUi::DeviceFpsLock(TInt iStatus) { - if(iStatus) - HandleCommandL(ESecUiCmdUnlock); - else - iModel->SetLockedL(ETimerLocked); + if(iStatus) + HandleCommandL(ESecUiCmdUnlock); + else + iModel->SetLockedL(ETimerLocked); return ETrue; } void CAutolockAppUi::HandleWindowGroupListChange() { - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Printf( "%s %s (%u) iLocked=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iLocked ); #endif if ( !iLocked ) @@ -1427,14 +1657,14 @@ } else { - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aInitialRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(0x10, aInitialRect); - if(aCallButtonRect.iBr.iX==0) // initialize if not done already - aCallButtonRect = TRect (aInitialRect); - } + CAknView* view = View(KAutoLockViewId); + if(view) + { + TRect aInitialRect; + STATIC_CAST(CAutolockView*, view)->HandleCall(0x10, aInitialRect); + if(aCallButtonRect.iBr.iX==0) // initialize if not done already + aCallButtonRect = TRect (aInitialRect); + } // So now system is locked. When call is not ongoing, autolock should // be on the foreground. TInt callState = 0; @@ -1461,7 +1691,7 @@ { // Get the TARM admin flag value TInt tarmFlag; - TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); + TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); if ( tRet != KErrNone ) { @@ -1498,7 +1728,7 @@ } } - #if defined(_DEBUG) + #if defined(_DEBUG) RDebug::Printf( "%s %s (%u) ret=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, ret ); #endif return ret; @@ -1510,41 +1740,41 @@ TBool CAutolockAppUi::HiddenReset() { #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() begin")); - #endif + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() begin")); + #endif TBool ret_val ( EFalse ); - TInt startupReason(ENormalStartup); - TInt errorCode(KErrNone); - - RProperty::Get(KPSUidStartup, KPSStartupReason, startupReason); - - if ( errorCode != KErrNone ) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() error getting startup reason")); - #endif - } + TInt startupReason(ENormalStartup); + TInt errorCode(KErrNone); + + RProperty::Get(KPSUidStartup, KPSStartupReason, startupReason); + + if ( errorCode != KErrNone ) + { + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() error getting startup reason")); + #endif + } ret_val = (startupReason != ENormalStartup); #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() END: %d"), ret_val); - #endif + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HiddenReset() END: %d"), ret_val); + #endif return ret_val; } void CAutolockAppUi::EnableWGListChangeEventListening() { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::EnableWGListChangeEventListening()")); - #endif + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::EnableWGListChangeEventListening()")); + #endif RWindowGroup& rootWin = iCoeEnv->RootWin(); rootWin.EnableGroupListChangeEvents(); rootWin.EnableScreenChangeEvents(); } void CAutolockAppUi::DisableWGListChangeEventListening() { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::DisableWGListChangeEventListening()")); - #endif + #if defined(_DEBUG) + RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::DisableWGListChangeEventListening()")); + #endif RWindowGroup& rootWin = iCoeEnv->RootWin(); rootWin.DisableGroupListChangeEvents(); rootWin.DisableScreenChangeEvents();