/*
* Copyright (c) 2007 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:  Declares plugin settings interface.
*
*/


#ifndef _ESMAILSESETTINGSPLUGIN_H_
#define _ESMAILSESETTINGSPLUGIN_H_

// SYSTEM INCLUDES
#include <aknview.h>

/**
 * 	In addition to the pure virtuals below, the plug-in implementers must implement
 *	following methods of CAknView
 *		
 *	 -DoActivate()
 *	  * The EMail UI will pass the account id object (provided by the FW) and the subview id
 *	    packaged to a package buffer in the custom message. The implementations should save the
 *	    aPrevViewId to be able to reactivate the EMail UI settings view when the user wants to
 *	    return from the subview. The custom message id contains enumeration 
 * 		TESEmailSettingsPluginCustomMessageId
 *   -DoDeactivate()
 *	 -Id()
 *	  * The plug-ins should return their implementation UID as the view's id to ensure
 *	  	unique ids. The EMail UI will also use this id to map the accounts to correct settings
 *	  	plug-ins with the help of FWs Settings Info API (which returns the settings UI plug-in
 *	  	implementation UID for an account).
 * 
 */

// INTERFACE DECLARATION
class CESMailSettingsPlugin : public CAknView
{
	public:
		/**
		 * Creates instance of a CESMailSettingsPlugin
		 * 
		 * @param aImplementationUid protocol plugin Id reveiced from Freestyle Framework
		 * @return CESMailSettingsPlugin pointer
		 */
		inline static CESMailSettingsPlugin* NewL( const TUid& aImplementationUid );
		
		/**
		 * Destructor
		 */
		inline virtual ~CESMailSettingsPlugin();
		
	public:
		/**
		 * Returns the number of subviews visible under the mail settings. The subviews will 
		 * be presented in the settings UI in the same order as their ids (0, 1, 2, 3, ...).
		 */
		virtual TInt MailSettingsSubviewCount() = 0;
		
		/** 
		 * Returns the caption for a mail settings subview. 		 
		 * 
		 * @param aAccountId Freestyle email account information
		 * @param aSubviewIndex index of a settings subview
		 * @param aLongCaption if ETrue long version of caption is returned
		 * @return TPtrC to caption

		 */
		virtual TPtrC MailSettingsSubviewCaption( 
				TFSMailMsgId aAccountId, 
				TInt aSubviewIndex, 
				TBool aLongCaption ) = 0;
		
		/**
		 * Returns ETrue if the protocol can handle syncing of PIM data (calendar, contacts, etc...), EFalse if not.
		 * Returning ETrue will make the protocol visible in the Personal Information Management / PIM Source radio selection
		 */
		virtual TBool CanHandlePIMSync() = 0;
		
		/**
		 * Returns the localized protocol name that is shown in the 
		 * Personal Information Management / PIM Source radio selection
		 */
		virtual TPtrC LocalizedProtocolName() = 0;
		
		/**
		 * Returns ETrue if the protocol is selected for PIM sync, EFalse if not. The information is used
		 * to show the correct protocol name in the settings UI
		 */
		virtual TBool IsSelectedForPIMSync() = 0;
		
		/**
		 * Selects or disables the protocol for PIM sync.
		 */
		virtual void SelectForPIMSync( TBool aSelectForSync ) = 0;

		/**
		 * Returns the number of subviews visible under the PIM settings. The subviews will 
		 * be presented in the settings UI in the same order as their ids (0, 1, 2, 3, ...).
		 */
		virtual TInt PIMSettingsSubviewCount() = 0;
		
		/**
		 * Returns the caption for a PIM settings subview. 
		 * 
		 * @param aAccountId Freestyle email account information
		 * @param aSubviewIndex index of a settings subview
		 * @param aLongCaption if ETrue long version of caption is returned
		 * @return TPtrC to caption
		 */
		virtual TPtrC PIMSettingsSubviewCaption( 
				TFSMailMsgId aAccountId, 
				TInt aSubviewIndex, 
				TBool aLongCaption ) = 0;
		
		// DATA TYPES
	public:
		/**
		 * Container for the data needed to activate 
		 * a subview in a setings UI plug-in.
		 * This class gets passed in the custom message 
		 * part of the view activation message. 
		 */
		class TSubViewActivationData
			{
			public:
                            //<cmail> Initialize variables
			    TSubViewActivationData():
			    iPimAccount(EFalse), iLaunchedOutsideFSEmail(EFalse), iLaunchFolderSettings(EFalse)
			    {
			    //intentionally left empty
			    };
                            //</cmail>
				TFSMailMsgId iAccount;
				TInt iSubviewId;
				TBool iPimAccount;
				TBool iLaunchedOutsideFSEmail;
				TBool iLaunchFolderSettings; //<cmail>
			};
			
		enum TESEmailSettingsPluginCustomMessageId
			{
			EActivateMailSettingsSubview,
			EActivatePIMSettingsSubview
			};
	private:
		/**
		 * Unique instance identifier key (needed for ECom)
		 */
		TUid iDtor_ID_Key;
};

#include "esmailsettingsplugin.inl"

#endif /*_ESMAILSESETTINGSPLUGIN_H_*/
