--- a/securitydialogs/Autolock/src/AutolockAppUi.cpp Thu Aug 19 10:45:23 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1782 +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 <apgtask.h>
-#include <etelmm.h>
-#include <AknEcs.h>
-#include <aknnotedialog.h>
-#include <aknkeylock.h>
-#include <AknLayoutDef.h>
-#include <AknLayout.lag>
-#include <bldvariant.hrh>
-#include <aknappui.h>
-#include <centralrepository.h>
-#include <settingsinternalcrkeys.h>
-#include <secuisecurityhandler.h>
-#include <secui.h>
-#include <featmgr.h>
-#include <Autolock.rsg>
-#include <mmtsy_names.h>
-#include <e32property.h>
-#include <PSVariables.h> // Property values
-#include <coreapplicationuisdomainpskeys.h>
-#include <startupdomainpskeys.h>
-#include <ctsydomainpskeys.h>
-#include <securityuisprivatepskeys.h>
-#include <AknSgcc.h>
-
-#include "AutolockAppUiPS.h"
-#include "AutoLockValueObserverPS.h"
-#include "AutoLockModelPS.h"
-#include "AutolockApp.h"
-#include "autolock.hrh"
-#include "AutolockView.h"
-
-#include <SCPClient.h>
-#include <AknSoftNotifier.h>
-
-// sysap uid and message enums defined in eikon.hrh
-// for sending messages to sysap
-#include <eikon.hrh>
-#include <apgwgnam.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-
-#include <AknCapServerDefs.h>
-#include <apgtask.h>
-
-#include <keylockpolicyapi.h>
-
-// LOCAL CONSTANTS AND MACROS
-#define KSysApUid TUid::Uid(0x100058F3)
-#define KPhoneAppUid TUid::Uid(0x100058B3)
-
-const TInt KTriesToConnectServer( 2 );
-const TInt KTimeBeforeRetryingServerConnection( 50000 );
-const TInt PhoneIndex( 0 );
-const TInt KCancelKeyScanCode( EStdKeyDevice1 ); // 165
-
-
-// ================= MEMBER FUNCTIONS =======================
-//
-// ----------------------------------------------------------
-// CAutolockAppUi::ConstructL()
-// ?implementation_description
-// ----------------------------------------------------------
-//
-void CAutolockAppUi::ConstructL()
- {
- #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 );
-
- FeatureManager::InitializeLibL();
-
- RTelServer::TPhoneInfo PhoneInfo;
- // prevent autolock shutdown
- iEikonEnv->SetSystem( ETrue );
-
- 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;
-
- iSideKey1 = 0;
- iSideKey2 = 0;
- iAppKey = 0;
-
- 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
- fails on connections are possible at least on some servers*/
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() connect to etel server"));
- #endif
- // connect etel server
- while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer )
- {
- User::After( KTimeBeforeRetryingServerConnection );
- }
- User::LeaveIfError( err );
-
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() load tsy"));
- #endif
- // load tsy
- err = iServer.LoadPhoneModule( KMmTsyModuleName );
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() load tsy ERROR: %d"), err);
- #endif
- if ( err != KErrAlreadyExists )
- {
- // may return also KErrAlreadyExists if some other
- // is already loaded the tsy module. And that is
- // not an error.
- User::LeaveIfError( err );
- }
-
- 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));
- User::LeaveIfError(iCustomPhone.Open(iPhone));
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() phone opened"));
- #endif
-
- TBool systemLocked = EFalse;
- TBool phoneLocked = EFalse;
-
- iWait = NULL;
- iWait = CWait::NewL();
-
- 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);
-
- // 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.
- TApaTask self(iCoeEnv->WsSession());
- self.SetWgId(iCoeEnv->RootWin().Identifier());
- self.SendToBackground();
- // flush
- iCoeEnv->WsSession().Flush();
-
- TInt lockValue = 0;
- CRepository* repository = CRepository::NewL(KCRUidSecuritySettings);
- cRresult = repository->Get(KSettingsAutolockStatus, lockValue);
- TBool hiddenReset = HiddenReset();
- #if defined(_DEBUG)
- if(hiddenReset)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Hidden reset"));
- 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)
- {
- repository->Set(KSettingsAutoLockTime, 0);
- if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) )
- {
- repository->Set(KSettingsLockOnPowerUp, 0);
- }
- }
- // In CDMA, the system can stay locked on after the boot-up sequence.
- else if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) || (hiddenReset && (lockValue == 1)))
- {
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Hidden reset when locked"));
- #endif
- phoneLocked = systemLocked = ETrue;
- }
- else if (lockInfo.iSetting == RMobilePhone::ELockSetEnabled && !hiddenReset) {
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Set phone locked"));
- #endif
- phoneLocked = ETrue;
- }
-
-
- delete repository;
- #endif //__WINS__
-
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Enable emergency call support"));
- #endif
-
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() Autolock view"));
- #endif
-
-
-
- // -------------------------------------------------------------------------------------------------------------
- // part of emergency call handling when telephony+devicelock is active
- // this solution is meant only for 3.1 and 3.2
-
- iEcsNote = new (ELeave) CEcsNote();
- 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);
- }
-
- // Emergency call support
- iEcsDetector = CAknEcsDetector::NewL();
- iEcsDetector->SetObserver( this );
- iEmergencySupportReady = ETrue;
- // -------------------------------------------------------------------------------------------------------------
-
-
- // Autolock view
- CAutolockView* lockView = new(ELeave) CAutolockView;
- CleanupStack::PushL(lockView);
- lockView->ConstructL();
- CleanupStack::Pop(); // lockView
- AddViewL(lockView); // transfer ownership to CAknViewAppUi
- SetDefaultViewL(*lockView);
-
- // start autolock timer
- iModel = CAutoLockModel::NewL(this, phoneLocked);
-
- // 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
- // 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 );
-
- if ( tRet != KErrNone )
- {
- #if defined(_DEBUG)
- 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 )
- {
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\
- FAILED to define the SECUI query request state Flag: %d"), tRet);
- #endif
- }
-
-if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ))
-{
-
- // Define the TARM admin flag.
-
- tRet = RProperty::Define( KSCPSIDAutolock, SCP_TARM_ADMIN_FLAG_UID, RProperty::EInt,
- readPolicy, writePolicy );
- if ( tRet != KErrNone )
- {
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\
- FAILED to define the TARM Admin Flag"));
- #endif
- }
-
- // The following sequence is used to validate the configuration on SCP server.
- // This is needed on the first boot (initial or RFS) or if the C-drive has been formatted
- // (3-button format) and Autolock is not active.
-
- RSCPClient scpClient;
- if ( scpClient.Connect() == KErrNone )
- {
- 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 ( 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.
-
- 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__
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\
- DOS validation FAILED in WINS, something wrong!"));
- #endif
- #else // !__WINS__
-
- // 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)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL():\
- Lock setting disabled, calling setlocksetting"));
- #endif
-
- // Wait here until the startup is complete
-
- TInt tarmErr = KErrNone;
- while ( tarmErr == KErrNone )
- {
- TInt sysState=0;
- tarmErr = RProperty::Get(KPSUidStartup, KPSGlobalSystemState, sysState);
-
- if ((sysState == ESwStateNormalRfOn) || (sysState == ESwStateNormalRfOff)
- || (sysState == ESwStateNormalBTSap))
- {
- break;
- }
- User::After(500000);
- }
-
- // 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 )
- {
- #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);
- iPhone.SetLockSetting(iWait->iStatus, lockType, lockChange);
-
- res = iWait->WaitForRequestL();
- #endif // __WINS__
- }
- }
-
- } // if ( confStatus == KErrAccessDenied )
-
- scpClient.Close();
- }
-
-}
-
- // 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 )
- {
- // 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( value<EStartupUiPhaseSystemWelcomeDone )
- {
- TInt err=iPhoneObserver->Start();
- #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
- TApaTask self(iCoeEnv->WsSession());
- self.SetWgId(iCoeEnv->RootWin().Identifier());
- self.SendToBackground();
- // flush
- iCoeEnv->WsSession().Flush();
- }
- else
- {
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() LOCK SYSTEM"));
- #endif
- TInt lockState = 0;
-
- #ifdef RD_REMOTELOCK
- lockState = EManualLocked;
- #else //!RD_REMOTELOCK
- lockState = EAutolockOn;
- #endif//RD_REMOTELOCK
- iModel->LockSystemL(lockState);
- }
-
- iGripStatusObserver = CAutolockGripStatusObserver::NewL( this, iEikonEnv->WsSession() );
- iFpsStatusObserver = CAutolockFpsStatusObserver::NewL( this, iEikonEnv->WsSession() );
- iDeviceLockQueryStatus = EFalse;
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::ConstructL() END"));
- #endif
- }
-// ----------------------------------------------------
-// CAutolockAppUi::~CAutolockAppUi()
-// Destructor
-// Frees reserved resources
-// ----------------------------------------------------
-//
-CAutolockAppUi::~CAutolockAppUi()
- {
- #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();
- }
- delete iModel;
- delete iPhoneObserver;
- delete iIncallBubble;
-#ifdef RD_AUTO_KEYGUARD
- delete iKeyguardObserver;
-#endif
-
- delete iEcsDetector;
- delete iEcsNote; // Ecs change
- delete iWait;
- FeatureManager::UnInitializeLib();
- delete iGripStatusObserver;
- delete iFpsStatusObserver;
- #if defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::~CAutolockAppUi() END"));
- #endif
- }
-// ----------------------------------------------------
-// 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();
- 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)
- {
- 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);
- }
- }
- }
-
- 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 defined(_DEBUG)
- RDebug::Print(_L("(AUTOLOCK)CAutolockAppUi::HandleMessageL()"));
- #endif
-
- MCoeMessageObserver::TMessageResponse messageResponse( EMessageHandled );
-
- 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.
- 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;
- 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
- {
- #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)
- {
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
- #endif
- }
-// ----------------------------------------------------
-// CAutolockAppUi::HandleKeyEventL(
-// const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
-// ----------------------------------------------------
-//
-TKeyResponse CAutolockAppUi::HandleKeyEventL(
- const TKeyEvent& aKeyEvent,TEventCode aType)
- {
-
- if ( aKeyEvent.iCode == EKeyBell || (aType == EEventKeyUp && aKeyEvent.iScanCode == EStdKeyDeviceF) || (aKeyEvent.iCode == EKeyDeviceF) )
- {
- if(iLocked)
- 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);
- }
- }
-
-
-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:
- {
- #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();
- }
- else
- { // 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();
- 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
- 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
- //after the alarm has been disabled/snoozed. Otherwise the alarm CBA is left under keyguard CBA.
- RProperty::Get( KPSUidCoreApplicationUIs, KCoreAppUIsDisableKeyguard, keyguardDisableState );
- if ((callState == EPSCTsyCallStateNone) && (keyguardDisableState != ECoreAppUIsDisableKeyguard))
- {
- 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);
-
- 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 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<EStartupUiPhaseSystemWelcomeDone && callState == EPSCTsyCallStateNone)
- {
- callState = EPSCTsyCallStateNone+1; // so that is unlocks
- iLocked = EFalse;
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) iLocked=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iLocked );
- #endif
- }
- else if(value<EStartupUiPhaseSystemWelcomeDone && callState > 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 )
- {
- #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 __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"));
- 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)
- {
- 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());
-
- 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
- }
- }
-
-// ----------------------------------------------------
-// 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();
- 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();
- }
-// ----------------------------------------------------
-// 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
- }
- }
-
-// -------------------------------------------------------------------------------------------------------------
-// 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<KAknEcsMaxMatchingLength+80> 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();
- #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 )
- {
- #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
- 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 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
- }
- 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.iX<iPosition.iX && iPosition.iX<aCallButtonRect.iBr.iX+aCallButtonRect.iTl.iX &&
- ( (gripStatus==EPSHWRMGripClosed && iPosition.iY>400) || (gripStatus!=EPSHWRMGripClosed && aCallButtonRect.iBr.iY<iPosition.iY && iPosition.iY<aCallButtonRect.iBr.iY+aCallButtonRect.iTl.iY ) )
- )
- {
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) iGotEventDownDuringCall=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iGotEventDownDuringCall );
- #endif
- 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 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.iX<iPosition.iX && iPosition.iX<aCallButtonRect.iBr.iX+aCallButtonRect.iTl.iX &&
- ( (gripStatus==EPSHWRMGripClosed && iPosition.iY>400) || (gripStatus!=EPSHWRMGripClosed && aCallButtonRect.iBr.iY<iPosition.iY && iPosition.iY<aCallButtonRect.iBr.iY+aCallButtonRect.iTl.iY ) )
- )
- {
- // on some devices, simulating End-Key might not end the call. First, try the API
- RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState );
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) callState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, callState );
- #endif
- if ( callState != EPSCTsyCallStateNone && callState != EPSCTsyCallStateUninitialized )
- {
- RTelServer telServer;
- RMobilePhone mPhone;
- User::LeaveIfError(telServer.Connect());
- TInt err;
- err = telServer.LoadPhoneModule(KMmTsyModuleName);
- if (err != KErrNone && err != KErrAlreadyExists)
- User::Leave(err);
- User::LeaveIfError(mPhone.Open(telServer, KMmTsyPhoneName));
- CleanupClosePushL(mPhone);
- RMobileLine mLine;
- TPtrC lineName;
- lineName.Set(KMmTsyVoice1LineName);
- User::LeaveIfError(mLine.Open(mPhone, lineName));
- CleanupClosePushL(mLine);
-
- TInt count(0);
- User::LeaveIfError(mLine.EnumerateCall(count));
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) count=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, count );
- #endif
- for (TInt jj = 0; jj < count; jj++)
- {
- RLine::TCallInfo cinfo;
- User::LeaveIfError(mLine.GetCallInfo(jj, cinfo));
- RMobileCall mCall;
- User::LeaveIfError(mCall.OpenExistingCall(mLine, cinfo.iCallName));
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) calling mCall.HangUp 0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
- #endif
- mCall.HangUp(); // this gives an error, but succeeds
- }
- CleanupStack::PopAndDestroy(&mLine);
- CleanupStack::PopAndDestroy(&mPhone);
- }
- User::After(100000); // give time for the call to end
- #if defined(_DEBUG)
- RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, callState );
- RDebug::Printf( "%s %s (%u) callState=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, callState );
- #endif
- if ( callState != EPSCTsyCallStateNone && callState != EPSCTsyCallStateUninitialized )
- {
- // send End key to Telephony to end the call. This works for GSM and VOIP
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) sending EStdKeyNo=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, EStdKeyNo );
- #endif
- TRawEvent event;
- event.Set(TRawEvent::EKeyDown, EStdKeyNo);
- iEikonEnv->WsSession().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)
- RDebug::Printf( "%s %s (%u) 0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
- #endif
- }
-
-TBool CAutolockAppUi::DeviceLockQueryStatus()
- {
- return iDeviceLockQueryStatus;
- }
-
-TBool CAutolockAppUi::DeviceLockStatus()
- {
- 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)
- RDebug::Printf( "%s %s (%u) 0=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
- #endif
- TRawEvent rawEvent;
- rawEvent.Set( TRawEvent::EKeyDown, KCancelKeyScanCode );
- iCoeEnv->WsSession().SimulateRawEvent( rawEvent );
- rawEvent.Set( TRawEvent::EKeyUp, KCancelKeyScanCode );
- iCoeEnv->WsSession().SimulateRawEvent( rawEvent );
- }
-
-TBool CAutolockAppUi::DeviceFpsLock(TInt iStatus)
- {
- if(iStatus)
- HandleCommandL(ESecUiCmdUnlock);
- else
- iModel->SetLockedL(ETimerLocked);
- return ETrue;
- }
-void CAutolockAppUi::HandleWindowGroupListChange()
- {
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) iLocked=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iLocked );
- #endif
- 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 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;
- 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
- }
- }
-
-}
- #if defined(_DEBUG)
- RDebug::Printf( "%s %s (%u) ret=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, ret );
- #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