idlefw/inc/framework/aipluginstatemanager.h
author Christian Morlok <symbian.org@christianmorlok.de>
Wed, 07 Apr 2010 14:35:19 +0200
branchv5backport
changeset 54 666a2952b5b3
parent 0 79c6a41cd166
permissions -rw-r--r--
renamed dlls+exe to prevent conflicts with existing files in emulator; changelog attached. * renamed dlls/exe: - aifw.dll to aifw_hs.dll - cputils to cputils_hs - aiidleint.dll to aiidleint_hs.dll - aiutils.dll to aiutils_hs.dll - MenuInterface.dll to MenuInterface_hs.dll - XCFW.dll to XCFW_hs.dll - homescreen.exe to homescreen_hs.exe - ailaunch.exe to ailaunch_hs.exe * new UID for Active Idle (aifw_hs.dll, aiidleint_hs.dll and homescreen.exe): #define AI_UID3_AIFW_COMMON 0xEDFF45C4 (was 0x102750F0 = 271012080) * new UID for cputils_hs.dll: 0xE3E7134E (was 0x20016B7F = 536963967) * new UID for AI Utilities Factory (aiutils_hs.dll): 0xEC55106C (was 0x10281865 = 271063141) * new UID for MenuInterface_hs.dll: 0xEEE24485 (was 0x10210EAB = 270601899) * new UID for XCFW_hs.dll: 0xEB12332F (was 0x10210EA0 = 270601888) * new UID for ailaunch_hs.exe: 0xEF5A047A (was 0x200286E3 = 537036515)

/*
* Copyright (c) 2005-2006 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:  Plugin state manager
*
*/


#ifndef C_AIPLUGINSTATEMANAGER_H
#define C_AIPLUGINSTATEMANAGER_H

#include <e32base.h>
#include "aistatemanager.h"
#include "aipluginstatemachine.h"
#include "aipluginlifecycleobserver.h"

#include "aistatealive.h"
#include "aistatesuspended.h"
#include "aistateidle.h"
#include "aifwdefs.h"

class MAiPSPropertyObserver;
class MAiDeviceStatusObserver;
class CAiPluginStateManager;
class CAiContentPluginManager;
class CAiPluginStateMachine;
class CAiUiFrameworkObserverImpl;
class MAiUiFrameworkObserver;

/**
 *  Plugin state manager implementation.
 *
 *  @lib aifw_hs
 *  @since S60 3.2
 */
NONSHARABLE_CLASS( CAiPluginStateManager ) : public CBase,
                                             public MAiStateManager,
                                             public MAiPluginStateResources,
                                             public MAiPluginLifecycleObserver
    {
    
public: // Constructor and destructor

    static CAiPluginStateManager* NewL();

    virtual ~CAiPluginStateManager();

public: // From MAiStateManager

    void ReportStateChange( TAiStateChanges aState );

public: // From MAiPluginStateMachine

    TBool StateVariable( TAiStateVariable aStateVariable );

    TAiTransitionReason TranslateReason( TAiStateChanges aStateChange );

    void RestartSuspendTimer();

public: // From MAiPluginLifecycleObserver

    void PluginCreatedL( CAiContentPublisher& aPlugin );

    void PluginDestroyed( CAiContentPublisher& aPlugin );
    
    void AllPluginsCreated();

    void AllPluginsDestroyed();
              
public: // new methods

    /**
     * Create system status observers (lights/backup/restore etc.).
     */
    void CreateSystemStateObserversL();

    /**
     * Destroy system status observers.
     */
    void DestroySystemStateObservers();

    /**
     * Provide accessor for fw observer.
     * @return MAiUiFrameworkObserver pointer to fw observer.
     */
    MAiUiFrameworkObserver* UiFwObserver() const;
    
    /**
     * Process online state change for a plugin
     * @param aPlugin plugin     
     */
    void ProcessOnlineState( CAiContentPublisher& aPlugin ); 

    /**
     * Process offline state change for a plugin
     * @param aPlugin plugin     
     */    
    void ProcessOfflineState( CAiContentPublisher& aPlugin );
    
private: // Constructors

    CAiPluginStateManager();

    void ConstructL();

private: // New functions
    
    /**
     * Handles Statemachine event event and error array update.
     * @param aState new state.
     * @param aMachine reference to single state machine.
     */
    void ProcessStateChange( TAiStateChanges aState,
                             CAiPluginStateMachine& aMachine );

    /**
     * Handles Statemachine event event and error array update
     * for all state machines.
     * @param aState new state.
     */
    void ProcessStateChangeForAll( TAiStateChanges aState );

    /**
     * Helper to check idle focus status.
     * @return ETrue if idle is focused / foreground app.
     */
    TBool IdleFocused() const;

    /**
     * Helper to check backup (or restore) status.
     * @return ETrue if backup (or restore) is ongoing.
     */
    TBool BackupOngoing() const;

    /**
     * Helper to check phone lights status.
     * @return ETrue if lights are on.
     */
    TBool LightsOn() const;

    /**
     * Helper to check phone call status.
     * @return ETrue if call is ongoing.
     */
    TBool CallOngoing() const;

    /**
     * Standard callback for CPeriodic ie. T1 timer.
     */
    static TInt T1TimerCallback( TAny* aPtr );
        
private:     // Data

    /**
     * Backup operation state observer.
     * Own.
     */
    MAiDeviceStatusObserver* iBackupOperationObserver;

    /**
     * Call state observer.
     * Own.
     */
    MAiDeviceStatusObserver* iCallStateObserver;

    /**
     * Light state observer.
     * Own.
     */
    MAiDeviceStatusObserver* iLightStateObserver;

    /**
     * Enviroment change observer.
     * Own.
     */
    MAiDeviceStatusObserver* iEnvironmentObserver;

    /**
     * Focus change observer. Using telephony idle visiblity PS.
     * Own.
     */
    MAiDeviceStatusObserver* iFocusObserver;

    /**
     * Keylock observer.
     * Own.
     */
    MAiDeviceStatusObserver* iKeylockObserver;

    /**
     * Enviroment change observer. Full class type is used because
     * we need to provide accessor for implemented type MAiUiFrameworkObserver.
     * Own.
     */
    CAiUiFrameworkObserverImpl* iFrameworkObserver;

    /**
     * Timer for suspend, screensaver timout + light fadeout.
     * Own.
     */
    CPeriodic* iT1Timer;

    /**
     * Timer for suspend, screensaver timout + light fadeout.
     */
    TInt iT1Delay;

    /**
     * New state to be timed.
     */
    TAiState iTimedState;

    /**
     * Reason for timers activity.
     */
    TAiTransitionReason iTimedReason;

    /**
     * Indicates whether the device has been properly started.
     */
    TBool iIsDeviceStarted;

    /**
     * State machines for plugins.
     * Own.
     */
    RPointerArray<CAiPluginStateMachine> iStateMachines;
    };

#endif // C_AIPLUGINSTATEMANAGER_H

// End of File.