cellular/telephonysettings/src/PsetSAObserver.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cellular/telephonysettings/src/PsetSAObserver.cpp	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,1548 @@
+/*
+* Copyright (c) 2002-2005 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:  CPsetSAObserver handles all the queries to observer.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <ctsydomainpskeys.h>
+#include <telservicesinternalcrkeys.h> // Telephony service local variation keys.
+#include <telservicesvariant.hrh>
+
+#include "PsetSAObserver.h"
+#include "MPsetNetworkInfoObs.h"    
+#include "MPsetDivertObs.h"       
+#include "PhoneSettingsLogger.h"
+#include "PSetUtility.h"
+#include "PsetVariationProxy.h"
+
+//CONSTANTS
+const TInt KPsetRequesterUncertain = 0;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// 
+// 1st Phase constructor.
+// 
+// ---------------------------------------------------------
+//
+EXPORT_C CPsetSAObserver* CPsetSAObserver::NewL()
+    {
+    CPsetSAObserver* self = new ( ELeave ) CPsetSAObserver;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// C++ constructor.
+// 
+// ---------------------------------------------------------------------------
+//
+CPsetSAObserver::CPsetSAObserver() 
+                : CActive( EPriorityStandard )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// DualActvationFeature
+// ---------------------------------------------------------------------------
+//
+TBool CPsetSAObserver::IsDivertDualAffectFeatureEnabledL()
+    {
+    TBool retValue(EFalse);
+    CPSetVariationProxy* variationProxy = 
+        CPSetVariationProxy::NewL( KCRUidTelSrvVariation, KTelSrvVariationFlags );
+    CleanupStack::PushL( variationProxy );
+    retValue = variationProxy->IsFeatureEnabled( KTelephonyLVFlagDivertDualAffect );
+    CleanupStack::PopAndDestroy( variationProxy );
+    return retValue; 
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Run active object -- should only be used when trying to catch if call
+// has been started. 
+//
+// ---------------------------------------------------------------------------
+void CPsetSAObserver::RunL()
+    {
+    if ( iNetObserver )
+        {
+        if ( iStatus.Int() != KErrCancel )
+            {
+            TInt value = KErrGeneral;
+            // This to ensure that events are not lost.
+            iNotifyProperty.Subscribe( iStatus );
+            iNotifyProperty.Get( value );
+            SetActive();
+            if ( value != EPSCTsyCallStateNone )
+                {
+                // This is what was wanted, so cancel subscribe and inform
+                // observer.
+                iNotifyProperty.Cancel();
+
+                iNetObserver->HandleCallActivatedL();
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Returns current gprs connection state.
+// NOTE that this is not actual GPRS connection, even attached is considered
+// connected in this method. 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPsetSAObserver::IsGPRSConnected()
+    {
+    __PHSLOGSTRING("[PHS]--> CPsetSAObserver::IsGPRSConnected" );
+    TInt connectionStatus = KErrGeneral;
+    
+	TInt error = RProperty::Get( KUidSystemCategory,
+                                 KPSUidGprsStatusValue,
+                                 connectionStatus );
+                                 
+    if ( connectionStatus == EPSGprsUnattached )
+        {
+        connectionStatus = CPsetSAObserver::EPSetGPRSNotConnected;
+        }
+    else if ( connectionStatus == EPSGprsAttach ||
+              connectionStatus == EPSGprsContextActive ||
+              connectionStatus == EPSGprsSuspend )
+        {
+        connectionStatus = CPsetSAObserver::EPSetGPRSConnectionActive;
+        }
+    __PHSLOGSTRING2("[PHS]<-- CPsetSAObserver::IsGPRSConnected P&S error: %d, connectionStatus: %d", error, connectionStatus );
+    //Else: error situation, return error code (already in connectionStatus).
+    return connectionStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Returns current call state
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPsetSAObserver::IsCallActive()
+    {
+    TInt callStatus = KErrGeneral;
+
+    TInt error = RProperty::Get( KPSUidCtsyCallInformation,
+                                 KCTsyCallState,
+                                 callStatus );
+    if ( error == KErrNone )
+        {
+        switch ( callStatus )
+            {
+            case EPSCTsyCallStateUninitialized:
+            case EPSCTsyCallStateNone:
+                callStatus = CPsetSAObserver::EPSetNoCallsActive;
+                break;
+            default:
+                callStatus = CPsetSAObserver::EPSetCallActive;
+                break;
+            }
+        }
+    // Else - error situation, return error code (already in callStatus).
+    return callStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Returns current Divert status
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPsetSAObserver::GetCurrentDivertStatus( 
+    TUnconditionalCFStatus& aStatus )
+    {
+    __PHSLOGSTRING("[PHS]--> CPsetSAObserver::GetCurrentDivertStatus" );
+    TInt error(KErrNone);
+    TInt indicator(KCFIndicatorUnknown);
+    TInt forwadingIndicator( indicator );
+    TPckg<TInt> indicatorPckg( forwadingIndicator );
+       
+    error =  iRepository->Get( KCtsyUnconditionalCFStatus, indicatorPckg );
+    if ( error == KErrNone )
+        {
+        aStatus = static_cast <TUnconditionalCFStatus> ( forwadingIndicator );
+        }
+        
+    __PHSLOGSTRING2("[PHS]--> Error: %d, aStatus: %d ", error, aStatus );
+    __PHSLOGSTRING("[PHS]<-- CPsetSAObserver::GetCurrentDivertStatus" );
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Sets Network observer to member variable
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetSAObserver::SetNetObserver( 
+    MPsetNetworkInfoObserver& aObserver )
+    {
+    if ( !iNetObserver )
+        {
+        iNetObserver = &aObserver;
+        }
+    TRAPD( ignore, NotifyCallStartedL() );
+    // Line below fixes armv5 warning.
+    ignore = ignore;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Cancels active object.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::DoCancel()
+    {
+    iNotifyProperty.Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Destructor
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPsetSAObserver::~CPsetSAObserver()
+    {
+    Cancel();
+    
+    if ( iNotifyProperty.Handle() )
+        {
+        iNotifyProperty.Close();
+        }
+
+    iNetObserver = NULL;
+    
+    delete iRepository;
+    iRepository = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Symbian OS 2-phase constructor.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::ConstructL()
+    {
+    iRepository = CRepository::NewL( KCRUidCtsyCallForwardingIndicator );
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Starts to listen to call alerting or call ringing events.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::NotifyCallStartedL()
+    {
+    if ( !IsActive() )
+        {
+        //Ignore any errors here. It is handled in RunL
+        iNotifyProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState );
+        iNotifyProperty.Subscribe( iStatus );        
+        SetActive();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Notifies cenrep that diverts have been changed => sets indicator. 
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPsetSAObserver::NotifyDivertChange( 
+    TSelectedLine aAlsStatus,
+    TCallDivertNotifySetting& aDivertNotify,
+    const TInt& aActivatorUncertain )
+    {
+    __PHSLOGSTRING("[PHS]--> CPsetSAObserver::NotifyDivertChange" );
+    // we have only one ALS line available
+    if( aAlsStatus == ENotSupportedLine || 
+        aAlsStatus == KErrUnknown )  
+        {
+        __PHSLOGSTRING("[PHS]--> we have only one ALS line available" );
+        HandleNoAlsIndicators( aDivertNotify, 
+                               aActivatorUncertain );
+        }
+    else if( aAlsStatus == EPrimaryLine )
+        {
+        __PHSLOGSTRING("[PHS]--> HandlePrimaryLineIndicators" );
+        HandlePrimaryLineIndicators( aDivertNotify );        
+        }
+    else if( aAlsStatus == EAuxiliaryLine )
+        {
+        __PHSLOGSTRING("[PHS]--> HandleSecondaryLineIndicators" );
+        HandleSecondaryLineIndicators( aDivertNotify );
+        }
+    
+     __PHSLOGSTRING1("[PHS]    NEW DIVERT STATUS:: %d", aDivertNotify.iPreviousCfStatus );
+    TInt package = aDivertNotify.iPreviousCfStatus;
+    TPckg<TInt> indicatorPckg( package );
+    TInt error = iRepository->Set( KCtsyUnconditionalCFStatus, indicatorPckg );
+	__PHSLOGSTRING("[PHS]<-- CPsetSAObserver::NotifyDivertChange" ); 
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// Handles indicators when no ALS.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleNoAlsIndicators( 
+    TCallDivertNotifySetting& aDivertNotify,
+    const TInt& aActivatorUncertain )
+    {
+    __PHSLOGSTRING("[PHS]--> CPsetSAObserver::HandleNoAlsIndicators" );
+    TUnconditionalCFStatus previousStatus = aDivertNotify.iPreviousCfStatus;
+    TUnconditionalCFStatus currentStatus = aDivertNotify.iPreviousCfStatus;
+    TBool voiceMailBox = aDivertNotify.iVmbxDivert;
+    TInt bsc = aDivertNotify.iBasicServiceCode;
+
+    __PHSLOGSTRING1("[PHS]--> Previous CF status: %d ", previousStatus );
+    __PHSLOGSTRING1("[PHS]-->      Voice MailBox: %d ", voiceMailBox );
+    __PHSLOGSTRING1("[PHS]--> Basic Service Code: %d ", bsc );
+    __PHSLOGSTRING1("[PHS]--> ActivatorUncertain: %d ", aActivatorUncertain );
+    if ( aDivertNotify.iCfActivated )  
+        {
+        if( voiceMailBox )
+            {
+            HandleVoiceMailBoxDivertActivation( currentStatus, bsc );
+            }
+        else
+            {
+            HandleDivertActivation( currentStatus, bsc );
+            }
+        }
+    else
+        {
+        __PHSLOGSTRING("[PHS]-->  Deactivition" );
+        HandleDivertDeactivation( currentStatus, bsc );
+        }
+        
+    __PHSLOGSTRING1("[PHS]--> Current CF status: %d ", currentStatus );
+    // If aActivatorUncertain is zero and previously divert was acitve to 
+    // Voice mailbox then status is leaved as it was before.
+    if ( aActivatorUncertain == KPsetRequesterUncertain )
+        {
+        if ( previousStatus != currentStatus )
+            {
+            if ( ( previousStatus == KCFVoiceForwardedToVoiceMailbox ) || 
+                 ( previousStatus == KCFVideoForwardedToVoiceMailbox ) ||
+                 ( previousStatus == ( KCFVoiceForwarded | KCFVideoForwarded 
+                    | KCFForwardedToVoiceMailbox ) ) )
+                {
+                __PHSLOGSTRING("[PHS] KCtsyUnconditionalCFStatus is NOT changed" );
+                aDivertNotify.iPreviousCfStatus = previousStatus;
+                }
+            else
+                {
+                __PHSLOGSTRING("[PHS]RequesterUn-KCtsyUnconditionalCFStatus is going to be changed" );
+                aDivertNotify.iPreviousCfStatus = currentStatus;
+                }
+            }
+        }
+    else
+        {
+        __PHSLOGSTRING("[PHS] KCtsyUnconditionalCFStatus is going to be changed" );
+        aDivertNotify.iPreviousCfStatus = currentStatus; 
+        }
+        
+    __PHSLOGSTRING("[PHS]<-- CPsetSAObserver::HandleNoAlsIndicators" );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Handles line1 indicators.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandlePrimaryLineIndicators( 
+    TCallDivertNotifySetting& aDivertNotify )
+    {
+    __PHSLOGSTRING2("[PHS]--> HandlePrimaryLineIndicators - aPreviousCfStatus: %d, aCfActivated: %d", aDivertNotify.iPreviousCfStatus, aDivertNotify.iCfActivated );
+
+    TUnconditionalCFStatus status = aDivertNotify.iPreviousCfStatus;
+    TInt bsc = aDivertNotify.iBasicServiceCode;
+
+    __PHSLOGSTRING1("[PHS]--> status: %d ", status );
+    __PHSLOGSTRING1("[PHS]--> bsc:    %d ", bsc );
+    
+    if ( !IsDivertDualAffectFeatureEnabledL() )
+        {
+        if( aDivertNotify.iCfActivated )
+            {
+            __PHSLOGSTRING("[PHS]--> NOT DUAL Activation - Primary" );
+            HandlePrimaryLineDivertActivation( status, bsc );
+            }
+        else
+            {
+            __PHSLOGSTRING("[PHS]--> NOT DUAL - Primary" );
+            HandlePrimaryLineDivertDeactivation( status, bsc );
+            }
+        }
+    else // if dualactivation is active.
+        {
+        if( aDivertNotify.iCfActivated )
+            {
+            __PHSLOGSTRING("[PHS]--> Activation - Primary" );
+            HandlePrimaryLineDualDivertActivation( status, bsc );
+            }
+        else
+            {
+            __PHSLOGSTRING("[PHS]--> Deactivation - Primary" );
+            HandlePrimaryLineDualDivertDeactivation( status, bsc );
+            }
+        }
+    
+    aDivertNotify.iPreviousCfStatus = status;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Handles line2 indicators.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleSecondaryLineIndicators( 
+    TCallDivertNotifySetting& aDivertNotify )
+    {
+    __PHSLOGSTRING2("[PHS]--> HandleSecondaryLineIndicators - HandleSecondaryLineIndicators: %d, aCfActivated: %d", aDivertNotify.iPreviousCfStatus, aDivertNotify.iCfActivated );
+
+    TUnconditionalCFStatus status = aDivertNotify.iPreviousCfStatus;
+
+    TInt bsc = aDivertNotify.iBasicServiceCode;
+    
+    __PHSLOGSTRING1("[PHS]--> status: %d ", status );
+    __PHSLOGSTRING1("[PHS]--> bsc:    %d ", bsc );
+    
+    if ( !IsDivertDualAffectFeatureEnabledL() )
+        {
+        if( aDivertNotify.iCfActivated )
+            {
+            __PHSLOGSTRING("[PHS]--> NOT DUAL Activation - Secondary" );
+            HandleSecondaryLineDivertActivation( status, bsc );
+            }
+        else
+            {
+            __PHSLOGSTRING("[PHS]--> NOT DUAL  Deactivation - Secondary" );
+            HandleSecondaryLineDivertDeactivation( status, bsc );
+            }
+        }
+    else // if dualactivation is active.
+        {
+        if( aDivertNotify.iCfActivated )
+            {
+            __PHSLOGSTRING("[PHS]--> Activation - Secondary" );
+            HandleSecondaryLineDualDivertActivation( status, bsc );
+            }
+        else
+            {
+            __PHSLOGSTRING("[PHS]--> Deactivation - Secondary" );
+            HandleSecondaryLineDualDivertDeactivation( status, bsc );
+            }
+        }
+    
+    aDivertNotify.iPreviousCfStatus = status;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when divert done to voicemail (no ALS).
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleVoiceMailBoxDivertActivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 1" );
+                aStatus =  KCFVoiceForwardedToVoiceMailbox;
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 2" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            else if (  aBsc == EAllBearer || aBsc == EAllSync ||
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 3" );
+                aStatus =  KCFVideoForwardedToVoiceMailbox;
+                }
+            break;  
+            }
+        case KCFVoiceForwarded:
+            {       
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 4" );
+                aStatus =  KCFVoiceForwardedToVoiceMailbox;
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 5" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 6" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox );
+                }
+            break;  
+            }
+        case KCFVideoForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 7" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 8" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 9" );
+                aStatus = KCFVideoForwardedToVoiceMailbox;
+                }
+            break;  
+            }
+        case KCFVoiceForwarded | KCFVideoForwarded:
+            {       
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 10" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 11" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 12" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox );
+                }
+            break;  
+            }
+        case KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer ||
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 13" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            break;  
+            }
+        case KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer ||
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 14" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }  
+            break;  
+            }
+        case KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele ||
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 15" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            break;  
+            }
+        case KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele ||
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Mailbox - 16" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox );
+                }
+            break;  
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when divert done to some other number than 
+// voicemail (no ALS).
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleDivertActivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 1" );
+                aStatus = KCFVoiceForwarded;
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 2" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 3" );
+                aStatus = KCFVideoForwarded;
+                }
+            break;
+            }
+        case KCFVoiceForwarded:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer ||
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 4" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            break;
+            }
+        case KCFVideoForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony ||
+                aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 5" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            break;
+            }
+        case KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 6" );
+                aStatus = KCFVoiceForwarded;
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 7" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 8" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox );
+                }
+            break;
+            }
+        case KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 9" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 10" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 11" );
+                aStatus = KCFVideoForwarded;
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 12" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox );
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 13" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 14" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer ||
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 15" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                //aStatus = EPSAllForwarded;  
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony ||
+                aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - 16" );
+                aStatus =  static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded );
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when deactivation done(no ALS).
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleDivertDeactivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFVoiceForwarded | KCFVideoForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 1" );
+                aStatus = KCFVideoForwarded;
+                }
+            else if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 2" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 3" );
+                aStatus = KCFVoiceForwarded;
+                }
+            break;  
+            }
+        case KCFVoiceForwarded:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 4" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded:
+            {
+            if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 5" );
+                aStatus = KCFVideoForwarded;
+                }
+            else if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer || 
+                aBsc == EAllSync || aBsc == ESyncData   )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 6" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 7" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFVoiceForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 9" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 10" );
+                aStatus = KCFVideoForwarded;
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 11" );
+                aStatus = KCFVoiceForwardedToVoiceMailbox;
+                }    
+            break;
+            }
+        case KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer || 
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 12" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 13" );
+                aStatus = KCFVoiceForwardedToVoiceMailbox;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 14" );
+                aStatus = KCFVideoForwardedToVoiceMailbox;
+                }
+            else if ( aBsc == EAllTeleAndBearer  )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 15" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwardedToVoiceMailbox:
+            {
+            if ( aBsc == EAllTeleAndBearer  )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 16" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 17" );
+                aStatus = KCFVideoForwardedToVoiceMailbox;
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc== ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivition - 18" );
+                aStatus = KCFVoiceForwarded;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when Primary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandlePrimaryLineDivertActivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+        case KErrUnknown:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 1" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 2" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync ||
+                aBsc == ESyncData  )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 3" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllBearer ||
+                aBsc == EAllSync || aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 4" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 5" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 6" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 | 
+                KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 7" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            else if( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 8" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 | 
+                KCFForwardedOnLine2 );
+                }
+            else if ( aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 9" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+          
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when Primary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandlePrimaryLineDualDivertActivation(
+        TUnconditionalCFStatus& aStatus,
+        const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+        case KErrUnknown:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 1" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 2" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 3" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            {
+            if( aBsc == EAllTeleAndBearer || aBsc == EAllTele || 
+                aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Primary - 4" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+            
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when Primary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandlePrimaryLineDualDivertDeactivation(
+        TUnconditionalCFStatus& aStatus,
+        const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele 
+                || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 1" );
+                aStatus = KCFForwardedOnLine2;
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele 
+                || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 2" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            { 
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele 
+                || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 3" );
+                aStatus = KCFForwardedOnLine2;
+                }
+            break;
+            }
+            
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when Primary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandlePrimaryLineDivertDeactivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc )
+    {
+    switch ( aStatus )
+        {
+        case KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 1" );
+            aStatus = KCFForwardedOnLine2;
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 2" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 3");
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 4" );
+                aStatus = KCFNoCallsForwarded;
+                } 
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 5" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 6" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 7" );
+                aStatus = aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 8" );
+                aStatus = aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            { 
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData || aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 9" );
+                aStatus = KCFForwardedOnLine2;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 10" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 11" );
+                aStatus =  KCFForwardedOnLine2;
+                }
+            else if ( aBsc == EAllTele || aBsc == ETelephony )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 12" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                } 
+            else if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData  )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Primary - 13" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        
+        default:
+            break;
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when secondary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleSecondaryLineDivertActivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+        case KErrUnknown:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 1" );   
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 2" );   
+                aStatus = KCFForwardedOnLine2;
+                }    
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 3" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            else if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 4");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 5");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 |
+                KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 6");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 7");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 8");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when secondary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleSecondaryLineDualDivertActivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFIndicatorUnknown:
+        case KCFNoCallsForwarded:
+        case KErrUnknown:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 1" );   
+                aStatus = KCFForwardedOnLine2;
+                }    
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 2");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer ||  aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Activation - Secondary - 3");
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when secondary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleSecondaryLineDivertDeactivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele ||
+                aBsc == EAltTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 1" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVideoForwarded |KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 2" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 3" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 4" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;  
+            } 
+        case KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 5" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 6" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2 );
+                }
+            else if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 7" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVideoForwarded |KCFVoiceForwarded:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 8" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFVideoForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllBearer || aBsc == EAllSync || 
+                aBsc == ESyncData )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 9" );
+                aStatus = KCFForwardedOnLine2;
+                }
+            else if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 10" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVideoForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// Set correct indicator value when secondary line used.
+// 
+// ---------------------------------------------------------------------------
+//
+void CPsetSAObserver::HandleSecondaryLineDualDivertDeactivation( 
+    TUnconditionalCFStatus& aStatus,
+    const TInt aBsc  )
+    {
+    switch ( aStatus )
+        {
+        case KCFVoiceForwarded | KCFForwardedOnLine1 | KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele ||
+                aBsc == EAltTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 1" );
+                aStatus = static_cast<TUnconditionalCFStatus>( 
+                KCFVoiceForwarded | KCFForwardedOnLine1 );
+                }
+            break;
+            }
+        case KCFVoiceForwarded | KCFForwardedOnLine1:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 2" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        case KCFForwardedOnLine2:
+            {
+            if ( aBsc == EAllTeleAndBearer || aBsc == EAltTele ||
+                aBsc == EAllTele )
+                {
+                __PHSLOGSTRING("[PHS]--> Deactivation - Secondary - 3" );
+                aStatus = KCFNoCallsForwarded;
+                }
+            break;
+            }
+        default:
+            break;
+        }
+    }
+    
+//  End of File