videofeeds/scheduleddlplugin/src/iptvphoneregistrationwatcher.cpp
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/scheduleddlplugin/src/iptvphoneregistrationwatcher.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    This is helper class which observes whether the phone is on*
+*/
+
+
+
+
+#include "IptvDebug.h"
+#include <mmtsy_names.h>
+
+#include "iptvphoneregistrationwatcher.h"
+#include "iptvphoneregistrationobserver.h"
+
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::CIptvPhoneRegistrationWatcher
+// ---------------------------------------------------------------------------
+//
+CIptvPhoneRegistrationWatcher::CIptvPhoneRegistrationWatcher() : CActive( EPriorityNormal )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::ConstructL()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvPhoneRegistrationWatcher::ConstructL");
+
+    CActiveScheduler::Add(this);
+
+	User::LeaveIfError( iTelServer.Connect() );
+    User::LeaveIfError( iMobilePhone.Open( iTelServer, KMmTsyPhoneName ) );
+
+    StartObserving();
+
+    IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvPhoneRegistrationWatcher::ConstructL");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::NewL
+// ---------------------------------------------------------------------------
+//
+CIptvPhoneRegistrationWatcher* CIptvPhoneRegistrationWatcher::NewL()
+    {
+    CIptvPhoneRegistrationWatcher* self = CIptvPhoneRegistrationWatcher::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::NewLC
+// ---------------------------------------------------------------------------
+//
+CIptvPhoneRegistrationWatcher* CIptvPhoneRegistrationWatcher::NewLC()
+    {
+    CIptvPhoneRegistrationWatcher* self = new( ELeave ) CIptvPhoneRegistrationWatcher;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::~CIptvPhoneRegistrationWatcher
+// ---------------------------------------------------------------------------
+//
+CIptvPhoneRegistrationWatcher::~CIptvPhoneRegistrationWatcher()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvPhoneRegistrationWatcher::~CIptvPhoneRegistrationWatcher");
+
+    Cancel();
+    iObservers.Reset();
+    iMobilePhone.Close();
+    iTelServer.Close();
+
+    IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvPhoneRegistrationWatcher::~CIptvPhoneRegistrationWatcher");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::AddObserverL
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::AddObserverL( MPhoneRegistrationWatcherObserver* aObserver )
+    {
+    iObservers.AppendL( aObserver );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::RemoveObserver
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::RemoveObserver( MPhoneRegistrationWatcherObserver* aObserver )
+    {
+    TInt index = iObservers.Find( aObserver );
+    if (index != KErrNotFound)
+        {
+        iObservers.Remove( index );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::IsOnHomeNetwork
+// ---------------------------------------------------------------------------
+//
+TBool CIptvPhoneRegistrationWatcher::IsOnHomeNetwork()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvPhoneRegistrationWatcher::IsOnHomeNetwork");
+
+    TBool retVal = EFalse;
+
+	TRequestStatus status;
+	RMobilePhone::TMobilePhoneRegistrationStatus regStatus;
+	iMobilePhone.GetNetworkRegistrationStatus( status, regStatus );
+	User::WaitForRequest( status );
+
+	if (status.Int() == KErrNone && regStatus == RMobilePhone::ERegisteredOnHomeNetwork)
+		{
+		retVal = ETrue;
+        IPTVLOGSTRING_HIGH_LEVEL("CIptvPhoneRegistrationWatcher::IsOnHomeNetwork, on home network");
+		}
+
+    IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvPhoneRegistrationWatcher::IsOnHomeNetwork");
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::StartObserving
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::StartObserving()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvPhoneRegistrationWatcher::StartObserving");
+
+    if (!IsActive())
+        {
+        iMobilePhone.NotifyNetworkRegistrationStatusChange( iStatus, iRegStatus );
+        SetActive();
+        }
+
+    IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvPhoneRegistrationWatcher::StartObserving");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::RunL
+//
+// From class CActive.
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::RunL()
+    {
+    IPTVLOGSTRING_HIGH_LEVEL(">>> CIptvPhoneRegistrationWatcher::RunL");
+
+    //  Get the current state and inform observers
+    if (iStatus.Int() != KErrNone)
+        {
+        //  Inform observers about error
+        IPTVLOGSTRING2_HIGH_LEVEL("CIptvPhoneRegistrationWatcher::RunL, error = %d", iStatus.Int());
+        }
+    else
+        {
+        if (iRegStatus != RMobilePhone::ERegisteredOnHomeNetwork)
+            {
+            IPTVLOGSTRING_HIGH_LEVEL("CIptvPhoneRegistrationWatcher::RunL, not on home network");
+            }
+        else
+            {
+            IPTVLOGSTRING_HIGH_LEVEL("CIptvPhoneRegistrationWatcher::RunL, on home network");
+            }
+
+        //  Inform observers the home network state
+        for (TInt i = 0; i < iObservers.Count(); i++)
+            {
+            iObservers[i]->OnHomeNetwork(
+                iRegStatus == RMobilePhone::ERegisteredOnHomeNetwork );
+            }
+
+        }
+
+    StartObserving();
+
+    IPTVLOGSTRING_HIGH_LEVEL("<<< CIptvPhoneRegistrationWatcher::RunL");
+    }
+
+// ---------------------------------------------------------------------------
+// CIptvPhoneRegistrationWatcher::DoCancel
+// 
+// From class CActive.
+// ---------------------------------------------------------------------------
+//
+void CIptvPhoneRegistrationWatcher::DoCancel()
+    {
+    iMobilePhone.CancelAsyncRequest( EMobilePhoneNotifyNetworkRegistrationStatusChange );
+    }
+