diff -r b63e8c2d8cff -r 604cd42065d1 securitydialogs/Autolock/src/AutolockAppUi.cpp --- a/securitydialogs/Autolock/src/AutolockAppUi.cpp Thu Jun 17 12:11:51 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1060 +0,0 @@ -/* -* Copyright (c) 2002 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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // Property values -#include -#include -#include -#include -#include - -#include "AutolockAppUiPS.h" -#include "AutoLockValueObserverPS.h" -#include "AutoLockModelPS.h" -#include "AutolockApp.h" -#include "autolock.hrh" -#include "AutolockView.h" - -#include -#include - -// sysap uid and message enums defined in eikon.hrh -// for sending messages to sysap -#include -#include -#include - -// LOCAL CONSTANTS AND MACROS -#define KSysApUid TUid::Uid(0x100058F3) - -const TInt KTriesToConnectServer( 2 ); -const TInt KTimeBeforeRetryingServerConnection( 50000 ); -const TInt PhoneIndex( 0 ); - -// ================= MEMBER FUNCTIONS ======================= -// -// ---------------------------------------------------------- -// CAutolockAppUi::ConstructL() -// ?implementation_description -// ---------------------------------------------------------- -// -void CAutolockAppUi::ConstructL() - { - RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL")); - #endif - - RDebug::Printf( "%s %s (%u) EAutolockOff=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EAutolockOff ); - RProperty::Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOff); - - BaseConstructL( EAknEnableSkin | EAknEnableMSK ); - - } -// ---------------------------------------------------- -// CAutolockAppUi::~CAutolockAppUi() -// Destructor -// Frees reserved resources -// ---------------------------------------------------- -// -CAutolockAppUi::~CAutolockAppUi() - { - RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() BEGIN")); - #endif - - if(iWait) - { - // Cancel active requests - if(iWait->IsActive()) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() CANCEL REQ")); - #endif - iPhone.CancelAsyncRequest(iWait->GetRequestType()); - } - } - //close ETel connections - if (iCustomPhone.SubSessionHandle()) - iCustomPhone.Close(); - - if (iPhone.SubSessionHandle()) - iPhone.Close(); - - if (iServer.Handle()) - { - iServer.UnloadPhoneModule(KMmTsyModuleName); - iServer.Close(); - } - RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - delete iModel; - delete iPhoneObserver; - delete iIncallBubble; -RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - #ifdef RD_AUTO_KEYGUARD - delete iKeyguardObserver; -#endif - - delete iEcsDetector; - delete iEcsNote; // Ecs change - RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - delete iWait; - FeatureManager::UnInitializeLib(); - delete iGripStatusObserver; - delete iFpsStatusObserver; - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() END")); - #endif -RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - } -// ---------------------------------------------------- -// CAutolockAppUi::HandleForegroundEventL() -// Handles foreground event. -// ---------------------------------------------------- -// -void CAutolockAppUi::HandleForegroundEventL(TBool aForeground) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleForegroundEventL()")); - #endif - if (aForeground ) - { - if (iLocked) - { - // lock voice key - LockSideKeyL(); - } - else - { - // app back to background - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.SendToBackground(); - } - } - - 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 - TApaTask self(iCoeEnv->WsSession()); - self.SetWgId(iCoeEnv->RootWin().Identifier()); - self.BringToForeground(); - } - else - { - // unlock voice key while there is active call - UnLockSideKey(); - } - } - - CAknAppUi::HandleForegroundEventL(aForeground); - - } - - -// ---------------------------------------------------- -// 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 defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL()")); - #endif - - MCoeMessageObserver::TMessageResponse messageResponse( EMessageHandled ); - - if ( aMessageUid.iUid == SCP_CMDUID_UNLOCK ) - { - // For security reasons we must check from the SCP server did this - // command originate from it. - RSCPClient scpClient; - if ( scpClient.Connect() == KErrNone ) - { - CleanupClosePushL( scpClient ); - - if ( scpClient.QueryAdminCmd( ESCPCommandUnlockPhone ) ) - { - // Switch autolock to BG - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL():\ - Admin command received, unlocking")); - #endif - - if ( !iLocked ) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL():\ - Ignoring Unlock message - not locked.")); - #endif - } - 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(); - } - } - else - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL():\ - Unauthorized attempt to unlock")); - #endif - } - - CleanupStack::PopAndDestroy(); // scpClient - } - else - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL():\ - Failed to connect to SCP, ignoring unlock-message.")); - #endif - - } - } - else // aMessageUid.iUid != SCP_CMDUID_UNLOCK - { - messageResponse = CAknAppUi::HandleMessageL( aClientHandleOfTargetWindowGroup, - aMessageUid, - aMessageParameters - ); - } - - return messageResponse; - } - - -// ------------------------------------------------------------------------------ -// CAutolockAppUi::::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane) -// This function is called by the UIKON framework just before it displays -// a menu pane. Its default implementation is empty, and by overriding it, -// the application can set the state of menu items dynamically according -// to the state of application data. -// ------------------------------------------------------------------------------ -// -void CAutolockAppUi::DynInitMenuPaneL( - TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/) - { - } - -void CAutolockAppUi::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 ); - } -// ---------------------------------------------------- -// CAutolockAppUi::HandleKeyEventL( -// const TKeyEvent& aKeyEvent,TEventCode /*aType*/) -// ---------------------------------------------------- -// -TKeyResponse CAutolockAppUi::HandleKeyEventL( - const TKeyEvent& aKeyEvent,TEventCode aType) - { - if ( aKeyEvent.iCode == EKeyBell) - { - HandleCommandL(ESecUiCmdUnlock); - return EKeyWasConsumed; - } - - TBool featureNoPowerkey = FeatureManager::FeatureSupported( KFeatureIdNoPowerkey ); - // If power key pressed, tell SysAp about if - if( (aKeyEvent.iScanCode == EStdKeyDevice2 && aType == EEventKeyDown ) - || (aType == EEventKey && featureNoPowerkey && aKeyEvent.iCode == EKeyNo)) - { - SendMessageToSysAp(EEikKeyLockPowerKeyPressed); - if ( featureNoPowerkey ) - { - SendMessageToSysAp(EEikKeyLockLightsOnRequest); - } - } - return EKeyWasNotConsumed; - } - -void CAutolockAppUi::SendMessageToSysAp(TInt aMessage) - { - RWsSession& ws = iEikonEnv->WsSession(); - TInt wgId=0; - CApaWindowGroupName::FindByAppUid(KSysApUid, ws, wgId); - if (wgId) - { - TWsEvent event; - event.SetType(aMessage); - event.SetTimeNow(); - ws.SendEventToWindowGroup(wgId, event); - } - } - -// ---------------------------------------------------- -// 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) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL()")); - #endif - switch ( aCommand ) - { - case EEikCmdExit: - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleCommandL() EEikCmdExit")); - #endif - Exit(); - break; - } - case ESecUiCmdUnlock: - { - RDebug::Printf( "%s %s (%u) ESecUiCmdUnlock is not longer handled by Autolock=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, ESecUiCmdUnlock ); - - break; - } - default: - break; - } - } - -// ---------------------------------------------------- -// CAutolockAppUi::SwitchToPreviousAppL() -// Activates previous app -//---------------------------------------------------- -// -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(); - } -// ---------------------------------------------------- -// 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(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) -{ - tarmAdminFlag = TarmState(); -} - -#ifdef RD_REMOTELOCK - TInt autolockState; - RProperty::Get(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, autolockState); - 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 ); - if (callState != EPSCTsyCallStateNone ) - { - iModel->SetLockedL(EFalse); - iModel->ResetInactivityTimeout(); - UnLockKeys(); - return; - } - } - - } - - - #ifndef __WINS__ - - #ifndef __NO_DOS__ - - /***************************************************** - * 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); - - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL() GetLockInfo")); - #endif - iWait->SetRequestType(EMobilePhoneGetLockInfo); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - TInt res = iWait->WaitForRequestL(); - User::LeaveIfError(res); - if (iWait->iStatus == KErrNone) - { - // if not don't lock ui either - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL() KErrNone")); - #endif - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - iModel->SetLockedL(EFalse); - UnLockKeys(); - return; - } - } - #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()); - #define KPhoneAppUid TUid::Uid(0x100058B3) - - 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) - { - 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() -// locks keys -//---------------------------------------------------- -// -void CAutolockAppUi::LockKeysL() - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::LockKeysL()")); - #endif - // capture appkey & volume key - if (!iAppKey) - { - RWindowGroup& groupWin=iCoeEnv->RootWin(); - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) searching for popupclock.exe =%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0x0 ); - #endif - TApaTaskList taskList( CCoeEnv::Static()->WsSession() ); - const TUid KBigClockUid = { 0x2000FDC3 }; - TApaTask task( taskList.FindApp( KBigClockUid ) ); - if ( task.Exists() ) - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) popupclock.exe is running. Not capturing EStdKeyApplication0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStdKeyApplication0 ); - #endif - } - else - { - #if defined(_DEBUG) - RDebug::Printf( "%s %s (%u) popupclock.exe not running. Not capturing EStdKeyApplication0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStdKeyApplication0 ); - #endif - iAppKey = groupWin.CaptureKeyUpAndDowns(EStdKeyApplication0, 0, 0); // Capture app key - } - } - 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(); - } -// ---------------------------------------------------- -// 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(EKeySide,0,0); - iSideKey2 = groupWin.CaptureKeyUpAndDowns(EStdKeyDevice6, 0, 0); - } - } - -// ------------------------------------------------------------------------------------------------------------- -// part of emergency call handling when telephony+devicelock is active -// this solution is meant only for 3.1 and 3.2 -void CAutolockAppUi::HandleEcsEvent( CAknEcsDetector* aEcsDetector, CAknEcsDetector::TState aState ) - { - switch ( aState ) - { - case CAknEcsDetector::ECompleteMatchThenSendKey: - // Do nothing since note will be removed on ECallAttempted event - break; - case CAknEcsDetector::ECompleteMatch: - iEcsNote->SetEmergencyNumber( aEcsDetector->CurrentMatch() ); - - // Tell sysAp to switch lights on - SendMessageToSysAp( EEikEcsQueryLights ); - - iEcsNote->ShowNote(); - iEcsNote->iNoteOnScreen =ETrue; - break; - case CAknEcsDetector::EPartialMatch: - iEcsNote->SleepNote(); - break; - case CAknEcsDetector::ECallAttempted: - iEcsNote->SleepNote(); - break; - case CAknEcsDetector::EEmpty: - iEcsNote->SleepNote(); - break; - case CAknEcsDetector::ENoMatch: - iEcsNote->SleepNote(); - break; - default: - break; - } - } - -CEcsNote::CEcsNote() : iNoteOnScreen( EFalse ) - {} - -void CEcsNote::ConstructSleepingNoteL(TInt aResourceId) - { - CAknNoteDialog::ConstructSleepingDialogL(aResourceId); - } - -TInt CEcsNote::ShowNote() - { - ReportUserActivity(); - iTimeoutInMicroseconds = CAknNoteDialog::EUndefinedTimeout; - iTone = CAknNoteDialog::ENoTone; - if (!iNoteOnScreen) - { - return RouseSleepingDialog(); - } - // return value not used - else - // return value not used - return NULL; - } - -void CEcsNote::SleepNote() - { - if (iNoteOnScreen) - ExitSleepingDialog(); // Causes flicker to other notes if called when note is not on screen - iNoteOnScreen = EFalse; - } - -TKeyResponse CEcsNote::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/) - { - return EKeyWasConsumed; - } - -void CEcsNote::SetEmergencyNumber( const TDesC& aMatchedNumber ) - { - TRect screen(iAvkonAppUi->ApplicationRect()); - TAknLayoutRect mainPane; - mainPane.LayoutRect(screen, AKN_LAYOUT_WINDOW_main_pane(screen, 0, 1, 1)); - TAknLayoutRect popupNoteWindow; - AknLayoutUtils::TAknCbaLocation cbaLocation( AknLayoutUtils::CbaLocation() ); - TInt variety( 0 ); - if ( cbaLocation == AknLayoutUtils::EAknCbaLocationRight ) - { - variety = 5; - } - else if ( cbaLocation == AknLayoutUtils::EAknCbaLocationLeft ) - { - variety = 8; - } - else - { - variety = 2; - } - - popupNoteWindow.LayoutRect(mainPane.Rect(), AknLayoutScalable_Avkon::popup_note_window( variety )); - TAknLayoutText textRect; - textRect.LayoutText(popupNoteWindow.Rect(), AKN_LAYOUT_TEXT_Note_pop_up_window_texts_Line_1(4)); - - // Size of a temporary buffer that contains new lines, spaces and - // emergency number for a note. - TBuf16 number; - number.Append('\n'); - number.Append('\n'); - - TInt spaceCharWidthInPixels = textRect.Font()->CharWidthInPixels(' '); - if (spaceCharWidthInPixels < 1) - { - // Avoid divide by zero situation even the space char would have zero length. - spaceCharWidthInPixels = 1; - } - - TInt length = (textRect.TextRect().Width() - textRect.Font()->TextWidthInPixels(aMatchedNumber)) - / spaceCharWidthInPixels; - - const TInt matchedNumberLength = aMatchedNumber.Length(); - const TInt numberLength = number.Length(); - const TInt numberMaxLength = number.MaxLength(); - - if ( numberLength + length + matchedNumberLength > numberMaxLength) - { - // To make sure that buffer overflow does not happen. - length = numberMaxLength - numberLength - matchedNumberLength; - } - for (int i = 0; i < length ; i++) - { - number.Append(' '); - } - - number.Append(aMatchedNumber); - TRAP_IGNORE(SetTextL(number)); - - } - -// ------------------------------------------------------------------------------------------------------------- - -// ---------------------------------------------------- -// 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; - } - } - - -// -// --------------------------------------------------------- -// CAutolockAppUi::HandleScreenDeviceChangedL() -// Handles screen layout changes, called by CCoeAppUi -// --------------------------------------------------------- -// -void CAutolockAppUi::HandleScreenDeviceChangedL() -{ - CAknAppUiBase::HandleScreenDeviceChangedL(); - //get autolock view from CAknViewAppUi - CAknView* view = View(KAutoLockViewId); - if(view) - { - STATIC_CAST(CAutolockView*, view)->ScreenDeviceChanged(); - } - -} - -// -// ---------------------------------------------------------- -// CAutolockAppUi::IsPinBlocked() -// Checks whether PIN1/UPIN is blocked -// ---------------------------------------------------------- -// -TBool CAutolockAppUi::IsPinBlocked() -{ - 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; - iCustomPhone.IsBlocked(secCodeType,isBlocked); - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::IsPinBlocked result: %d"), isBlocked); - #endif - return isBlocked; -} - -// -// ---------------------------------------------------------- -// CAutolockAppUi::HandleWsEventL() -// -// ---------------------------------------------------------- -// -void CAutolockAppUi::HandleWsEventL( const TWsEvent& aEvent,CCoeControl* aDestination ) - { - const TInt type = aEvent.Type(); - - switch ( type ) - { - case KAknFullOrPartialForegroundLost: // partial or full fg lost - if( iIncallBubble ) - { - #if defined(_DEBUG) - 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 - iIncallBubble->SetIncallBubbleAllowedInIdleL( ETrue ); - } - break; - case EEventWindowGroupListChanged: - HandleWindowGroupListChange(); - break; - case EEventPointer: - case EEventDragDrop: - { - TInt callState = 0; - RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); - if ( 1==1 || callState == EPSCTsyCallStateNone || callState == EPSCTsyCallStateUninitialized ) - { - TPointerEvent *pointer = aEvent.Pointer(); - CAknView* view = View(KAutoLockViewId); - if(view) - { - STATIC_CAST(CAutolockView*, view)->ScreenDeviceChanged(); - TRect aCallRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(1, aCallRect); - if(aCallButtonRect.iBr.iX==0) - aCallButtonRect = TRect (aCallRect); - } - if(pointer->iType==TPointerEvent::EButton1Up) - { - TPoint iPosition = pointer->iPosition; - if(aCallButtonRect.iBr.iXWsSession() ); - TApaTask phonetask = tasklist.FindApp( KPhoneAppUid1 ); - if ( phonetask.Exists() ) - { - TRawEvent event; - event.Set(TRawEvent::EKeyDown, EStdKeyNo); - iEikonEnv->WsSession().SimulateRawEvent(event); - User::After(1000); - event.Set(TRawEvent::EKeyUp, EStdKeyNo); - iEikonEnv->WsSession().SimulateRawEvent(event); - } - } - } - } - } - 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) - SendMessageToSysAp( EEikSecurityQueryLights ); - break; - default: - 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); - } - -TBool CAutolockAppUi::DeviceLockQueryStatus() - { - return iDeviceLockQueryStatus; - } - -TBool CAutolockAppUi::DeviceLockStatus() - { - return iLocked; - } - -TBool CAutolockAppUi::DeviceFpsLock(TInt iStatus) - { - if(iStatus) - HandleCommandL(ESecUiCmdUnlock); - else - iModel->SetLockedL(ETimerLocked); - return ETrue; - } -void CAutolockAppUi::HandleWindowGroupListChange() - { - if ( !iLocked ) - { - // System is not locked, make sure app is not on the foreground. - if ( !iCoeEnv->RootWin().OrdinalPosition() ) - { - CAknSgcClient::MoveApp( - iCoeEnv->RootWin().Identifier(), - ESgcMoveAppToBackground ); - } - } - else - { - CAknView* view = View(KAutoLockViewId); - if(view) - { - TRect aCallRect; - STATIC_CAST(CAutolockView*, view)->HandleCall(10, aCallRect); - if(aCallButtonRect.iBr.iX==0) - aCallButtonRect = TRect (aCallRect); - } - // So now system is locked. When call is not ongoing, autolock should - // be on the foreground. - TInt callState = 0; - RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState ); - if ( callState == EPSCTsyCallStateNone || - callState == EPSCTsyCallStateUninitialized ) - { - // No calls ongoing. - if ( iCoeEnv->RootWin().OrdinalPosition() > 0 ) - { - // Not on foreground - CAknSgcClient::MoveApp( - iCoeEnv->RootWin().Identifier(), - ESgcMoveAppToForeground ); - } - } - } - } - -TBool CAutolockAppUi::TarmState() -{ -TBool ret(EFalse); -if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) -{ - // Get the TARM admin flag value - TInt tarmFlag; - TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); - - if ( tRet != KErrNone ) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL(): Warning: failed to get TARM Admin Flag state")); - #endif - } - else - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL(): TARM flag: %d"), - tarmFlag ); - #endif - } - - // Unset the admin flag if set - if ( tarmFlag & KSCPFlagAdminLock ) - { - ret = ETrue; - TInt tRet = RProperty::Get( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); - - if ( tRet == KErrNone ) - { - tarmFlag &= ~KSCPFlagAdminLock; - tRet = RProperty::Set( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, tarmFlag ); - } - - if ( tRet != KErrNone ) - { - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::BringAppToForegroundL(): FAILED to unset TARM Admin Flag")); - #endif - } - } - -} -return ret; -} - -// --------------------------------------------------------- -// CAutolockAppUi::HiddenReset() -// --------------------------------------------------------- -TBool CAutolockAppUi::HiddenReset() - { - #if defined(_DEBUG) - 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 - } - ret_val = (startupReason != ENormalStartup); - #if defined(_DEBUG) - 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 - RWindowGroup& rootWin = iCoeEnv->RootWin(); - rootWin.EnableGroupListChangeEvents(); - rootWin.EnableScreenChangeEvents(); -} -void CAutolockAppUi::DisableWGListChangeEventListening() -{ - #if defined(_DEBUG) - RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::DisableWGListChangeEventListening()")); - #endif - RWindowGroup& rootWin = iCoeEnv->RootWin(); - rootWin.DisableGroupListChangeEvents(); - rootWin.DisableScreenChangeEvents(); -} -// End of File