servicewidget/servicewidgetdatapublisher/inc/cservicewidgetservicemanager.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:33:36 +0100
branchRCL_3
changeset 29 9a48e301e94b
parent 0 5e5d6b214f4f
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 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:  service manager for a specific service
 *                
 *
*/

 

#ifndef CSERVICEWIDGETSERVICEMANAGER_H
#define CSERVICEWIDGETSERVICEMANAGER_H

#include <vwsdef.h>
#include <e32base.h>
#include "mservicewidgetobservers.h"
#include "servicewidgetcpglobals.h"

class CServiceWidgetContentPublisher;
class CServiceWidgetPresenceHandler;
class CServiceWidgetCchHandler;
class CServiceWidgetMessageHandler;
class CServiceWidgetTimer;
class CCoeEnv;
class CServiceWidgetBrandHandler;
class MVIMPSTSettingsStore;
/**
 *  
 * content harvester plugin	
 * layout Description of servicewidgetplugin and numbering of boxes
 *
 *  -------------------------------------
 *  | 1	A	| User ( Offline )	|offline| Text Row 1
 *  |   V	|	2				|icon 3	|
 *  |   A	|----------------------------
 
 *  |	T	| n new message  			| if nothing display "click to online"
 *  |	AR	| or n online friends	4	| Text Row 2
 *	-------------------------------------
 *  new message has higher priority than friends invite
 *  friends invite has higher priority than n online user
 *  any fried come online show for x second and go to back again
 *
 *  @lib servicewidgetplugin
 *  @since S60 3.2
 */
 
