diff -r f5050f1da672 -r 04becd199f91 javauis/remconobserver_akn/src/javaremconmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/remconobserver_akn/src/javaremconmanager.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,188 @@ +/* +* Copyright (c) 2008-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: Java RemCon Observer +* +*/ + + +#include + +#include "javaremconmanager.h" +#include "javaremconobservable.h" +#include "panics.h" + +// ======== STATIC VARIABLES ======== + +/** +* Singleton +*/ + +NONSHARABLE_CLASS(RemConnGlobals) +{ +public: + RemConnGlobals() : mObservable(0) {} + +public: + CJavaRemConObservable* mObservable; +}; + + +#if defined(__WINSCW__) + +#include +RemConnGlobals* getRemConnGlobals() +{ + // Access the PLS of this process + RemConnGlobals* globals = + Pls(TUid::Uid(0x200211E1)); + return globals; +} + +#else + +static RemConnGlobals* sGlobals = 0; + +RemConnGlobals* getRemConnGlobals() +{ + if (sGlobals == 0) + { + sGlobals = new RemConnGlobals(); + } + return sGlobals; +} +#endif + + + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CJavaRemConManager::ConstructL() +// --------------------------------------------------------------------------- +// +void CJavaRemConManager::ConstructL() +{ + DEBUG("+ CJavaRemConManager::ConstructL()"); + RemConnGlobals* globals = getRemConnGlobals(); + if (globals->mObservable == 0) + { + globals->mObservable = CJavaRemConObservable::NewL(); + RThread thread; + iCreatorThreadId = thread.Id(); + } + DEBUG("- CJavaRemConManager::ConstructL()"); +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager* CJavaRemConManager::NewL() +// --------------------------------------------------------------------------- +// +EXPORT_C CJavaRemConManager* CJavaRemConManager::NewL() +{ + CJavaRemConManager* self = CJavaRemConManager::NewLC(); + CleanupStack::Pop(self); + return self; +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager* CJavaRemConManager::NewLC() +// --------------------------------------------------------------------------- +// +EXPORT_C CJavaRemConManager* CJavaRemConManager::NewLC() +{ + CJavaRemConManager* self = new(ELeave) CJavaRemConManager; + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager::CJavaRemConManager() +// --------------------------------------------------------------------------- +// +CJavaRemConManager::CJavaRemConManager() : iSet(EFalse) +{ + DEBUG("+ CJavaRemConManager::CJavaRemConManager()"); + + DEBUG("- CJavaRemConManager::CJavaRemConManager()"); +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager::~CJavaRemConManager() +// --------------------------------------------------------------------------- +// +CJavaRemConManager::~CJavaRemConManager() +{ + DEBUG("+ CJavaRemConManager::~CJavaRemConManager()"); + __ASSERT_DEBUG(!iSet, User::Panic(KJavaRemConPanicCategory, + EJavaRemConPanicObserverNotRemoved) + ); + + RThread thread; + if (thread.Id() == iCreatorThreadId) + { + delete getRemConnGlobals()->mObservable; + getRemConnGlobals()->mObservable = NULL; + } + DEBUG("- CJavaRemConManager::~CJavaRemConManager()"); +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager::SetObserver +// --------------------------------------------------------------------------- +// +EXPORT_C void CJavaRemConManager::SetObserverL( + CJavaRemConObserver &aObserver) +{ + DEBUG("+ CJavaRemConManager::SetObserverL()"); + if (iSet) + { + User::Leave(KErrInUse); + } + getRemConnGlobals()->mObservable->AddObserverL(aObserver); + iSet = ETrue; + DEBUG("- CJavaRemConManager::SetObserverL()"); +} + + +// --------------------------------------------------------------------------- +// CJavaRemConManager::RemoveObserver +// --------------------------------------------------------------------------- +// +EXPORT_C void CJavaRemConManager::RemoveObserver( + CJavaRemConObserver &aObserver) +{ + DEBUG("+ CJavaRemConManager::RemoveObserverL()"); + __ASSERT_DEBUG(iSet, User::Panic(KJavaRemConPanicCategory, + EJavaRemConPanicObserverNotSet) + ); + + CJavaRemConObservable* observable = getRemConnGlobals()->mObservable; + if (observable) + { + observable->RemoveObserver(aObserver); + } + + iSet = EFalse; + DEBUG("- CJavaRemConManager::RemoveObserver()"); +} + + +// End Of File