diff -r 951aeeb3da43 -r eea20ed08f4b coreapplicationuis/SysAp/Src/CenRepObservers/sysapcenrepofflinemodeobserver.cpp --- /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 +#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; + }