// Copyright (c) 2005-2009 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:
// @file
// 
//

#ifndef __APLAUNCHCHECKER_H__
#define __APLAUNCHCHECKER_H__

#ifndef __E32BASE_H__
#include <e32base.h>
#endif

#ifndef __E32CMN_H__
#include <e32cmn.h>
#endif

#ifndef __APGTASK_H__
#include <apgtask.h>
#endif

#ifndef __ECOMRESOLVERPARAMS_H__
#include <ecom/ecomresolverparams.h>
#endif

#ifndef __ECOM_H__
#include <ecom/ecom.h>
#endif

class CAppLaunchChecker : public CBase
/** Launch checker.

This is an interface for rule-based launching of an application.

An instance of the CAppLaunchChecker class is used to notify an application server whether or not
an application should be launched. Inside the plug-in could be implemented some addition actions, 
for instance closing some low priority applications.

@publishedPartner
@released
@see TApaTaskList
@see TUid */
	{
public:
	/** Defines codes for launching an application */
	enum TAppLaunchCode
		{
		/** Plug-in doesn't care whether an application should be launched or not */
		EAppLaunchIndifferent,
		/** Rule-based framework shouldn't launch an application */
		EAppLaunchDecline,
		/** Rule-based framework can launch an application */
		EAppLaunchAccept,
		};
// Wraps ECom object instantiation
	static CAppLaunchChecker* NewL(const TUid aUid);
	IMPORT_C ~CAppLaunchChecker();
	/** The function to be implemented in inherited classes. */	
	TAppLaunchCode virtual OkayToLaunchL(const TUid aAppToLaunch, TApaTaskList& aTaskList) = 0;
private:	
	IMPORT_C virtual void Reserved_1();
	IMPORT_C virtual void Reserved_2();
	IMPORT_C virtual void Reserved_3();
private:
	/** ECOM identifier */
    TUid iDtor_ID_Key;

	TInt iReserved1;    
	TInt iReserved2;    
	TInt iReserved3;
	};
	
#endif

