/*
* Copyright (c) 2005-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:  CSysApPubSubObserver handles SysAp PubSub API
*              : related functionality except for BT.
*
*/


#ifndef SYSAPPUBSUBOBSERVER_H
#define SYSAPPUBSUBOBSERVER_H

// INCLUDES
#include <e32base.h>
#include "MSysApPropertyResponder.h"

// FORWARD DECLARATIONS

class CSysApAppUi;
class CSysApSubscriber;
class CSysApRemConObserver;

// CLASS DECLARATION
/**
*  CSysApPubSubObserver
*  
*  @lib   sysap
*  @since 2.X 
*/

class CSysApPubSubObserver : 
              public CBase, 
              public MSysApPropertyResponder
{
public:

    /**
    * Two-phased constructor.
    */         
    static CSysApPubSubObserver* NewL( CSysApAppUi& aSysApAppUi );

    /**
    * Destructor.
    */
    ~CSysApPubSubObserver();

private:

    /**
    * Handle keys under category KUidSystemCategory
    */         
    void HandleSystemCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidStartup
    */         
    void HandleStartupCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidCoreApplicationUIs
    */         
    void HandleCoreAppUIsCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidHWRMPowerState
    */         
    void HandleHwrmPowerStateCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidWlan
    */
    void HandleWlanCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidNetworkInfo
    */
    void HandleNetworkInfoCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidCtsyCallInformation.
    */
    void HandleTelephonyCallInformationCategoryL( const TUint aKey, const TInt aValue );
    
    /**
    * Handle keys under category KPSUidHWRM
    */
    void HandleHwrmCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPSUidHWRMFmTx
    */
    void HandleHwrmFmTxCategoryL( const TUint aKey, const TInt aValue );
    
    /**
    * Handle keys under category KPSUidDataSynchronizationInternalKeys
    * 
    * @since S60 3.2
    * @param aKey   key identifier whose change triggered notification
    * @param aValue key value
    * @return None.
    */
    void HandleDataSyncCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KPosIndicatorCategory
    * 
    * @since S60 3.2
    * @param aKey   key identifier whose change triggered notification
    * @param aValue key value
    */
    void HandlePosIndicatorCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Handle keys under category KUidPSSMSStackCategory
    * 
    * @since S60 3.2
    * @param aKey   key identifier whose change triggered notification
    * @param aValue key value
    */
    void HandleSmsStackCategoryL( const TUint aKey, const TInt aValue );

    /**
    * Constructors.
    */         
    CSysApPubSubObserver( CSysApAppUi& aSysApAppUi );
    void ConstructL();

protected: // From MSysApPropertyResponder

    void HandlePropertyChangedL( const TUid& aCategory, const TUint aKey );
 
private:
    
    CSysApAppUi&        iSysApAppUi;

    // Category KUidSystemCategory
    CSysApSubscriber*   iBatteryBarsSubscriber;              // KPSUidBatteryBars
    CSysApSubscriber*   iBatteryLowIndicationSubscriber;     // KPSUidBatteryLowIndication
    CSysApSubscriber*   iBatteryCStatusSubscriber;           // KPSUidBatteryCStatus
    CSysApSubscriber*   iChargerCStatusSubscriber;           // KPSUidChargerCStatus
    CSysApSubscriber*   iInboxStatusSubscriber;              // KUidInboxStatusValue
    CSysApSubscriber*   iOutboxStatusSubscriber;             // KUidOutboxStatus
    CSysApSubscriber*   iIrdaStatusSubscriber;               // KPSUidIrdaStatus
    CSysApSubscriber*   iGprsStatusSubscriber;               // KPSUidGprsStatus
    CSysApSubscriber*   iWcdmaStatusSubscriber;              // KPSUidWcdmaStatus
    CSysApSubscriber*   iLocationGlobalPrivacySubscriber;    // KPSUidLocationGlobalPrivacy
    CSysApSubscriber*   iRestoreBackupSubscriber;            // KUidBackupRestoreKey

    // Category KPSUidStartup
    CSysApSubscriber*   iSimChangedSubscriber;               // KPSSimChanged

    // Category KHWRMFmTxStatus
    CSysApSubscriber*   iFmTxStatusSubscriber;   // KPSUidHWRMFmTx
    
    TInt iPreviousFmTxPSValue;
    
    CSysApRemConObserver* iFmTxRemConObserver;
    
    // Category KPSUidCoreApplicationUIs

    // Light Control API
    CSysApSubscriber*   iAlarmLightSubscriber;               // KLightsAlarmLightActive (KSysApAlarmLightActive)
    CSysApSubscriber*   iVTLightsSubscriber;                 // KLightsVTForcedLightsOn (KSysApForcedLightsOn)
    CSysApSubscriber*   iSSLightsSubscriber;                 // KLightsSSForcedLightsOn (KSysApForcedSSLightsOn)
    CSysApSubscriber*   iATCLightsSubscriber;                // KLightsATCForcedLightsOn
    CSysApSubscriber*   iLightsControlSubscriber;            // KLightsControl (KSysApLightsControl)

    // System Application Notification API
    CSysApSubscriber*   iDisableKeyguardSubscriber;          // KCoreAppUIsDisableKeyguard (KSysApKeyGuardInactive)
    CSysApSubscriber*   iSoftRejectSubscriber;               // KCoreAppUIsSoftReject (KSysApSoftReject)
    CSysApSubscriber*   iUipIndSubscriber;                   // KCoreAppUIsUipInd (KSysApUipInd)
    CSysApSubscriber*   iMessageToneQuitSubscriber;          // KCoreAppUIsMessageToneQuit (KSysApMessageToneQuit)
    CSysApSubscriber*   iNspsRawKeyEventSubscriber;          // KCoreAppUIsNspsRawKeyEvent (KSysApNspsRawKeyEvent)
    CSysApSubscriber*   iLightsRawKeyEventSubscriber;        // KCoreAppUIsLightsRawKeyEvent (KSysApLightsControl)
    CSysApSubscriber*   iMmcRemovedWithoutEjectSubscriber;   // KCoreAppUIsMmcRemovedWithoutEject (KSysApMmcRemovedWithoutEject)
    CSysApSubscriber*   iNewEmailStatusSubscriber;           // KCoreAppUIsNewEmailStatus
    CSysApSubscriber*   iPoCIndicatorSubscriber;             // KCoreAppUIsPoCIndicator
    CSysApSubscriber*   iPoCMissedIndicatorSubscriber;       // KCoreAppUIsPoCMissedIndicator
    CSysApSubscriber*   iTarmStatusSubscriber;               // KCoreAppUIsTarmIndicator
    CSysApSubscriber*   iMtvRecStatusSubscriber;             // KCoreAppUIsMtvRecStatus
    CSysApSubscriber*   iMtvDvbhStatusSubscriber;            // KCoreAppUIsMtvDvbhStatus
    /**
    * Subscriber for KCoreAppUIsVideoSharingIndicator.
    * Own.
    */
    CSysApSubscriber* iVideoSharingIndicatorSubscriber;
    
    // Category KPSUidWlan
    CSysApSubscriber*   iWlanIndicatorSubscriber;            // KPSWlanIndicator WlanInternalPSKeys.h

    TBool               iRestoreOngoing;

    // Category KPSUidCtsyCallInformation
    CSysApSubscriber* iCallInfoSubscriber; // KCTsyCallState ctsydomainpskeys.h
    
    // Autolock Status API
    CSysApSubscriber*   iAutolockStatusSubscriber;           // KCoreAppUIsAutolockStatus

    // Category KPSUidNetworkInfo - NetworkHandlingDomainPSKeys.h
    CSysApSubscriber*   iHomeZoneStatusSubscriber;           // KNWHomeZoneStatus
    CSysApSubscriber*   iNetworkModeSubscriber;              // KNWTelephonyNetworkMode
    
    // Category KPSUidUikon
    CSysApSubscriber*   iFlipStatusSubscriber;               // KPSUidHWRM
    
    // Category KPSUidDataSynchronizationInternalKeys
    /**
    * Subscriber for key KDataSyncStatus.
    * Own.
    */
    CSysApSubscriber* iSyncStatusSubscriber;
    
    // Category KPosIndicatorCategory
    /**
    * Subscriber for key KPosIntGpsHwStatus.
    * Own.
    */
    CSysApSubscriber* iGpsIndicatorSubscriber;
    
    /**
    * Subscriber for the key KPSWakeupAlarmStatus.
    * Own.
    */
    CSysApSubscriber* iWakeupAlarmSubscriber;

    /**
    * Subscriber for the key KUidPSSMSStackDiskSpaceMonitorKey.
    * Own.
    */
    CSysApSubscriber* iSmsPhoneStoreSubscriber;
};

#endif // SYSAPPUBSUBOBSERVER_H

// End of File
