vtuis/videotelui/src/tvtuiappstatebase.cpp
changeset 0 ed9695c8bcbe
child 8 07d1685f0cd4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/tvtuiappstatebase.cpp	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2007 - 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:  base class for application states
+*
+*/
+
+
+#include "tvtuiappstates.h"
+#include "videotelui.hrh"
+#include "tvtuistates.h"
+#include "cvtuiappshutter.h"
+#include "mvtuistatecontext.h"
+#include <videotelui.rsg>
+#include <aknquerydialog.h>
+#include <stringloader.h>
+#include <cvtlogger.h>
+#include <cvtengmodel.h>
+#include <vtengevents.h>
+#include <mvtengcommandhandler.h>
+#include <coreapplicationuisdomainpskeys.h>
+
+// By default call ending command is allowed to send to call handling.
+
+// Initially no shutdown request
+TBool TVtUiAppStateBase::iShutdownRequested = EFalse;
+
+// -----------------------------------------------------------------------------
+// c++ constructor
+// -----------------------------------------------------------------------------
+//
+TVtUiAppStateBase::TVtUiAppStateBase(
+    MVtUiStateContext& aCtx,
+    TVtUiStates& aUiStates ) : iCtx(aCtx), iUiStates( aUiStates )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+TVtUiAppStateBase::~TVtUiAppStateBase()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::AppUiStartupPhase1DoneL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::AppUiStartupPhase1DoneL()
+    {
+    // no default behavior
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::AppUiStartupPhase2DoneL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::AppUiStartupPhase2DoneL()
+    {
+    // no default behavior
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::ShutdownDoneL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::ShutdownDoneL()
+    {
+    // no default behavior
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleForegroundChangedL
+// -----------------------------------------------------------------------------
+//
+TBool TVtUiAppStateBase::HandleForegroundChangedL(
+    const TBool /*aIsForegroung*/ )
+    {
+    // no default behavior
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::PreHandleForegroundChangedL
+// -----------------------------------------------------------------------------
+//
+TBool TVtUiAppStateBase::PreHandleForegroundChangedL(
+    const TBool /*aIsForegroung*/ )
+    {
+    // no default behavior
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::StartDtmfTone
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::StartDtmfTone( const TChar& /*aTone*/ )
+    {
+    // no default behavior
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::StopDtmfTone
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::StopDtmfTone()
+    {
+    // no default behavior
+    }
+
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::SetInitialStateL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::SetInitialStateL(
+    MVtUiStateContext& aCtx,
+    TVtUiStates& aUiStates )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.SetInitialState" )
+    TVtUiAppStateBase* initialState =
+        TVtUiStateStarting::InstanceL( aCtx, aUiStates );
+    aCtx.ChangeState( initialState );
+    initialState->OpenL();
+    __VTPRINTEXIT( "TVtUiAppStateBase.SetInitialState" )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::AppUiStartupFailedL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::AppUiStartupFailedL()
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.AppUiStartupFailedL" )
+    // Shutdown
+    ChangeStateL( *TVtUiStateResetting::InstanceL( iCtx, iUiStates ) );
+    __VTPRINTEXIT( "TVtUiAppStateBase.AppUiStartupFailedL" )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::OpenL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::OpenL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::Close
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::Close()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::ChangeStateL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::ChangeStateL( TVtUiAppStateBase& aNewState )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.ChangeStateL" )
+
+    // Check for transition to already active state.
+    TVtUiAppStateBase* state = &aNewState;
+    if ( state == this )
+        {
+        __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", 0 )
+        return;
+        }
+    const TVtEngCommandId pending =
+        iCtx.Model().CommandHandler().PendingCommand();
+    if ( pending !=  KVtEngCommandNone &&
+         state == TVtUiStateResetting::InstanceL( iCtx, iUiStates ) )
+        {
+        // delay shutdown until engine command completes
+        __VTPRINT2( DEBUG_GEN, "TVtUiAppStateBase.ChangeStateL, pengind command is: %d", pending );
+        TVtUiAppStateBase::iShutdownRequested = ETrue;
+
+        if ( pending == KVtEngInitializeShareImage )
+            {
+            iCtx.Model().CommandHandler().CancelCommand( pending );
+            }
+
+        __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", KErrNotReady )
+        return;
+        }
+    __VTPRINT( DEBUG_GEN,
+        " TVtUiAppStateBase.ChangeStateL !! STATE TRANSITION !!" )
+    iCtx.ChangeState( &aNewState );
+    Close();
+    // perform entry action for new state
+    aNewState.OpenL();
+    __VTPRINTEXITR( "TVtUiAppStateBase.ChangeStateL %d", 1 )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::CleanupResetPushL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::CleanupResetPushL()
+    {
+    // Shutdown if leave occurs in critical ops.
+    CleanupStack::PushL(
+        TCleanupItem( TransitionToReset, this ) );
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::TransitionToReset
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::TransitionToReset( TAny* aAny )
+    {
+    TVtUiAppStateBase* state = reinterpret_cast< TVtUiAppStateBase* >( aAny );
+    TRAP_IGNORE( state->ChangeStateL( *TVtUiStateResetting::InstanceL(
+        state->iCtx, state->iUiStates ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleVTCommandPerformedL
+// -----------------------------------------------------------------------------
+//
+TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleVTCommandPerformedL(
+            TVtEngCommandId /*aCommand*/,
+            const TInt /*aError*/ )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.HandleVTCommandPerformedL" )
+    // By default all UI is allowed to handle all command completions.
+    TEventResponse handled = EEventNotHandled;
+
+    // check if shutdown requested while command was pending
+    const TVtEngCommandId pending = iCtx.Model().CommandHandler().PendingCommand();
+    if ( pending == KVtEngCommandNone &&
+          TVtUiAppStateBase::iShutdownRequested )
+        {
+        __VTPRINT( DEBUG_GEN, "Handling delayed shutdown" );
+        ChangeStateL( *TVtUiStateResetting::InstanceL(
+            iCtx, iUiStates ) );
+        }
+    __VTPRINTEXIT( "TVtUiAppStateBase.HandleVTCommandPerformedL" )
+    return handled;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleVtEventL
+// -----------------------------------------------------------------------------
+//
+TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleVtEventL(
+    const TInt aEvent )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.HandleVtEventL" )
+    TEventResponse handled = EEventHandled;
+    switch ( aEvent )
+        {
+    case KVtEngDeviceLockOn:
+    case KVtEngDeviceLockOff:
+        HandleDeviceLockEventL( aEvent == KVtEngDeviceLockOn );
+        break;
+    case KVtEngRemoteDisconnect:
+        /** Don't allow sending of end active call command to call handling
+         *  because requesting disconnect from the network after NW originated
+         *  termination violates standards.
+         */
+        break;
+    default:
+        handled = EEventNotHandled;
+        break;
+        }
+    __VTPRINTEXIT( "TVtUiAppStateBase.HandleVtEventL" )
+    return handled;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+TVtUiAppStateBase::TEventResponse TVtUiAppStateBase::HandleCommandL(
+    const TInt /*aCommand*/ )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.HandleCommandL" )
+    TEventResponse handled = EEventNotHandled;
+    __VTPRINTEXITR( "TVtUiAppStateBase.HandleCommandL %d", handled )
+    return handled;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleLayoutChangedL
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::HandleLayoutChangedL( )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.HandleLayoutChangedL" )
+    // By default only indicate that layout change needs to be handled.
+    iUiStates.SetLayoutChangeNeeded( ETrue );
+    __VTPRINTEXIT( "TVtUiAppStateBase.HandleLayoutChangedL" )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleShutdownReady
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::HandleShutdownReady()
+    {
+     __VTPRINTENTER( "TVtUiAppStateBase.HandleShutdownReady" )
+    // forwarded to AppUi which handles UI framework exit
+    iCtx.HandleShutdownReady();
+    iCtx.ChangeState( NULL );
+    // deletes current state
+    Close();
+     __VTPRINTEXIT( "TVtUiAppStateBase.HandleShutdownReady" )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::HandleDeviceLockEventL
+//
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::HandleDeviceLockEventL( const TBool aDeviceIsLocked )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.HandleDeviceLockEventL" )
+    iUiStates.SetDeviceLockOn( aDeviceIsLocked );
+    if ( aDeviceIsLocked )
+        {
+        iCtx.ChangeApplicationFocus( EFalse );
+        }
+    __VTPRINTEXITR( "TVtUiAppStateBase.HandleDeviceLockEventL lock state=%d",
+        aDeviceIsLocked )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::CheckEndActiveCallL
+// -----------------------------------------------------------------------------
+//
+TBool TVtUiAppStateBase::CheckEndActiveCallL()
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.CheckEndActiveCallL" )
+    const MVtEngSessionInfo::TSessionState state = SessionState( EFalse );
+    TBool shutdownStarted( EFalse );
+    if ( state == MVtEngSessionInfo::EIdle )
+        {
+        __VTPRINT( DEBUG_GEN, "VtUi.Release bearer" )
+        // h.245 session is ended
+        ChangeStateL( *TVtUiStateResetting::InstanceL( iCtx, iUiStates ) );        
+        shutdownStarted = ETrue;
+        }
+    __VTPRINTEXITR( "TVtUiAppStateBase.CheckEndActiveCallL %d",
+        shutdownStarted )
+    return shutdownStarted;
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::SessionState
+// -----------------------------------------------------------------------------
+//
+MVtEngSessionInfo::TSessionState TVtUiAppStateBase::SessionState(
+    const TBool aUpdate ) const
+    {
+    const CVtEngModel& model = iCtx.Model();
+    const MVtEngSessionInfo& session = model.Session();
+    return session.State( aUpdate );
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::SetLightsState
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::SetLightsState( const TBool aOn )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.SetLightsState" )
+    const TInt value = aOn ? EForcedLightsOn : EForcedLightsOff;
+    RProperty::Set(
+            KPSUidCoreApplicationUIs,
+            KLightsVTForcedLightsOn,
+            value );
+    __VTPRINTEXIT( "TVtUiAppStateBase.SetLightsState" )
+    }
+
+// -----------------------------------------------------------------------------
+// TVtUiAppStateBase::SetExecState
+// -----------------------------------------------------------------------------
+//
+void TVtUiAppStateBase::SetExecState( const TVtUiStates::TVtUiExecState aState )
+    {
+    __VTPRINTENTER( "TVtUiAppStateBase.SetExecState" )
+    iUiStates.SetExecState( aState );
+    __VTPRINTEXITR( "TVtUiAppStateBase.SetExecState %d", aState )
+    }