// COEFEP.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#include <e32std.h>
#include <e32base.h>
#include <coemain.h>
#include <coepriv.h>

// CCoeFepLoader

CCoeFepLoader* CCoeFepLoader::NewL(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner)
	{
	return new(ELeave) CCoeFepLoader(aCoeEnv, aOwner);
	}

CCoeFepLoader::~CCoeFepLoader()
	{
	Cancel();
	iOwner=NULL;
	}

CCoeFepLoader::CCoeFepLoader(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner)
	:CActive(EActivePriorityFepLoader),
	 iCoeEnv(aCoeEnv),
	 iOwner(aOwner)
	{
	__DECLARE_NAME(_S("CCoeFepLoader"));
	CActiveScheduler::Add(this);
	TRequestStatus* status=&iStatus;
	User::RequestComplete(status, KErrNone);
	SetActive();
	}

void CCoeFepLoader::DoCancel()
	{
	}

void CCoeFepLoader::RunL()
	{
	CleanupStack::PushL(this);
	iCoeEnv.LoadFepL();
	CleanupStack::PopAndDestroy(); // this
	}

// CCoeFepTracker

CCoeFepTracker* CCoeFepTracker::NewL(CBrdBroadcastServerSession& aBroadcastServerSession, CCoeEnv& aCoeEnv)
	{
	return new(ELeave) CCoeFepTracker(aBroadcastServerSession, aCoeEnv);
	}

void CCoeFepTracker::FepHasChanged()
	{
	BroadcastServerSession().SendBroadcast(TUid::Uid(EBroadcastUid), TUid::Uid(EBrdGlobalDomainUid));
	}

CCoeFepTracker::CCoeFepTracker(CBrdBroadcastServerSession& aBroadcastServerSession, CCoeEnv& aCoeEnv)
	:CBrdBroadcastServerSessionActiveWrapper(EPriorityLow, aBroadcastServerSession, TUid::Uid(EBroadcastUid), KNullUid),
	 iCoeEnv(aCoeEnv)
	{
	__DECLARE_NAME(_S("CCoeFepTracker"));
	CActiveScheduler::Add(this);
	ReceiveBroadcast();
	}

void CCoeFepTracker::HandleBroadcastReceiptL()
	{
	ReceiveBroadcast();
	iCoeEnv.LoadFepL();
	}

