coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp
changeset 46 eea20ed08f4b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp	Tue Jun 29 10:40:11 2010 +0300
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2005-2010 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:
+ * CSysApCenRepOfflineModeObserver is a an observer for the Offline Mode central Repository key.
+ * This class handles the changes to the offline mode changes done from Power Menu or Control Panel 
+ *
+ */
+
+#include "sysapcenrepofflinemodeobserver.h"
+#include "CoreApplicationUIsSDKCRKeys.h"
+#include "SysAp.hrh"
+
+#ifdef _DEBUG
+#include <e32debug.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::NewL( MSysApOfflineModeController& )
+// Creates an instance of CSysApCenRepOfflineModeObserver and returns
+// ----------------------------------------------------------------------------
+
+CSysApCenRepOfflineModeObserver* CSysApCenRepOfflineModeObserver::NewL( 
+                    MSysApOfflineModeController& aSysApOfflineModeController )
+    {
+    TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::NewL") );
+    CSysApCenRepOfflineModeObserver* self = 
+    new (ELeave) CSysApCenRepOfflineModeObserver(aSysApOfflineModeController);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( MSysApOfflineModeController& )
+// ----------------------------------------------------------------------------
+
+CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver( 
+                MSysApOfflineModeController& aSysApOfflineModeController  )
+            : iSysApOfflineModeController( aSysApOfflineModeController )
+    {
+    TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::CSysApCenRepOfflineModeObserver" ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver()
+// ----------------------------------------------------------------------------
+
+CSysApCenRepOfflineModeObserver::~CSysApCenRepOfflineModeObserver()
+    {
+    TRACES( RDebug::Printf("~CSysApCenRepOfflineModeObserver" ) );
+    if( iOfflineModeHandler )
+    {
+    iOfflineModeHandler->StopListening();
+    }
+    delete iOfflineModeHandler;
+    delete iOfflineCenRep;
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::ConstructL()
+// ----------------------------------------------------------------------------
+
+void CSysApCenRepOfflineModeObserver::ConstructL()
+    {
+    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::ConstructL: trying CRepository::NewL(KCRUidCoreApplicationUIs)"));
+    
+    iOfflineCenRep = CRepository::NewL( KCRUidCoreApplicationUIs );
+    
+    iOfflineModeHandler =
+    CCenRepNotifyHandler::NewL( *this,
+    *iOfflineCenRep,
+    CCenRepNotifyHandler::EIntKey,
+    KCoreAppUIsNetworkConnectionAllowed );
+    iOfflineModeHandler->StartListeningL();    
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::HandleNotifyInt()
+// Handles the changes to offline mode state
+// ----------------------------------------------------------------------------
+
+void CSysApCenRepOfflineModeObserver::HandleNotifyInt( TUint32 aId, TInt aNewValue  )
+    {
+    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt(), aId=0x%x, aNewValue=%d", aId, aNewValue));    
+    if ( aId == KCoreAppUIsNetworkConnectionAllowed )
+    {
+        if( aNewValue == ECoreAppUIsNetworkConnectionNotAllowed )
+        {
+        // Offline mode enabled. Go Offline
+        TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Enabled"));
+        // Ignore any leave because it will have already been handled by showing an 
+        // error notification to the user
+        TRAP_IGNORE(iSysApOfflineModeController.SwitchFromOnlineToOfflineModeL());
+        }
+    else if( aNewValue == ECoreAppUIsNetworkConnectionAllowed )
+    {
+        // Offline mode disabled. Go Online
+        TRACES( RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Offline mode Disabled"));
+        // Ignore any leave because it will have already been handled by showing an 
+        // error notification to the user
+        TRAP_IGNORE(iSysApOfflineModeController.GoOnlineIfOkL());
+    }
+    else
+    {		
+        // Any other value is invalid	
+        TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyInt() Invalid Value %d", aNewValue));
+    }
+    }
+    }
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::HandleNotifyError()
+// ----------------------------------------------------------------------------
+
+void CSysApCenRepOfflineModeObserver::HandleNotifyError( TUint32, TInt, CCenRepNotifyHandler* )
+    {
+    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::HandleNotifyError()"));
+    // Nothing to do if start listening leaves
+    TRAP_IGNORE(iOfflineModeHandler->StartListeningL());    
+    }
+
+
+
+// ----------------------------------------------------------------------------
+// CSysApCenRepOfflineModeObserver::IsOffline()
+// Fetches the Cen Rep for Offline mode and 
+// Return true if Offline mode is enabled, false otherwise
+// ----------------------------------------------------------------------------
+TBool CSysApCenRepOfflineModeObserver::IsOffline() const
+    {
+    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline"));
+    TBool nwConnAllowed = ETrue;
+    iOfflineCenRep->Get(KCoreAppUIsNetworkConnectionAllowed, nwConnAllowed);
+    TRACES(RDebug::Printf("CSysApCenRepOfflineModeObserver::IsOffline returns %d",!nwConnAllowed));
+    return !nwConnAllowed;
+    }