diff -r 000000000000 -r 094583676ce7 wvuing/IMPSAlwaysOnlinePlugin/src/CPEngAlwaysOnlinePlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSAlwaysOnlinePlugin/src/CPEngAlwaysOnlinePlugin.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,252 @@ +/* +* Copyright (c) 2004 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: Implements the CAlwaysOnlineEComInterface interface +* +*/ + +// INCLUDE FILES +#include "CPEngAlwaysOnlinePlugin.h" +#include "CIMPSAlwaysOnlinePluginImp.h" +#include "IMPSCommonUiDebugPrint.h" +#include "ChatNGCommonUIDs.h" +#include "CPEngAOCallObserver.h" +#include "CIMPSReconnectNoteHandler.h" +#include "IMPSUIDDefs.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "impscommonuibuilddefinitions.h" +#include "cimpsresourcereader.h" + +CPEngAlwaysOnlinePlugin::CPEngAlwaysOnlinePlugin() + : CAlwaysOnlineEComInterface() + { + } + +// ---------------------------------------------------------------------------- +// CPEngAlwaysOnlinePlugin::ConstructL +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------- +// +void CPEngAlwaysOnlinePlugin::ConstructL() + { + IMPSCUI_DP_FUNC_ENTER( "ConstructL" ); + + FeatureManager::InitializeLibL(); + + CleanupStack::PushL( TCleanupItem( CleanupFeatureManager, this ) ); + + if ( FeatureManager::FeatureSupported( KFeatureIdIm ) ) + { + iIMAOPlugin = CIMPSAlwaysOnlinePluginImp::NewL(); + + CIMPSResourceReader* resourceReader = CIMPSResourceReader::NewLC(); + TBool showRoamingWarning = resourceReader->IsRoamingWarningRequiredL(); + if ( showRoamingWarning ) + { + iIMAOPlugin->SetShowRoamingWarning( showRoamingWarning ); + } + CleanupStack::PopAndDestroy( resourceReader ); + } + + CleanupStack::PopAndDestroy(); // CleanupFeatureManager + + IMPSCUI_DP_FUNC_DONE( "ConstructL" ); + } + +// Destructor +CPEngAlwaysOnlinePlugin::~CPEngAlwaysOnlinePlugin() + { + delete iIMAOPlugin; + } + +// ---------------------------------------------------------------------------- +// CPEngAlwaysOnlinePlugin::NewL +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +CPEngAlwaysOnlinePlugin* CPEngAlwaysOnlinePlugin::NewL() + { + CPEngAlwaysOnlinePlugin* self = new ( ELeave ) CPEngAlwaysOnlinePlugin(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CPEngAlwaysOnlinePlugin::CleanupFeatureManager +// Two-phased constructor. +// ---------------------------------------------------------------------------- +// +void CPEngAlwaysOnlinePlugin::CleanupFeatureManager( TAny* /*aPtr*/ ) + { + FeatureManager::UnInitializeLib(); + } +// --------------------------------------------------------- +// CPEngAlwaysOnlinePlugin::HandleServerCommandL +// Handles the events coming from the Always Online Server +// --------------------------------------------------------- +// +TAny* CPEngAlwaysOnlinePlugin::HandleServerCommandL( TInt aCommand, + TDesC8* /*aParameters*/ ) + { + IMPSCUI_DP( D_IMPSCUI_LIT( "CPEngAlwaysOnlinePlugin::HandleServerCommandL [%d]" ), aCommand ); + TInt err( KErrNone ); + + switch ( aCommand ) + { + case EAOManagerPluginStart: + { + //do your plugin start here + if ( iIMAOPlugin ) + { + iIMAOPlugin->StartPluginL(); + } + break; + } + case EAOManagerPluginStop: + { + // we should make a logout here + if ( iIMAOPlugin ) + { + iIMAOPlugin->StopPlugin(); + } + break; + } + case EAOManagerStartedRoaming: + { + // tell the plugin that we started + if ( iIMAOPlugin ) + { + iIMAOPlugin->SetRoaming( ETrue ); + } + + // Show warning, if variated so + CIMPSResourceReader* resourceReader = CIMPSResourceReader::NewLC(); + TBool showRoamingWarning = resourceReader->IsRoamingWarningRequiredL(); + CleanupStack::PopAndDestroy( resourceReader ); + + if ( showRoamingWarning ) + { + User::LeaveIfError( RProperty::Set( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoaming, ETrue ) ); + + if ( iIMAOPlugin ) + { + // Dont do any action if login type is Auto in home n/w + if ( !iIMAOPlugin->IsLoginAutoInHomeNW() ) + { + TBool roamingDlgShown( EFalse ); + User::LeaveIfError( RProperty::Get( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoamingDlgShown, roamingDlgShown ) ); + + if ( !roamingDlgShown && iIMAOPlugin->IsUserLoggedInL() ) + { + iIMAOPlugin->HandleRoamingL(); + + // Set the property + roamingDlgShown = ETrue; + User::LeaveIfError( RProperty::Set( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoamingDlgShown, roamingDlgShown ) ); + } + } + } + } + else + { + err = KErrNotSupported; + } + + break; + } + case EAOManagerStoppedRoaming: + { + // tell the plugin that we are back in home network + if ( iIMAOPlugin ) + { + iIMAOPlugin->SetRoaming( EFalse ); + } + + // If warning is to be shown, then Set the roaing property + CIMPSResourceReader* resourceReader = CIMPSResourceReader::NewLC(); + TBool showRoamingWarning = resourceReader->IsRoamingWarningRequiredL(); + CleanupStack::PopAndDestroy( resourceReader ); + + if ( showRoamingWarning ) + { + User::LeaveIfError( RProperty::Set( KIMPSConnUiTemporaryUid, EIMPSSharedKeysRoaming, EFalse ) ); + } + else + { + err = KErrNotSupported; + } + break; + } + case EAOManagerNWOpsAllowed: + { + // tell the implementation part that the network ops are allowed + if ( iIMAOPlugin ) + { + iIMAOPlugin->SetNetworkOpsAllowed( ETrue ); + } + break; + } + case EAOManagerNWOpsNotAllowed: + { + // tell the implementation part that the network ops are disallowed + if ( iIMAOPlugin ) + { + iIMAOPlugin->SetNetworkOpsAllowed( EFalse ); + } + break; + } + case EAOManagerSuicideQuery: + { + err = ETrue; + if ( iIMAOPlugin ) + { + err = !iIMAOPlugin->CheckPluginNeed(); + } + break; + } + default: + { + err = KErrNotSupported; + break; + } + } + + return ( TAny* )err; + } + +// __________________________________________________________________________ +// Exported proxy for instantiation method resolution +// Use the plugin UID and Implementation factory method +// as a pair for ECom instantiation. +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KIMPSALWAYSONLINEUID3, CPEngAlwaysOnlinePlugin::NewL ) + }; + +// Give the table to the caller +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / sizeof( ImplementationTable[0] ); + return ImplementationTable; + } +