vtuis/videotelui/src/commands/cvtuiprimarycmdpolicy.cpp
branchRCL_3
changeset 35 779871d1e4f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtuis/videotelui/src/commands/cvtuiprimarycmdpolicy.cpp	Wed Sep 01 12:29:12 2010 +0100
@@ -0,0 +1,534 @@
+/*
+* Copyright (c) 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:  Primary policy class.
+*
+*/
+
+
+#include <featmgr.h>
+#include <avkon.hrh>
+#include <cvtlogger.h>
+#include <videotelui.rsg>
+#include <avkon.rsg>
+
+#include "cvtuiprimarycmdpolicy.h"
+#include "cvtuicmdvalidationactionbase.h"
+#include "cvtuicmdcustomvalidationactionbase.h"
+#include "tvtuicmdvalidatorcallback.h"
+#include "tvtuistates.h"
+#include "videotelui.hrh"
+#include "tVtuifeaturevariation.h"
+#include "CVtUiAppUi.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::NewL
+// ---------------------------------------------------------------------------
+//
+CVtUiPrimaryCmdPolicy* CVtUiPrimaryCmdPolicy::NewL(
+    const TVtUiStates& aUiStates, const CVtUiAppUi& aAppUi )
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.NewL" )
+    CVtUiPrimaryCmdPolicy* self =
+        new ( ELeave ) CVtUiPrimaryCmdPolicy( aUiStates, aAppUi );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+    __VTPRINTEXIT( "PrimaryCmdPolicy.NewL" )
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::~CVtUiPrimaryCmdPolicy
+// ---------------------------------------------------------------------------
+//
+CVtUiPrimaryCmdPolicy::~CVtUiPrimaryCmdPolicy()
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.~" )
+    __VTPRINTEXIT( "PrimaryCmdPolicy.~" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateMenuItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrimaryCmdPolicy::ValidateMenuItemsL(
+    CVtUiCmdValidationActionBase& aAction, TInt )
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidateMenuItemsL" )
+    aAction.ProcessL(
+        TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this,
+            ValidateMenuCommand ) );
+    __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateMenuItemsL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL(
+    CVtUiCmdValidationActionBase& aAction, TInt )
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidateSoftkeyItemsL" )
+    aAction.ProcessL(
+        TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this,
+            ValidateSoftkey ) );
+    __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateSoftkeyItemsL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateSoftkeyItemsL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrimaryCmdPolicy::ValidateToolbarItemsL(
+    CVtUiCmdValidationActionBase& aAction, TInt )
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidateToolbarItemsL" )
+    aAction.ProcessL(
+        TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >( *this,
+            ValidateToolbarCommand ) );
+    __VTPRINTEXIT( "PrimaryCmdPolicy.ValidateToolbarItemsL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::CustomValidationL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrimaryCmdPolicy::CustomValidationL(
+    CVtUiCmdCustomValidationActionBase& aAction, TInt )
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.CustomValidationL" )
+    switch ( aAction.CustomTypeId() )
+        {
+    // Command state validation
+    case EVtUiCmdContextTypeExecution:
+        aAction.ProcessL( TVtUiCmdValidatorCallBack< CVtUiPrimaryCmdPolicy >(
+            *this, ValidateCommandState ) );
+        break;
+
+    default:
+        __VTPRINT2( DEBUG_GEN,
+            "PrimaryCmdPolicy.CustomValidationL unknown typeId = %d",
+            aAction.CustomTypeId() );
+        break;
+        }
+    __VTPRINTEXIT( "PrimaryCmdPolicy.CustomValidationL" )
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidatesContext
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidatesContext(
+    const TVtUiCmdContextType& aCtxType ) const
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidatesContext" )
+
+    TBool result( EFalse );
+
+    switch ( aCtxType )
+        {
+    case EVtUiCmdContextTypeMenu:
+    case EVtUiCmdContextTypeSoftkey:
+    case EVtUiCmdContextTypeToolbar:
+    case EVtUiCmdContextTypeExecution:
+        result = ETrue;
+        break;
+
+    default:
+        break;
+        }
+
+    __VTPRINTEXITR( "PrimaryCmdPolicy.ValidatesContext %d", result )
+
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::CVtUiPrimaryCmdPolicy
+// ---------------------------------------------------------------------------
+//
+CVtUiPrimaryCmdPolicy::CVtUiPrimaryCmdPolicy( const TVtUiStates& aUiStates,
+    const  CVtUiAppUi& aAppUi )
+    : CVtUiCmdValidatorBase( EVtUiCmdPolicyPriorityPrimary ),
+      iUiStates( aUiStates ), iAppUi( aAppUi )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVtUiPrimaryCmdPolicy::ConstructL()
+    {
+    TVtUiActiveIdleVariation activeIdleVariation;
+    iAIEnabled = activeIdleVariation.IsActiveIdleEnabled();
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateMenuCommand
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidateMenuCommand( TInt aCommandId ) const
+    {
+    TBool handled;
+    return ValidateCommand( aCommandId, handled );
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateSoftkey
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidateSoftkey( TInt aResourceId ) const
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidateSoftkey" )
+    TBool result( EFalse );
+    switch ( aResourceId )
+        {
+    case R_VIDEOTELUI_SOFTKEYS_EMPTY_ACTIVE_COMMAND:
+        result = iUiStates.IsCommandActivating();
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_EMPTY_DIALEREXIT:
+        result = iUiStates.IsDialerActivating();
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_SHARE_OBJECT_IMAGE:
+        result = iUiStates.MediaState().IsSharing();
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_CAPTURE_VIDEO:
+        result = iUiStates.IsCaptureModeOn();
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_ENABLE_AUDIO:
+        result = !iUiStates.AudioState().IsAudio();
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_ENABLE_VIDEO:
+        result = !iUiStates.MediaState().IsVideo() &&
+            iUiStates.MediaState().HasCamera() &&
+            ( iUiStates.ExecState() == TVtUiStates::EExecStateRunning );
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_DIALER:
+    case R_VIDEOTELUI_SOFTKEYS_BT_HANDSFREE:
+    case R_VIDEOTELUI_SOFTKEYS_LOUDSPEAKER:
+    case R_VIDEOTELUI_SOFTKEYS_HANDSET_B:
+        {
+        if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) &&
+             ( iUiStates.ExecState() == TVtUiStates::EExecStateRunning ) )
+            {
+            switch ( aResourceId )
+                {
+            case R_VIDEOTELUI_SOFTKEYS_DIALER:
+                result = ETrue;
+                break;
+                }
+            }
+        else
+            {
+            switch ( aResourceId )
+                {
+            case R_VIDEOTELUI_SOFTKEYS_BT_HANDSFREE:
+                result = iUiStates.AudioState().CanActivateBtHf();
+                break;
+
+            case R_VIDEOTELUI_SOFTKEYS_LOUDSPEAKER:
+                result = iUiStates.AudioState().CanActivateLoudspeaker();
+                break;
+
+            case R_VIDEOTELUI_SOFTKEYS_HANDSET_B:
+                result = iUiStates.AudioState().CanDeactivateLoudspeaker();
+                break;
+                }
+            }
+        }
+        break;
+
+    case R_VIDEOTELUI_SOFTKEYS_END_CALL:
+        result = ETrue;
+        break;
+        }
+    __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateSoftkey %d", result )
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateToolbarCommand
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidateToolbarCommand( TInt aCommandId ) const
+    {
+     __VTPRINTENTER( "PrimaryCmdPolicy.ValidateToolbarCommand" )
+    __VTPRINT2( DEBUG_GEN, "cmdId = %d", aCommandId )
+    TBool result( ETrue );
+    switch( aCommandId )
+        {
+        case EVtUiCmdZoom:
+        case EVtUiCmdShareObjectImage:
+        case EVtUiCmdSwapImagesPlaces:
+        //case EVtUiCmdSnapshot:
+
+            result = EFalse;
+            break;
+
+        default:
+            result = ValidateMenuCommand( aCommandId );
+            break;
+        }
+    __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateToolbarCommand %d", result )
+    return result;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateCommandState
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidateCommandState( TInt aCommandId ) const
+    {
+     __VTPRINTENTER( "PrimaryCmdPolicy.ValidateCommandState" )
+    TBool handled;
+    TBool allowed( !ValidateCommand( aCommandId, handled ) );
+    if ( !handled )
+        {
+        switch ( aCommandId )
+            {
+        case EVtUiCmdCapture:
+        case EVtUiCmdCancelCapture:
+            allowed = iUiStates.IsCaptureModeOn();
+            break;
+
+        case EVtUiCmdStopSharingObjectImage:
+            allowed = iUiStates.MediaState().IsSharing() &&
+                !iUiStates.MediaState().IsVideoPermanentlyStopped();
+            break;
+
+        default:
+            allowed = ETrue;
+            break;
+            }
+        }
+    __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateCommandState %d", allowed )
+    return allowed;
+    }
+
+// ---------------------------------------------------------------------------
+// CVtUiPrimaryCmdPolicy::ValidateCommand
+// ---------------------------------------------------------------------------
+//
+TBool CVtUiPrimaryCmdPolicy::ValidateCommand( TInt aCommandId,
+    TBool& aHandled ) const
+    {
+    __VTPRINTENTER( "PrimaryCmdPolicy.ValidateCommand" )
+
+    __VTPRINT2( DEBUG_GEN, "    cmdId = %d", aCommandId )
+
+    TBool result( ETrue );
+
+    aHandled = ETrue;
+
+    const TVtUiMediaState& mediaState( iUiStates.MediaState() );
+    const TVtUiAudioState& audioState( iUiStates.AudioState() );
+    const TBool disabledVideo( !mediaState.IsVideo() ||
+        mediaState.IsSharing() );
+    const TBool disabledAudio( !audioState.IsAudio() );
+    const TBool disableVideoOptions( !mediaState.HasCamera() );
+    const TBool freezeSupported( mediaState.IsFreezeSupported() );
+    const TBool frozen( mediaState.IsFrozen() );
+
+    const TBool videoPermStopped( mediaState.IsVideoPermanentlyStopped() );
+    const TBool audioPermStopped( audioState.IsAudioPermanentlyStopped() );
+
+    switch( aCommandId )
+        {
+    case EVtUiCmdSnapshot:
+        result = ( disabledVideo && !frozen ) ||
+                   disableVideoOptions ||
+                   !freezeSupported;
+        break;
+
+    case EVtUiCmdUsePrimaryCamera:
+        result = mediaState.IsPrimaryCameraInUse() || frozen ||
+            !mediaState.HasPrimaryCamera() || mediaState.IsSharing() ||
+            videoPermStopped;
+        break;
+
+    case EVtUiCmdUseSecondaryCamera:
+        result = mediaState.IsSecondaryCameraInUse() || frozen ||
+            !mediaState.HasSecondaryCamera() || mediaState.IsSharing() ||
+            videoPermStopped;
+        break;
+
+    case EVtUiCmdDeactivateBT:
+        result = !audioState.CanDeactivateBtHf();
+        break;
+
+    case EVtUiCmdSwitchFromBTToIHF:
+        result = !audioState.CanDeactivateBtHf() ||
+            !audioState.CanActivateLoudspeaker();
+        break;
+
+    case EVtUiCmdActivateBT:
+        result = !audioState.CanActivateBtHf();
+        break;
+
+    case EVtUiCmdDeactivateLoudspeaker:
+        result = !audioState.CanDeactivateLoudspeaker();
+        break;
+
+    case EVtUiCmdActivateLoudspeaker:
+        result = !audioState.CanActivateLoudspeaker();
+        break;
+
+    case EVtUiCmdSwapImagesPlaces:
+        // Swap image places is always shown in menu.
+        result = EFalse;
+        break;
+
+    case EVtUiCmdAdjustVideo:
+        // Adjust video is always shown in menu.
+        result = EFalse;
+        break;
+
+    case EVtUiCmdAdjustVideoVideoQuality:
+        result = EFalse;
+        break;
+
+    case EVtUiCmdAdjustVideoWhiteBalance:
+        result = !iUiStates.IsWhiteBalanceSettingAvailable() || frozen;
+        break;
+
+    case EVtUiCmdAdjustVideoBrightness:
+          result =!iUiStates.IsBrightnessSettingAvailable() || frozen;
+        break;
+
+    case EVtUiCmdAdjustVideoContrast:
+        result =!iUiStates.IsContrastSettingAvailable() || frozen;
+        break;
+
+    case EVtUiCmdAdjustVideoColourTone:
+        result = !iUiStates.IsColorToneSettingAvailable() || frozen;
+
+        break;
+    case EVtUiCmdZoom:
+        result = frozen || disableVideoOptions || disabledVideo;
+        break;
+
+    case EVtUiCmdCreateVoice:
+        // Downgrading to voice call is not possible if remote end MSISDN
+        // is unavailable or there is waiting call.
+        result = !iUiStates.IsCLIReceived() || iUiStates.IsWaitingCall();
+        break;
+
+    case EVtUiCmdGoToIdle:
+#ifndef RD_BOOT_CUSTOMIZABLE_AI
+        result = !iAIEnabled;
+#else
+        // When RD_BOOT_CUSTOMIZABLE_AI is defined, active idle is always
+        // shown in menu
+        // result = EFalse;
+        // disable the go to idle when autolock is on.
+        result = iUiStates.IsDeviceLockOn();
+#endif //RD_BOOT_CUSTOMIZABLE_AI
+        break;
+
+    case EAknCmdHelp:
+    	{
+    	TVtUiHelpVariation hlpvariation;
+        result = !hlpvariation.IsHelpSupported();
+        }
+        break;
+
+    case EAknCmdExit:
+        // Exit option is disabled by default. Change ETrue to EFalse
+        // and it is in the menu.
+        break;
+
+    case EVtUiCmdEndActiveCall:
+        // End active call always shown in menu.
+        result = EFalse;
+        break;
+
+    case EVtUiCmdShareObjectImage:
+        result = frozen || mediaState.IsNotAbleToShare() ||
+            mediaState.IsInitializingShare() || videoPermStopped ||
+            iAppUi.IsActiveCommand( EVtUiCmdShareObjectImage );
+        break;
+
+    case EVtUiCmdEnableMain:
+        result = (  iAppUi.IsActiveCommand( EVtUiCmdEnableVideo ) ||
+                    iAppUi.IsActiveCommand( EVtUiCmdDisableVideo ) ||
+                 !disabledVideo || disableVideoOptions || videoPermStopped )
+                  && ( iAppUi.IsActiveCommand ( EVtUiCmdEnableAudio ) ||
+                  !disabledAudio || audioPermStopped );
+        break;
+
+    case EVtUiCmdEnableVideo:
+        result = !disabledVideo || disableVideoOptions ||
+            videoPermStopped;
+        break;
+
+    case EVtUiCmdEnableAudio:
+        result = !disabledAudio || audioPermStopped;
+        break;
+
+    case EVtUiCmdEnableBoth:
+        result = !disabledVideo || !disabledAudio || disableVideoOptions ||
+            videoPermStopped || audioPermStopped;
+        break;
+
+    case EVtUiCmdDisableMain:
+        result = ( iAppUi.IsActiveCommand( EVtUiCmdDisableVideo ) ||
+                   iAppUi.IsActiveCommand( EVtUiCmdEnableVideo ) ||
+                 disabledVideo || disableVideoOptions || videoPermStopped ) &&
+                ( iAppUi.IsActiveCommand( EVtUiCmdDisableAudio ) ||
+                disabledAudio || audioPermStopped );
+        break;
+
+    case EVtUiCmdDisableVideo:
+        result = disabledVideo || disableVideoOptions || videoPermStopped;
+        break;
+
+    case EVtUiCmdDisableAudio:
+        result = disabledAudio || audioPermStopped;
+        break;
+
+    case EVtUiCmdDisableBoth:
+        result = disableVideoOptions || disabledVideo || disabledAudio ||
+            videoPermStopped || audioPermStopped;
+        break;
+
+    case EVtUiCmdSendDTMF:
+        if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) )
+            {
+            result = EFalse;
+            }
+        else
+            {
+            result = ETrue;
+            }
+        break;
+
+    default:
+        aHandled = EFalse;
+        break;
+        }
+
+    __VTPRINTEXITR( "PrimaryCmdPolicy.ValidateCommand %d", result )
+
+    return result;
+    }
+