class CServiceWidgetServiceManager 	: public CBase,
									  public MServiceWidgetNewMessageObserver,
									  public MServiceWidgetPresenceObserver,
									  public MServiceWidgetServiceStateObserver,
									  public MServiceWidgetTimerObserver
	{
	public:

		// to change priority , rearange this
		enum TIMWidgetContentPriority
			{
			EIMUknown = -1,  // no priority
			EIMNewMessage = 0, // highest priority
			EIMFriendInvite,
			EIMPresence,	 // lowest priority
			};

		
		/**
		* Two-phased constructor.
		* @param aServiceId, a service id
		* @param aContentPublisher, content publisher reference
	    * @param aSettingStore, reference to settings store
		* @return the instance of same class
		*/
		static CServiceWidgetServiceManager* NewL(TUint32 aServiceId,
											      CServiceWidgetContentPublisher& aContentPublisher,
											      MVIMPSTSettingsStore& aSettingStore );

		
		/**
		* Standard C++ destructor
		*/    
		~CServiceWidgetServiceManager();
		
		
public : // new method


    /**
     * update the content in widgets
     */
    void UpdateContentsL();
    /**
     * Returns the service ID for which Service Manager is created
     */
    TInt ServiceId();

    /**
     * Unregisters widget when service is deleted
     */
    void UnregisterWidgetL();

    /**
     * Registers widget when service is installed
     */
    void RegisterWidgetL();

    /**
     * Returns the service Name for which Service Manager is created
     */
    const TDesC& ServiceName();

    /**
     * Intialize all objects once widget is Activated on Home Screen
     */
    void ActivateWidgetL(TDesC& aInstId);
    /**
     * destroy all objects once widget is deactivated from Home Screen
     */
    void DeactivateWidgetL(TDesC& aInstId);
    /**
     *Executes action based on iExecuteOperation
     */
	
    void ExecuteActionL();
   

public : // MServiceWidgetContentPrioritizer
    /**
     * from MServiceWidgetNewMessageObserver
     * Gets called when data update is available as new messgae recieved.
     * Client can then decide wether to use the old one
     * or the updated one.
     * @param aSenderId, sender name
     * @param aMessageText, new message details
     */
    void HandleNewMessageL(const TDesC& aSenderId ,
            const TDesC& aMessageText ) ;

    /**
     * from MServiceWidgetNewMessageObserver
     * im cache call back 
     * @param aState service state
     */   
    void HandleCountChangedL();

    /**
     * from MServiceWidgetPresenceObserver
     * Handler for own status change notification
     */    
    void HandleOwnStatusChangeL(TWSPresenceStatus aStatus) ;

    /**
     * from MServiceWidgetPresenceObserver
     * Handler for AllBuddiesPresenceInService method of MPresenceCacheReader.
     * @param aErrorCode 
     * @param aPresenceBuddyInfoList presence infos for all buddies requested. 
     * Ownership to callee. Can be null if not found.
     */    
    void HandleChangeL() ;

    /**
     * from MServiceWidgetPresenceObserver
     * Handler for AllBuddiesPresenceInService method of MPresenceCacheReader.
     * @param aErrorCode 
     * @param aPresenceBuddyInfoList presence infos for all buddies requested. 
     * Ownership to callee. Can be null if not found.
     */    
    void HandleBuddyPresenceChangeL( const TDesC& aBuddyId, 
                                     TWSPresenceStatus aStatus,
                                     const TDesC& aStatusText );

    /**
     * from MServiceWidgetPresenceObserver
     * Gets called when data update is available as new messgae recieved.
     * Client can then decide wether to use the old one
     * or the updated one.
     * @param aSenderId, sender name
     * @param aMessageText, new message details
     */
    void HandleAddRequestL(const TDesC& aRequesterId )   ;


    /**
     * from MServiceWidgetServiceStateObserver
     * Handler cch server 
     * @param aState service state
     */   
    void HandleServiceStatusChangedL(TSWSTRegistrationState aState) ;

    /**
     * from MServiceWidgetTimerObserver
     * timer expiration call back
     * @param aState service state
     */   
    void HandleTimerExpiredL();
    
    /**
         * WidgetSuspended
         * @param aIsWidgetSuspended True - widget is suspended on Homescreen
         *                           False - Widget is active
         */   
    void WidgetSuspended( TBool aIsWidgetSuspended );


	private:
		/**
		* Constructor
		* @param aServiceId, a service id
		* @param aContentPublisher, content publisher reference
		* @param aSettingStore, reference to settings store
		*/   
		CServiceWidgetServiceManager(TUint32 aServiceId,
								     CServiceWidgetContentPublisher& aContentPublisher,
								     MVIMPSTSettingsStore& aSettingStore );
		
		/**
		* provides the two phase construction
		*/  
		void ConstructL();
	
		/**
		* load the resource file in memory for use
		*/  
		void LoadResourceFileL();
		

    /**
     * read and set the current data
     */   
    void SetCurrentTextDataL();

    /**
     * create the second row data
     * @return created text : ownership transfer to caller
     */   
    HBufC* GetSecondRowDataLC() ;

		/**
		* create all handlers if service enable 
		* delete all handlers if service loggedoff
		* @param aState service state
		*/   
		void CreateHandlersL();


    /**
     * reset the priority to zero
     */   
    inline void ResetPriority()
        {
        iPriority = 0 ;	
        }
    

	private :
		// owns : service id 
          TInt iServiceId;
		//not owns : Publisher client
		CServiceWidgetContentPublisher& iContentPublisher;
		//not owns : settings store
		MVIMPSTSettingsStore& iSettingStore;
		// owns : cch handler	
		CServiceWidgetCchHandler* iCchHandler;
    	// owns : presence handler
		CServiceWidgetPresenceHandler* iPresenceHandler;
    	// owns : message handler
		CServiceWidgetMessageHandler* iMessageHandler;
    	// owns : current priority  for second row box 
		TInt iPriority;
    	// owns : service state
		TSWSTRegistrationState iServiceState;
    	// owns : timer
		CServiceWidgetTimer* iWidgetTimer;
		// owns : 
        TSWAExecuteOperation iExecuteOperation;
	     //owns : brand icons 
		CServiceWidgetBrandHandler* iBrandHandler;
		// Not owns : A static CEikonEnv
	    CCoeEnv* iEnv;
	    //tabview id for the service
	    TInt iServiceviewId;
       //owns : service Name
       HBufC* iServiceName;
       // ETrue if widget is suspended
       TBool iIsWidgetSuspended;
       
       //Widget InstanceId
       HBufC* iInstId;
			   // Service tab UID from spsettings
        TInt iServiceTabUid;
	    };

#endif  // CSERVICEWIDGETSERVICEMANAGER_H


// End of File