--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdategloballockhandler.cpp Tue Jan 26 12:06:03 2010 +0200
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2008 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: This module contains the implementation of CIAUpdateGlobalLockHandler class
+* member functions.
+*
+*/
+
+
+//INCLUDES
+#include <e32property.h>
+#include <apgwgnam.h>
+
+#include "iaupdategloballockhandler.h"
+#include "iaupdateuids.h"
+#include "iaupdatedebug.h"
+
+//CONSTANTS
+const TUid KPSUid = { KIAUpdateUiUid };
+const TUint32 KIAUpdateGlobalLock = 0x00000001;
+const TUid KSid = { KIAUpdateUiUid };
+
+//MACROS
+_LIT_SECURITY_POLICY_PASS( KReadPolicy );
+_LIT_SECURITY_POLICY_S0( KWritePolicy, (TSecureId ) KSid );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIAUpdateGlobalLockHandler* CIAUpdateGlobalLockHandler::NewL()
+ {
+ CIAUpdateGlobalLockHandler* self = CIAUpdateGlobalLockHandler::NewLC();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIAUpdateGlobalLockHandler* CIAUpdateGlobalLockHandler::NewLC()
+ {
+ CIAUpdateGlobalLockHandler* self = new( ELeave ) CIAUpdateGlobalLockHandler();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateGlobalLockHandler::ConstructL()
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::ConstructL() begin");
+ TInt err = RProperty::Define( KPSUid,
+ KIAUpdateGlobalLock,
+ RProperty::EInt,
+ KReadPolicy,
+ KWritePolicy );
+ if ( err != KErrNone && err != KErrAlreadyExists )
+ {
+ User::Leave( err );
+ }
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::ConstructL() end");
+ }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::CIAUpdateGlobalLockHandler
+// constructor
+// ---------------------------------------------------------------------------
+//
+CIAUpdateGlobalLockHandler::CIAUpdateGlobalLockHandler()
+ {
+ iEikEnv = CEikonEnv::Static();
+ }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::~CIAUpdateGlobalLockHandler
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIAUpdateGlobalLockHandler::~CIAUpdateGlobalLockHandler()
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::~CIAUpdateGlobalLockHandler() begin");
+ if ( iSetAsLocked )
+ {
+ TRAP_IGNORE( SetToInUseForAnotherInstancesL( EFalse ) );
+ }
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::~CIAUpdateGlobalLockHandler() end");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::InUseByAnotherInstanceL
+//
+// ---------------------------------------------------------------------------
+//
+TBool CIAUpdateGlobalLockHandler::InUseByAnotherInstanceL()
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::InUseByAnotherInstanceL() begin");
+ TBool inUse = EFalse;
+ TInt wgId = 0; //zero value means that global lock is off
+ User::LeaveIfError( RProperty::Get( KPSUid,
+ KIAUpdateGlobalLock,
+ wgId ) );
+ if ( wgId > 0 && wgId != iEikEnv->RootWin().Identifier() )
+ {
+ // another iaupdate instance has set a lock
+ // to be checked that instance is still running
+ TInt prevWgId = 0;
+ while ( ( prevWgId != KErrNotFound ) && ( !inUse ) )
+ {
+ CApaWindowGroupName::FindByAppUid( KSid, iEikEnv->WsSession(), prevWgId );
+ if ( prevWgId == wgId )
+ {
+ inUse = ETrue;
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::InUseByAnotherInstanceL() IAUPDATE locked by another instance");
+ }
+ }
+ }
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::InUseByAnotherInstanceL() end");
+ return inUse;
+ }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL
+//
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL( TBool aInUse )
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL() begin");
+ TInt wgId = 0; //zero value means that global lock is off
+ if ( aInUse )
+ {
+ wgId = iEikEnv->RootWin().Identifier();
+ }
+
+ User::LeaveIfError( RProperty::Set( KPSUid,
+ KIAUpdateGlobalLock,
+ wgId ) );
+ if ( wgId == 0 )
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL() Set as unlocked");
+ iSetAsLocked = EFalse;
+ }
+ else
+ {
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL() Set as locked");
+ iSetAsLocked = ETrue;
+ }
+ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateGlobalLockHandler::SetToInUseForAnotherInstancesL() end");
+ }
+
+// End of File