--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/UISrc/CCnUiClientGroupUiNotifyHandler.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,340 @@
+/*
+* 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: Client group remote notify handler.
+*
+*/
+
+
+// INCLUDE FILES
+#include <E32std.h>
+#include "CCnUiClientGroupUiNotifyHandler.h"
+#include "MCnUiUiFacade.h"
+#include "CnUiCommon.hrh"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCnUiClientGroupUiNotifyHandler* CCnUiClientGroupUiNotifyHandler::NewL(
+ TIMPSConnectionClient aClient )
+ {
+ CCnUiClientGroupUiNotifyHandler* self =
+ new ( ELeave ) CCnUiClientGroupUiNotifyHandler( aClient );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// Destructor
+CCnUiClientGroupUiNotifyHandler::~CCnUiClientGroupUiNotifyHandler()
+ {
+ CancelCurrentQuery();
+ delete iGroupChannel;
+ delete iBrandedResourceFileName;
+ }
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCnUiClientGroupUiNotifyHandler::CCnUiClientGroupUiNotifyHandler( TIMPSConnectionClient aClient )
+ : iClient( aClient )
+ {
+ }
+
+
+// EPOC default constructor can leave.
+void CCnUiClientGroupUiNotifyHandler::ConstructL()
+ {
+ iGroupChannel = CCnUiGroupChannel::NewL( iClient, ECnUiRemoteUiNotificationsChannel );
+ iGroupChannel->ListenL( this );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::Handled()
+// -----------------------------------------------------------------------------
+//
+TBool CCnUiClientGroupUiNotifyHandler::Handled( TInt aRemoteUiMessage )
+ {
+ switch ( aRemoteUiMessage )
+ {
+ case ECGQActiveConnectionScheduledClose:
+ {
+ return iActiveConnectionScheduledClose;
+ }
+
+ case ECGQActiveConnectionSuppressForScheduledConnection:
+ {
+ return iActiveConnectionSuppressForScheduledConnection;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ return EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::SetHandled()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::SetHandled( TInt aRemoteUiMessage, TBool aHandled )
+ {
+ switch ( aRemoteUiMessage )
+ {
+ case ECGQActiveConnectionScheduledClose:
+ {
+ iActiveConnectionScheduledClose = aHandled;
+ break;
+ }
+
+ case ECGQActiveConnectionSuppressForScheduledConnection:
+ {
+ iActiveConnectionSuppressForScheduledConnection = aHandled;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( aHandled )
+ {
+ //some service started
+ //launch the notification if notify request is already issued
+ TInt channelMsg = KErrNotFound;
+ if ( iGroupChannel->Read( channelMsg ) == KErrNone )
+ {
+ HandleChannelMsg( iGroupChannel->GroupID(),
+ iGroupChannel->ChannelId(),
+ channelMsg );
+ }
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::HandlePresenceEventL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::HandlePresenceEventL( TIMPSPresenceServiceEvent aEvent )
+ {
+ if ( ( aEvent == EIMPSPresenceServiceOffline ) ||
+ ( aEvent == EIMPSPresenceServiceForceLogOut ) )
+ {
+ //current connection is lost ==> dismiss possibly shown queries
+ //AA side will eventually after timeout figure out the result
+ CancelCurrentQuery();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::HandleChannelMsg()
+// MCnUiGroupChannelListener
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::HandleChannelMsg( TInt /*aGroupId*/,
+ TGCChannelID /*aChannelId*/,
+ TInt aChannelMsg )
+ {
+ TRAPD( err, DoHandleChannelMsgL( aChannelMsg ) );
+ MCnUiUiFacade* tempUi = NULL;
+ TRAP( err, tempUi = CreateUiFacadeL() );
+ if ( err )
+ {
+ // if we don't get facade we just don't show anything
+ return;
+ }
+
+ delete iUi;
+ iUi = tempUi;
+
+ if ( iBrandedResourceFileName )
+ {
+ TRAP( err, iUi->SwitchResourceFileL( *iBrandedResourceFileName ) );
+ if ( err != KErrNone )
+ {
+ CActiveScheduler::Current()->Error( err );
+ }
+ }
+
+ iUi->HandleIfError( err );
+
+ delete iUi;
+ iUi = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::HandleQueryResult()
+// From MCnUiConnQueryObserver
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::HandleQueryResult( TBool aQueryAccepted )
+ {
+ TRAPD( err, ReportQueryResultL( aQueryAccepted ) );
+
+ MCnUiUiFacade* tempUi = NULL;
+ TRAP( err, tempUi = CreateUiFacadeL() );
+ if ( err )
+ {
+ // if we don't get facade we just don't show anything
+ return;
+ }
+
+ delete iUi;
+ iUi = tempUi;
+
+ if ( iBrandedResourceFileName )
+ {
+ TRAP( err, iUi->SwitchResourceFileL( *iBrandedResourceFileName ) );
+ if ( err != KErrNone )
+ {
+ CActiveScheduler::Current()->Error( err );
+ }
+ }
+
+ iUi->HandleIfError( err );
+
+ delete iUi;
+ iUi = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::ReportQueryResultL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::ReportQueryResultL( TBool aQueryAccepted )
+ {
+ if ( aQueryAccepted )
+ {
+ iGroupChannel->WriteL( ERemoteQueryAccepted );
+ }
+ else
+ {
+ iGroupChannel->WriteL( ERemoteQueryDeclined );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::CancelCurrentQuery()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::CancelCurrentQuery()
+ {
+ delete iCurrentQuery;
+ iCurrentQuery = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::DoHandleChannelMsgL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::DoHandleChannelMsgL( TInt aChannelMsg )
+ {
+ //which ever event happens in channel, clear active query
+ //==> queries are cleared when new query is issued & some client reports selection
+ CancelCurrentQuery();
+
+ //if a channel message is a known & handled query id ==> show the query
+ if ( !Handled( aChannelMsg ) )
+ {
+ return;
+ }
+
+ MCnUiUiFacade* tempUi = CreateUiFacadeL();
+
+ delete iUi;
+ iUi = tempUi;
+
+ if ( iBrandedResourceFileName )
+ {
+ iUi->SwitchResourceFileL( *iBrandedResourceFileName );
+ }
+
+ //make a proper non waiting query
+ switch ( aChannelMsg )
+ {
+ case ECGQActiveConnectionScheduledClose:
+ {
+ iCurrentQuery = iUi->QueryL( ECnUiQueryActiveConnectionScheduledClose,
+ *this );
+
+ break;
+ }
+
+ case ECGQActiveConnectionSuppressForScheduledConnection:
+ {
+ HBufC* serverName = NULL;
+ iGroupChannel->ReadL( serverName );
+ CleanupStack::PushL( serverName );
+ iCurrentQuery = iUi->QueryL( ECnUiQueryActiveConnectionSuppressForScheduledConnection,
+ *serverName,
+ *this );
+ CleanupStack::PopAndDestroy( serverName ); //serverName
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ delete iUi;
+ iUi = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCnUiClientGroupUiNotifyHandler::UseResourceFileL()
+// -----------------------------------------------------------------------------
+//
+void CCnUiClientGroupUiNotifyHandler::UseResourceFileL( const TDesC& aNewResourceFile )
+ {
+ if ( aNewResourceFile.Length() == 0 )
+ {
+ //empty resource file name ==> use the default resource
+ delete iBrandedResourceFileName;
+ iBrandedResourceFileName = NULL;
+ }
+ else
+ {
+ // use this resourcefile
+ HBufC* tempFile = aNewResourceFile.AllocL();
+ delete iBrandedResourceFileName;
+ iBrandedResourceFileName = tempFile;
+ }
+ }
+
+
+
+// end of file