coreapplicationuis/advancedtspcontroller/inc/remcontspcontroller.h
changeset 0 2e3d3ce01487
child 46 eea20ed08f4b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/advancedtspcontroller/inc/remcontspcontroller.h	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2002-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:  Implements Target Selector Plugin (TSP) used by Symbian's 
+*				 Remote Control Framework. TSP controls sending of operations
+*			     between Series 60 components and remote targets.
+*
+*/
+
+
+#ifndef CREMCONTSPCONTROLLER_H
+#define CREMCONTSPCONTROLLER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <remcon/remcontargetselectorplugin.h>
+#include <remcon/remcontargetselectorplugininterface.h>
+#include <e32property.h>
+#include <cfclient.h>
+#include <cflistener.h>
+#include <AudioClientsListPSData.h>
+#include "remconidlelistener.h"
+#include "remconeventtable.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CRemConLogger;
+class TClientInfo;
+
+
+// CLASS DECLARATION
+
+/**
+*  Controls delivering of commands between Series 60 components and remote 
+*  targets.
+*
+*  @lib RemConTspController.dll
+*  @since Series 60 3.0
+*/
+class CRemConTspController : public CRemConTargetSelectorPlugin,
+                 public MRemConTargetSelectorPluginInterfaceV2,
+                 public MRemConTargetSelectorPluginInterfaceV3,
+			     public MCFListener
+	{
+	public:		// Constructors and destructor
+		
+		/**
+        * Two-phased constructor.
+        */
+		static CRemConTspController* NewL( 
+			MRemConTargetSelectorPluginObserver& aObserver );
+		
+		/**
+        * Destructor.
+        */
+		virtual ~CRemConTspController();
+	
+	public: 	// Functions from base classes
+	
+	    void CreateAfterIdleL();
+	
+	protected:  // New functions
+	
+	protected:  // Functions from base classes
+	
+	private:
+		
+		/**
+        * C++ default constructor.
+        */
+        CRemConTspController( MRemConTargetSelectorPluginObserver& aObserver );
+                
+	private: // from CRemConTargetSelectorPlugin
+		
+		/**
+        * Called by RemCon server to get a pointer to an object which 
+        * implements the TSP interface with UID aUid. This is a mechanism 
+        * for allowing future change to the TSP API without breaking BC 
+        * in existing (non-updated) TSPs.
+        * 
+        * @param aUid	Queried TSP interface version.
+        * @return TAny	A pointer to implementation of this TSP version, if 
+        *				quaried TSP interface version is the one implemented 
+        *				by this TSP. Otherwise a NULL will be returned.	
+        */
+		TAny* GetInterface( TUid aUid );
+
+	private: // from MRemConTargetSelectorPluginInterface
+	
+		/**
+		* Called by RemCon server to get the TSP to address an outgoing 
+		* command (from a connectionless controller client) to zero or 
+		* more remote targets.
+		* @param aInterfaceUid 		The UID of the client interface.
+		* @param aOperationId 		The operation ID of the command.
+		* @param aSender The 		TClientInfo of the sending session.
+		* @param aConnections 		An empty collection of connections. 
+		*							TRemConAddresses must be made on the heap.
+		*							RemCon takes ownership of any items in the 
+		*							collection. 
+		* @params aBearerSecurity 	Contains all the bearer security policies.
+		* @return TAny				void 
+		*/
+		void AddressOutgoingCommand(
+							TUid aInterfaceUid,
+							TUint aOperationId, 
+							const TClientInfo& aSender,
+							TSglQue<TRemConAddress>& aConnections,
+							TSglQue<TBearerSecurity>& aBearerSecurity );
+		
+		/**
+		* Called by RemCon server to find out from the TSP whether the given 
+		* connection-oriented controller client is permitted to send the given 
+		* command to remote target.
+		* @param aInterfaceUid 		The UID of the client interface.
+		* @param aOperationId 		The operation ID of the command.
+		* @param aSender 			The TClientInfo of the sending session.
+		* @param aConnection 		The remote the command will be sent over if
+		*							permission is granted.
+		* @return void				 
+		*/	
+		void PermitOutgoingCommand(
+							TUid aInterfaceUid,
+							TUint aOperationId, 
+							const TClientInfo& aSender,
+							const TRemConAddress& aConnection );
+		
+		/** 
+		* Called by RemCon server to cancel the current AddressOutgoingCommand 
+		* or PermitOutgoingCommand command.
+		* @return void 
+		*/					
+		void CancelOutgoingCommand();
+	
+		/**
+		* Called by RemCon server to get the TSP to address an incoming command 
+		* (from a remote target to zero or more Series 60 components). There's 
+		* no 'cancel' method for AddressIncomingCommand.
+		* @since Series 60 3.0
+		* @param aInterfaceUid 	The UID of the client interface.
+		* @param aOperationId 	The operation ID of the command.
+		* @param aClients 		A collection of existing target clients. TSP's 
+		*						responsibility is to modify this parameter, if 
+		*						it wants that command will not be sent to all 
+		*						proposed clients. Thus, when this method has 
+		*						been finished, aClients will include those 
+		*						target clients to whom command should be sent.
+		* @return void  
+		*/
+		void AddressIncomingCommand(
+							TUid aInterfaceUid,
+							TUint aOperationId, 
+							TSglQue<TClientInfo>& aClients );
+							
+        /**
+        * Called by RemCon to get the TSP to decide which client should be
+        * allowed to respond to a command.
+        * @param aInterfaceUid The UID of the client interface.
+        * @param aOperationId The operation ID of the command.
+        * @param aClient The client which is trying to send a response
+        * @param aClients A list of clients which are still expected to respond,
+        *         including the one specified in aClient
+        */
+        void PermitOutgoingResponse(
+                TUid aInterfaceUid,
+                TUint aOperationId,
+                const TClientInfo& aClient,
+                TClientInfoConstIter& aClients); 
+
+        /** 
+        * Called by RemCon to cancel the current PermitOutgoingResponse request.
+        */
+        void CancelOutgoingResponse(); 
+            
+        /**
+        * Called by RemCon to get the TSP to address an incoming notify (from a 
+        * remote to zero or more target clients). 
+        * @param aInterfaceUid The UID of the client interface.
+        * @param aOperationId The operation ID of the command.
+        * @param aClients A collection of existing target clients. The implementor 
+        *         may wish to start a target client and call IncomingNotifyAddressed
+        *         with a new TClientInfo. The new TClientInfo item must be made on the stack. 
+        *         Note when creating the new TClientInfo, only the process ID needs to 
+        *         be correctly populated.
+        */
+        void AddressIncomingNotify(
+                TUid aInterfaceUid,
+                TUint aOperationId,
+                TSglQue<TClientInfo>& aClients); 
+
+        // From MRemConTargetSelectorPluginInterfaceV3
+
+        /**
+        Called by RemCon to get the TSP to address an outgoing notify command (from a 
+        connectionless controller client) to zero or one remote. 
+        @param aInterfaceUid The UID of the client interface.
+        @param aOperationId The operation ID of the command.
+        @param aSender The TClientInfo of the sending session.
+        @param aBearerSecurity Contains all the bearer security policies.
+        */
+        void AddressOutgoingNotify(
+                TUid aInterfaceUid,
+                TUint aOperationId, 
+                const TClientInfo& aSender,
+                TSglQue<TBearerSecurity>& aBearerSecurity);
+        
+        /** 
+        Called by RemCon to cancel the current AddressOutgoingNotify or 
+        PermitOutgoingNotifyCommand command.
+        */
+        void CancelOutgoingNotifyCommand();
+        
+        /**
+        Called by RemCon to find out from the TSP whether the given 
+        connection-oriented controller client is permitted to send the given notify
+        command to the given remote at this time. 
+        @param aInterfaceUid The UID of the client interface.
+        @param aOperationId The operation ID of the command.
+        @param aSender The TClientInfo of the sending session.
+        @param aConnection The remote the command will be sent over if permission 
+        is granted.
+        */
+        void PermitOutgoingNotifyCommand(
+                TUid aInterfaceUid,
+                TUint aOperationId, 
+                const TClientInfo& aSender,
+                const TRemConAddress& aConnection);
+        
+	    // From MCFListener
+	    
+	    /**
+        * Indicates a change in context for subscribed clients.
+        * If client has subscribed to partial context class path,
+        * only the changed context will be indicated.
+        * 
+        * @param aIndication: Context indication.
+        * @return None
+        */
+        void ContextIndicationL(
+            const CCFContextIndication& aChangedContext );
+            
+        /**
+        * Indicates that specified action is needed to be executed.
+        * When action indication is received certain rule has been triggered
+        * and action is needed to be performed.
+        *
+        * @param aActionToExecute Action indication.
+        * @return None
+        */
+        void ActionIndicationL(
+            const CCFActionIndication& aActionToExecute );
+        
+        /**
+        * Returns an extension interface.
+        * The extension interface is mapped with the extension UID.
+        *
+        * If the client does not support the requested interface,
+        * client must return NULL. Otherwise client needs to return
+        * the correct interface combined with the UID.
+        *
+        * @since S60 5.0
+        * @param aExtensionUid: The identifier of the extension.
+        * @return Pointer to the extension.
+        */    
+        TAny* Extension( const TUid& aExtensionUid ) const;
+            
+        /**
+        * Indicates that error has occured.
+        * 
+        * @param aError Error code.
+        * @return None
+        */
+        void HandleContextFrameworkError( TCFError aError,
+            const TDesC& aSource,
+            const TDesC& aType );
+            
+        /**
+        * Gets the foreground application.
+        * 
+        * @param aError Error code.
+        * @return None
+        */
+        void GetActiveWindowClientL();
+        
+        /**
+        * Checks if process is connected to Remcon
+        */
+        TClientInfo* FindRemconConnection( TProcessId aProcessId, TSglQue<TClientInfo>& aClients ) const;
+
+        /**
+        * Checks if client with given secure id is connected to Remcon
+        */
+        TClientInfo* FindRemconConnection( TSecureId aSecureId, TSglQue<TClientInfo>& aClients ) const;
+
+        /**
+        * Sorts the audio clients to a correct order. The last played is first.
+        */
+        void GetActivePidsL( RArray<TProcessId>& aArray );
+        
+#if ( defined COMPONENT_TRACE_FLAG && _DEBUG )
+        void TraceAudioPolicyClients( const TUint32 aState, TAudioPolicyProcessIdList aIdList );
+#endif
+	
+	public:     // Data
+	
+	protected:  // Data
+	
+	    void ConstructL();
+	
+    private:
+	
+	    void GetCorrectClientL(
+            TUid aInterfaceUid,
+        	TUint aKeyEvent,
+        	TSglQue<TClientInfo>& aClients );
+        
+        void SetKeyEventTableL( const CCFActionIndication& aActionToExecute );        
+
+        void ActivateApplicationL( const TUid aUid ) const;
+
+        TBool IsStateNormal() const;
+
+        TInt FindRoutingTablePos(
+                const RPointerArray<CRemConEventTable>& aTableArray, TInt aTableNum ) const;
+
+        CRemConEventTable* FindRoutingTable(
+                const RPointerArray<CRemConEventTable>& aTableArray, TInt aTableNum ) const;
+        
+        TBool FindActiveAudioFromAudioPolicy( TSglQue<TClientInfo>& aClients );
+        
+        TBool FindActiveAudioFromCustomIfL( TSglQue<TClientInfo>& aClients );
+        
+        /**
+        * Returns whether system lock is active.
+        */
+        TBool DeviceLocked() const;
+
+	private:    // Data
+	    
+	    // owned
+		CRemConIdleListener* iIdle;
+		
+		// Interface to P&S key that returns call state
+        RProperty iProperty;
+        
+        CCFClient* iCFClient;
+        
+        RPointerArray<CRemConEventTable> iArrayOfTables;
+        
+        TUid iUidForeground;
+        
+        TProcessId iProcessIdForeground;
+        
+        TProcessId iProcessIdActive;
+
+        RPointerArray<CRemConEventTable> iArrayOfStoredTables;
+	
+	public:     // Friend classes
+	
+	protected:  // Friend classes
+	
+	private:    // Friend classes
+
+	};
+
+#endif		// CREMCONTSPCONTROLLER_H