idlefw/inc/framework/aipluginstatemanager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:17 +0200
changeset 0 79c6a41cd166
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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
 *  @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.