mmshplugins/mmshaoplugin/src/mustsypropertymonitor.cpp
changeset 15 ccd8e69b5392
parent 2 b31261fd4e04
child 20 e8be2c2e049d
child 22 496ad160a278
--- a/mmshplugins/mmshaoplugin/src/mustsypropertymonitor.cpp	Tue Feb 02 00:09:07 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,452 +0,0 @@
-/*
-* Copyright (c) 2005-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:  Monitor that observes the status of the current CS call
-*
-*/
-
-#include "mussesseioninformationapi.h"
-#include "mustsypropertymonitor.h"
-#include "muscallconferencemonitor.h"
-#include "muscallmonitor.h"
-#include "muslogger.h"
-#include "mussettings.h"
-#include "musclirmonitor.h"
-
-#include <etel.h>
-#include <e32property.h>
-#include <mmtsy_names.h>
-#include <ctsydomainpskeys.h>
-
-
-// -----------------------------------------------------------------------------
-// Symbian two-phase constructor.
-// -----------------------------------------------------------------------------
-//
-CMusTsyPropertyMonitor* CMusTsyPropertyMonitor::NewL( RMobilePhone& aPhone )
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::NewL" )
-    CMusTsyPropertyMonitor* self = new (ELeave) CMusTsyPropertyMonitor(aPhone);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::NewL" )
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// C++ destructor.
-// -----------------------------------------------------------------------------
-//
-CMusTsyPropertyMonitor::~CMusTsyPropertyMonitor()
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::~CMusTsyPropertyMonitor" )    
-    Cancel();
-    delete iConferenceMonitor;
-    delete iClirMonitor;
-    iCallMonitorArray.ResetAndDestroy();
-    iLine.Close();
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::~CMusTsyPropertyMonitor" )
-    }
-
-// -----------------------------------------------------------------------------
-// Symbian second-phase constructor.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::ConstructL()
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::ConstructL" )
-    CActiveScheduler::Add(this);
-    User::LeaveIfError( iLine.Open( iPhone, KMmTsyVoice1LineName() ) );
-    iConferenceMonitor = CMusCallConferenceMonitor::NewL(
-                                                iPhone,iLine,iCallMonitorArray);
-    
-    if (MultimediaSharingSettings::PrivacySetting())
-        {
-        iClirMonitor = CMusClirMonitor::NewL();
-        }
-    
-    User::LeaveIfError( iPropertyEvent.Attach(
-                                KPSUidCtsyCallInformation,
-                                KCTsyCallState ) );
-    iPropertyEvent.Subscribe( iStatus );    
-    SetActive();
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::ConstructL" )
-    }
-
-// -----------------------------------------------------------------------------
-// C++ constructor.
-// -----------------------------------------------------------------------------
-//
-CMusTsyPropertyMonitor::CMusTsyPropertyMonitor(RMobilePhone& aPhone)
-    : CActive( EPriorityNormal ),iPhone(aPhone)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::RunL()
-// Implemented for CActive.It will be called any NotifyMobileLineStatusChange
-// Event happens.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::RunL()
-    {
-    MUS_LOG( "mus: [MUSAO] -> CMusTsyPropertyMonitor::RunL" )
-    // subscribe , so that we dont miss any events.
-    iPropertyEvent.Subscribe( iStatus );    
-    SetActive();
-    TInt value = EPSCTsyCallStateUninitialized;
-    User::LeaveIfError(iPropertyEvent.Get( value )); 
-    MUS_LOG1( "mus: [MUSAO]  iTsyCallMonitor->CallState = %d",value )        
-    switch(value)
-        {   
-            case EPSCTsyCallStateNone:                 
-                 SetStateL(NMusSessionInformationApi::ENoCall);
-                 // Sometimes disconnected call goes stright to this state
-                 // so we have to call this function to remove call monitors.
-                 RemoveAllCallMonitor();
-                 break;                
-            case EPSCTsyCallStateDisconnecting:                 
-            case EPSCTsyCallStateAnswering:                 
-            case EPSCTsyCallStateConnected:                                             
-            case EPSCTsyCallStateHold:                                    
-                  // in all above states if multible call exist then 
-                 // we have to find all the calls state and do accordingly.
-                 MonitorCallL(); 
-                 break;
-            default:
-                 MUS_LOG( "mus: [MUSAO]  Undesired CallState " )   
-                 break;              
-        }    
-    MUS_LOG( "mus: [MUSAO] <- CMusTsyPropertyMonitor::RunL" )
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::DoCancel()
-// Implemented for CActive.
-// Will be called when Cancel() method is called.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::DoCancel()
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::DoCancel" )
-    iPropertyEvent.Cancel();
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::DoCancel" )
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::RunError( TInt aError )
-// Implemented for CActive.
-// Will be called automatically by framework when RunL Leaves.
-// -----------------------------------------------------------------------------
-//
-TInt CMusTsyPropertyMonitor::RunError( TInt aError )
-    {
-    MUS_LOG1( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::RunError = %d", aError )    
-    aError = KErrNone; // Just to avoid compilation warnings. Dunno what we do.
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::RunError" )
-    return aError;    
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::AddCallMonitorL( TName aCallName )
-// Adds new call monitor if the call is not monitored already.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::AddCallMonitorL(TName& aCallName) 
-    {
-    MUS_LOG_TDESC( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::AddCallMonitorL"\
-                                                                   ,aCallName )
-    TBool isCallExist =  EFalse;
-    for ( TInt i = 0; i < iCallMonitorArray.Count() && !isCallExist; i++ )
-        {             
-        if( iCallMonitorArray[i]->IsEqual( aCallName ) )
-            {
-            isCallExist = ETrue;
-            }
-        }
-    MUS_LOG1( "mus: [MUSAO]  Call Exist = %d ",isCallExist )
-    if( !isCallExist ) 
-        {
-        if ( iClirMonitor )
-            {
-            //Start async reading of CLIR from phone settings
-            iClirMonitor->ReadClir();
-            }
-        
-        CMusCallMonitor* callMonitor = CMusCallMonitor::NewL( aCallName,
-                                                              IsPttCallExist() );   
-        CleanupStack::PushL( callMonitor );
-        iCallMonitorArray.AppendL( callMonitor );
-        CleanupStack::Pop( callMonitor );
-             callMonitor->StartMonitorL(iLine, *this);       
-        }
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::AddCallMonitorL" )
-    }
-    
-    
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::RemoveCallEventMonitorL( TName aCallName ) 
-// Remove the Call Monitor if it exist in array.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::RemoveCallMonitor( TName& aCallName ) 
-    {
-    MUS_LOG_TDESC( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::RemoveCallMonitor "
-                                                                    ,aCallName )
-    for ( TInt i = 0; i < iCallMonitorArray.Count(); i++ )
-        {
-        if( iCallMonitorArray[i]->IsEqual( aCallName ) )
-            {            
-            delete iCallMonitorArray[i];
-            iCallMonitorArray.Remove(i);                      
-            break;
-            }
-        }     
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::RemoveCallMonitor" )
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::RemoveCallEventMonitorL( TName aCallName ) 
-// Remove the Call Monitor if it exist in array.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::RemoveAllCallMonitor() 
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::RemoveAllCallMonitor " )
-    iCallMonitorArray.ResetAndDestroy();     
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::RemoveAllCallMonitor" )
-    }
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::IsPTTCallExist() 
-// Remove the Call Monitor if it exist in array.
-// -----------------------------------------------------------------------------
-//
-TBool CMusTsyPropertyMonitor::IsPttCallExist() 
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::IsPTTCallExist")        
-    TBool exist = EFalse;
-    /*
-    TInt val = 0;
-    TInt err = RProperty::Get(KPSUidCtsyCallInformation,KCTsyKodiakPtt,val );
-    MUS_LOG2( "mus: [MUSAO] PTTCallValue = val  Error = %d",val,err )    
-    if(!err && val== EPSCTsyKodiakPttActive )
-        {        
-        exist = ETrue;
-        }
-    else
-        {
-        // if there is an error dont know what to do. 
-        // there could be cases like KodiakPTT is not supported
-        // So considering there is no PttCall.
-        exist = EFalse;
-        }    
-    */
-    MUS_LOG1( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::IsPTTCallExist = %d",\
-                                                                        exist )
-    return exist;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::IsPTTCallExist() 
-// Remove the Call Monitor if it exist in array.
-// -----------------------------------------------------------------------------
-//
-
-// Enable the below line if Kodiak Ptt has to be monitered
-/*
-void CMusTsyPropertyMonitor::PttCallEventOccuredL( TPSCTsyKodiakPtt& aVal)
-    {
-    MUS_LOG1( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::PttCallEventOccured\
-                                                                   = %d",aVal)
- 
-    
-    if (iCallMonitorArray.Count()>0)
-        {
-        if( aVal == EPSCTsyKodiakPttNotActive && iCallMonitorArray.Count()==1)
-            {                                
-            iCallMonitorArray[0]->StartMonitorL(iLine);                    
-            }
-        else 
-            {                      
-            iCallMonitorArray[0]->StopMonitorL();                            
-            }        
-        }
-    else
-        {
-        // No CS call. Dont care this event.    
-        }    
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::PttCallEventOccured" )
-    }
-*/
-
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::SetStateL( TInt aError )
-// Sets the Call State to Property
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::SetStateL(
-                                   NMusSessionInformationApi::TMusCallEvent aVal)
-    {
-    MUS_LOG1( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::SetStateL,aVal %d",aVal )
-    TInt currentVal;
-    User::LeaveIfError(RProperty::Get( NMusSessionInformationApi::KCategoryUid,
-                     NMusSessionInformationApi::KMusCallEvent,currentVal));
-    if(currentVal != (TInt)aVal)
-        {
-        User::LeaveIfError(RProperty::Set( 
-                                        NMusSessionInformationApi::KCategoryUid,
-                                        NMusSessionInformationApi::KMusCallEvent,
-                                        aVal ));    
-        }
-    else
-        {
-         // No point of reporting it .
-        }    
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::SetStateL" )    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::MonitorCallL() 
-// Monitors the call and if needed adds/removes  call monitor.
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::MonitorCallL()
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::MonitorCallL")
-    TInt callCount;
-    iLine.EnumerateCall(callCount);
-    MUS_LOG1( "mus: [MUSAO]  -> callCount = %d",callCount)    
-    RLine::TCallInfo callInfo;
-    for(TInt i=0;i<callCount;i++)
-        {        
-        iLine.GetCallInfo(i,callInfo);
-        MUS_LOG1( "mus: [MUSAO]  Call index = %d",i)
-        MUS_LOG_TDESC("mus: [MUSAO]  Call Name = ",callInfo.iCallName);
-        MUS_LOG1( "mus: [MUSAO]  Call Status = %d",callInfo.iStatus );         
-        if(callInfo.iStatus == RCall::EStatusIdle || 
-           callInfo.iStatus == RCall::EStatusHangingUp)
-            {
-            RemoveCallMonitor(callInfo.iCallName);        
-            }
-        else if(callInfo.iStatus == RCall::EStatusConnected ||
-                callInfo.iStatus == RCall::EStatusAnswering)
-            {
-            AddCallMonitorL(callInfo.iCallName); 
-            }                                  
-        }
-    // Sometimes when call get disconnected then call object disappears.So
-    // check the call state or open the call , if there is an error or undesired
-    // call state , remove that callmonitor from array. 
-    RemoveUnUsedCallMonitors();    
-
-    if(iCallMonitorArray.Count() > 1)
-        {                
-        // it is already multicall so atleast one should be hold.
-        // so set the state first to hold
-        SetStateL(NMusSessionInformationApi::ECallHold);               
-        // still we dont know here about conference state so 
-        // let the conference call monitor decide .
-        iConferenceMonitor->SetStateL(); 
-        }
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::MonitorCallL")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::CallStatusL() 
-// Somehow Line is not returning correct call info when call disconnected from
-// remote,So open the call and ask call status
-// -----------------------------------------------------------------------------
-//
-RMobileCall::TMobileCallStatus CMusTsyPropertyMonitor::CallStatus(const TDesC& aCallName)
-    {
-    MUS_LOG_TDESC( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::CallStatusL",aCallName)
-    RMobileCall call;
-    TInt error = call.OpenExistingCall( iLine, aCallName );      
-    RMobileCall::TMobileCallStatus callStatus = RMobileCall::EStatusUnknown;
-    if(error==KErrNone)
-        {
-        // if error occur here , then leave the status to default.
-        call.GetMobileCallStatus(callStatus);
-        }    
-    call.Close();
-    MUS_LOG1( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::CallStatusL = %d",callStatus)
-    return callStatus;
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::RemoveUnUsedCallMonitors() 
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor:: RemoveUnUsedCallMonitors()
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::RemoveUnUsedCallMonitors" )          
-    for ( TInt i = 0; i < iCallMonitorArray.Count(); i++ )
-        {
-        if( CallStatus( iCallMonitorArray[i]->Name() ) == 
-                                      RMobileCall::EStatusUnknown )
-            {
-            MUS_LOG_TDESC("mus: [MUSAO]  Removing = ",iCallMonitorArray[i]->Name());
-            delete iCallMonitorArray[i];            
-            iCallMonitorArray[i] = NULL;
-            iCallMonitorArray.Remove(i); 
-            // this lowers the call monitor index by one , so lower the i by one too
-            i--;     
-            }    
-        }    
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::RemoveUnUsedCallMonitors" )
-    }
-
-// -----------------------------------------------------------------------------
-// CMusTsyPropertyMonitor::NotifyCallStateChanged() 
-// -----------------------------------------------------------------------------
-//
-void CMusTsyPropertyMonitor::NotifyCallStateChanged(NMusSessionInformationApi::TMusCallEvent aVal, TName& aCallName)
-    {
-    MUS_LOG( "mus: [MUSAO]  -> CMusTsyPropertyMonitor::NotifyCallStateChanged" )
-              
-    if(aVal == NMusSessionInformationApi::ENoCall )
-           {
-           // Call has been disconnected,
-           // Remove call monitor from array
-           RemoveCallMonitor(aCallName);
-           if( iCallMonitorArray.Count() == 0 )
-               {
-               SetStateL(NMusSessionInformationApi::ENoCall);
-               }
-           else if( iCallMonitorArray.Count() == 1)
-               {
-               // Only one call left, set its state to be ECallConnected here
-               // The real state of the call will be calculated by CMusCallMonitorBase
-               iCallMonitorArray[0]->SetStateL(NMusSessionInformationApi::ECallConnected);
-               }
-           else
-               {
-               // it is already multicall so atleast one should be hold.
-               // so set the state first to hold
-               SetStateL(NMusSessionInformationApi::ECallHold);               
-               // still we dont know here about conference state so 
-               // let the conference call monitor decide .
-               iConferenceMonitor->SetStateL(); 
-               }
-           }
-    
-    MUS_LOG( "mus: [MUSAO]  <- CMusTsyPropertyMonitor::NotifyCallStateChanged" )
-    }
-// End of file