vtuis/videotelui/inc/tvtuiappstates.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:12 +0100
branchRCL_3
changeset 25 779871d1e4f4
parent 0 ed9695c8bcbe
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007 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:  Concrete application state classes
*
*/


#ifndef T_VTUIAPPSTATES_H
#define T_VTUIAPPSTATES_H

#include "tvtuiappstatebase.h"
#include <babitflags.h>
#include <vtengcommands.h>

class CAknQueryDialog;

/**
*  Initial application state. Responsible for startup phase 1 and
*  startup phase 2 (see EVtUiAppUiStartup in CVtUiAppUi.cpp).
*  Certain other state changes are required for phase 2 and history
*  of their reception is handled with precondition flags.
*
*  @since S60 v3.2
*/
class TVtUiStateStarting : public TVtUiAppStateBase
    {
public:
    /**
    * returns singleton instance of TVtUiStateStarting
    * @param aCtx state context
    * @param aUiStates UI states
    * @return singleton
    */
    static TVtUiStateStarting* InstanceL(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates );

public: // from TVtUiAppStateBase

    /** @see TVtUiAppStateBase */
    virtual void AppUiStartupPhase1DoneL();

    /** @see TVtUiAppStateBase */
    virtual void AppUiStartupPhase2DoneL();

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleVtEventL( TInt aEvent );

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleCommandL( const TInt aCommand );

    /** @see TVtUiAppStateBase */
    virtual TBool HandleForegroundChangedL( TBool aIsForeground );

private: // from TVtUiAppStateBase

    /** @see TVtUiAppStateBase */
    virtual void OpenL();

    /** @see TVtUiAppStateBase */
    virtual void Close();

private: // new methods

    void CheckSessionStateL();
    static TInt AsynchOpen( TAny* aAny );
    
    void DoOpenL();
    
    /** Preconditions that must be passed in order to proceed
     * to Phase 2 in startup.
     */
    enum TPreconditions
        {
        /** waiting for CLI from engine*/
        EWaitingCLI,
        /** waiting for phase1 to complete */
        EWaitingPhase1ToComplete,
        /** waiting for engine to get proper state */
        EWaitingSessionState
    };

    /**
    * Clears precondition passed as argument and checks if any
    * preconditions hold and if not proceeds to phase 2 of startup.
    */
    void CheckPhase2StartupL( const TPreconditions aClearCondition );
    
    void HandleCLIReceivedL();

private: // constructors and destructors

    // c++ constructor
    TVtUiStateStarting(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates );

    // Destructor
    virtual ~TVtUiStateStarting();

private: // data members

    // Precondition for state change to running
    TBitFlags8 iPreconditions;

    // Singleton
    static TVtUiStateStarting* iInstance;
    
    // Starts phase1 startup in state state context. Needed because
    // initial state is opened from within state context construction.
    CAsyncCallBack*     iStartCallback;
    };

/**
*  Application state that is active in normal operation.
*
*  @since S60 v3.2
*/
class TVtUiStateRunning : public TVtUiAppStateBase
    {
public:
    /**
    * returns singleton instance of TVtUiStateRunning
    * @param aCtx state context
    * @param aUiStates UI states
    * @return singleton
    */
    static TVtUiStateRunning* InstanceL(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates );

public: // from TVtUiAppStateBase

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleVtEventL( TInt aEvent );

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleCommandL( const TInt aCommand );

    /** @see TVtUiAppStateBase */
    virtual TBool HandleForegroundChangedL( TBool aIsForeground );

    /** @see TVtUiAppStateBase */
    virtual TBool PreHandleForegroundChangedL( TBool aIsForeground );
    /** @see TVtUiAppStateBase */
    virtual void HandleLayoutChangedL();

    /** @see TVtUiAppStateBase */
    virtual void StartDtmfTone( const TChar& aTone );

    /** @see TVtUiAppStateBase */
    virtual void StopDtmfTone();

    /** @see TVtUiAppStateBase */
    virtual void OpenL();

private: // from TVtUiAppStateBase
    /** @see TVtUiAppStateBase */
    virtual void Close();

private: // constructors and destructors

    // c++ constructor
    TVtUiStateRunning(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates );

    // Destructor
    virtual ~TVtUiStateRunning();

private: // new functions

    /** Requests call handling subsystem to initiate a voice call.
     * Starts shutdown of the application.
     */
    void CreateVoiceCallL();

    /** Dials emergency call and starts shutdown */
    void DialEmergencyCallL();
    
    void ShutdownWithEngineCommandL( const TInt aCommand );

private: // data members
    // singleton
    static TVtUiStateRunning* iInstance;
    // Create voice call query instance
    CAknQueryDialog* iCreateVoiceCallDlg;
    };

/**
*  Application state that is active during shutdown.
*
*  @since S60 v3.2
*/
class TVtUiStateResetting : public TVtUiAppStateBase
    {
public:
    /**
    * returns singleton instance of TVtUiStateResetting
    * @param aCtx state context
    * @param aUiStates UI states
    * @param aCommand engine command to send when resetting state activates
    * @return singleton
    */
    static TVtUiStateResetting* InstanceL(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates,
        const TVtEngCommandId aCommand = KVtEngCommandNone );

public: // from TVtUiAppStateBase

    /** @see TVtUiAppStateBase */
    virtual void AppUiStartupFailedL();

    /** @see TVtUiAppStateBase */
    virtual void ShutdownDoneL();

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleVTCommandPerformedL(
        TVtEngCommandId aCommand,
        const TInt aError );

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleVtEventL( TInt aEvent );

    /** @see TVtUiAppStateBase */
    virtual TEventResponse HandleCommandL( const TInt aCommand );

    /** @see TVtUiAppStateBase */
    virtual TBool HandleForegroundChangedL( TBool aIsForeground );

    /** @see TVtUiAppStateBase */
    virtual void HandleLayoutChangedL();

private: // from TVtUiAppStateBase

    /** @see TVtUiAppStateBase */
    virtual void OpenL();

    /** @see TVtUiAppStateBase */
    virtual void Close();

private: // constructors and destructors

    // c++ constructor
    TVtUiStateResetting(
        MVtUiStateContext& aCtx,
        TVtUiStates& aUiStates,
        const TVtEngCommandId aCommand = KVtEngCommandNone );

    // Destructor
    virtual ~TVtUiStateResetting();

private: // data members

    // Singleton
    static TVtUiStateResetting* iInstance;
    
    // Used in user originated shutdown (end active call/switch to voice)
    TVtEngCommandId iCommand;
    };

#endif // T_VTUIAPPSTATES_H