mmsharing/mmshavailability/src/musavanetworkavailability.cpp
changeset 0 f0cf47e981f9
child 31 33a5d2bbf6fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshavailability/src/musavanetworkavailability.cpp	Thu Dec 17 08:44:37 2009 +0200
@@ -0,0 +1,214 @@
+/*
+* 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:   Provide interface for the client requestin availability class.
+*
+*/
+
+
+
+#include "musavanetworkavailability.h"
+#include "musavaavailabilityobserver.h"
+#include "musavasettingsimp.h"
+#include "musavanetworkavailability.h"
+#include "mussesseioninformationapi.h"
+#include "musavaobserver.h"
+#include "musavasharedobject.h"
+#include "muslogger.h"
+#include "musavacalleventmonitor.h"
+
+#include <e32base.h>
+
+
+CMusAvaNetworkAvailability* CMusAvaNetworkAvailability::NewL(
+    MMusAvaAvailabilityObserver& aObserver,
+    CMusAvaSettingsImp& aSettings )
+    {
+    CMusAvaNetworkAvailability* self =
+        CMusAvaNetworkAvailability::NewLC(
+            aObserver,
+            aSettings );
+
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+CMusAvaNetworkAvailability* CMusAvaNetworkAvailability::NewLC(
+    MMusAvaAvailabilityObserver& aObserver,
+    CMusAvaSettingsImp& aSettings )
+    {
+    CMusAvaNetworkAvailability* self =
+        new( ELeave ) CMusAvaNetworkAvailability(
+            aObserver,
+            aSettings );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+CMusAvaNetworkAvailability::~CMusAvaNetworkAvailability()
+    {
+    if ( iPhoneStatus )
+        {
+        iPhoneStatus->Cancel();
+        }
+    delete iPhoneStatus;
+    iPhoneStatus = NULL;
+    }
+
+
+CMusAvaNetworkAvailability::CMusAvaNetworkAvailability(
+    MMusAvaAvailabilityObserver& aObserver,
+    CMusAvaSettingsImp& aSettings )
+    :CMusAvaAvailability( aObserver ),
+    iSettings( aSettings )
+    {
+    }
+
+
+void CMusAvaNetworkAvailability::ConstructL()
+    {
+    iPhoneStatus = CMusAvaCallEventMonitor::NewL( *this );
+    }
+
+
+// -------------------------------------------------------------------------
+//  Starts the loopy execution.
+// -------------------------------------------------------------------------
+//
+void CMusAvaNetworkAvailability::DoExecuteL()
+    {
+     MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::\
+     Execute()" )
+
+    // read the current value and subscribe for changes
+    // that's done in RunL    
+    switch (iPhoneStatus->CallStatusL())
+        {
+            case NMusSessionInformationApi::ECallConnected:                 
+                {
+                 TBuf<CMusAvaCallEventMonitor::KMusTelNumberMaxLength> telNumber;
+                 iPhoneStatus->GetTelNumberL( telNumber );
+                 iSettings.SetTelNumberL( telNumber );
+                 iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
+                 iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() );
+        
+                 SetState( MMusAvaObserver::EMusAvaStatusAvailable );
+                 break;
+                }      
+            case NMusSessionInformationApi::ECallHold:  
+                 SetState( MMusAvaObserver::EMusAvaStatusCallOnHold );
+                 break;
+            case NMusSessionInformationApi::EConferenceCall:
+                 SetState( MMusAvaObserver::EMusAvaStatusConferenceCall );
+                 break;
+            case NMusSessionInformationApi::ENoCall:
+                 SetState( MMusAvaObserver::EMusAvaStatusNoCall );
+                 break;
+            default:
+                 SetState( MMusAvaObserver::EMusAvaStatusNoCall );
+                 break;
+        }
+
+    // subscribe for the future changes.
+    iPhoneStatus->StartMonitoringL();
+
+    MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::\
+                ExecutePatternL()" )
+    }
+
+
+void CMusAvaNetworkAvailability::Stop()
+    {
+    iPhoneStatus->Cancel();
+    SetState( MMusAvaObserver::EMusAvaStatusNotExecuted );
+    }
+
+
+MMusAvaObserver::TAvailabilityName CMusAvaNetworkAvailability::Name()
+    {
+    return MMusAvaObserver::EMusAvaNameNetworkStatus;
+    }
+
+// -------------------------------------------------------------------------
+//  This function is called when a cs call is connected.
+// -------------------------------------------------------------------------
+//
+void CMusAvaNetworkAvailability::CallConnectedL( const TDesC& aTelNumber )
+    {
+    MUS_LOG( "mus: [MUSAVA]  \
+                -> CMusAvaNetworkAvailability::CallConnectedL()" )
+    // try to resolve to contact information of the remote host
+
+    iSettings.SetTelNumberL( aTelNumber );
+    iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
+    iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() );
+    SetState( MMusAvaObserver::EMusAvaStatusAvailable );
+
+    MUS_LOG( "mus: [MUSAVA]  \
+                <- CMusAvaNetworkAvailability::CallConnectedL()" )
+    }
+
+
+// -------------------------------------------------------------------------
+//  This function is called when a cs call goes into a state
+//  that is not connected.
+// -------------------------------------------------------------------------
+//
+void CMusAvaNetworkAvailability::ConferenceCallL()
+    {
+    MUS_LOG( "mus: [MUSAVA]  \
+            -> CMusAvaNetworkAvailability::ConferenceCallL()" )
+    //Report line status
+    SetState( MMusAvaObserver::EMusAvaStatusConferenceCall );
+    MUS_LOG( "mus: [MUSAVA]  \
+                <- CMusAvaNetworkAvailability::ConferenceCallL()" )
+    }
+
+
+// -------------------------------------------------------------------------
+//  This function is called when a cs call goes hold
+// -------------------------------------------------------------------------
+//
+void CMusAvaNetworkAvailability::CallHoldL( const TDesC& aTelNumber )
+    {
+    MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::CallHoldL()" )
+    //Report line status
+    iSettings.SetTelNumberL( aTelNumber );
+    iSettings.SetCallDirection( iPhoneStatus->CallDirectionL() );
+    iSettings.SetCallPrivacy( iPhoneStatus->CallPrivacyL() );
+    SetState( MMusAvaObserver::EMusAvaStatusCallOnHold );
+    MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::CallHoldL()" )
+    }
+
+
+// -------------------------------------------------------------------------
+//  This function is called when a cs call goes into a state
+//  that is not connected.
+// -------------------------------------------------------------------------
+//
+void CMusAvaNetworkAvailability::NoActiveCallL()
+    {
+    MUS_LOG( "mus: [MUSAVA]  -> CMusAvaNetworkAvailability::NoActiveCallL()" )
+
+    iSettings.SetTelNumberL( KNullDesC() );
+
+    //Report line status
+    //Availability status
+    SetState( MMusAvaObserver::EMusAvaStatusNoCall );
+
+    MUS_LOG( "mus: [MUSAVA]  <- CMusAvaNetworkAvailability::NoActiveCallL()" )
+    }