--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgavkon/msgnotifiers/src/MsgConfirmSendQuery.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2002 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:
+* CMsgConfirmSendQuery implementation file
+*
+*/
+
+
+
+#include <e32base.h>
+#include <bautils.h>
+#include <s32mem.h>
+
+#include <data_caging_path_literals.hrh>
+
+#include <aknmessagequerydialog.h>
+
+#include <tmsvpackednotifierrequest.h>
+
+// SIS registry
+#include <swi/sisregistrysession.h>
+#include <swi/sisregistrypackage.h>
+
+#include <mtclreg.h>
+#include <msvreg.h>
+
+#include <StringLoader.h>
+
+#include <avkon.rsg>
+#include <MsgNotifiers.rsg>
+
+#include "MsgConfirmSendNotifier.h"
+#include "MsgConfirmSendQuery.h"
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KMsgNotifiersResourceFile, "MsgNotifiers.rsc" );
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::NewL
+//
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CMsgConfirmSendQuery* CMsgConfirmSendQuery::NewL( CMsgConfirmSendNotifier& aNotifier )
+ {
+ CMsgConfirmSendQuery* self = new ( ELeave ) CMsgConfirmSendQuery( aNotifier );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::ConstructL
+//
+// Symbian OS default constructor can leave.
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::ConstructL()
+ {
+ iCoe = CEikonEnv::Static();
+ if ( !iCoe )
+ {
+ User::Leave( KErrGeneral );
+ }
+
+ TFileName resourceFile;
+ TParse parse;
+ parse.Set( KMsgNotifiersResourceFile, &KDC_RESOURCE_FILES_DIR, NULL );
+ resourceFile = parse.FullName();
+
+ BaflUtils::NearestLanguageFile( iCoe->FsSession(), resourceFile );
+ iResourceFileOffset = iCoe->AddResourceFileL( resourceFile );
+
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::CMsgConfirmSendQuery
+//
+// C++ constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CMsgConfirmSendQuery::CMsgConfirmSendQuery( CMsgConfirmSendNotifier& aNotifier )
+ : CActive( CActive::EPriorityStandard ),
+ iNotifier( aNotifier )
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::~CMsgConfirmSendQuery
+//
+// Destructor
+// ---------------------------------------------------------
+//
+CMsgConfirmSendQuery::~CMsgConfirmSendQuery()
+ {
+ Cancel();
+ if ( iCoe && iResourceFileOffset )
+ {
+ iCoe->DeleteResourceFile( iResourceFileOffset );
+ }
+ delete iAppName;
+ delete iMtmName;
+ delete iSelection;
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::RunL
+//
+// From active object framework
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::RunL()
+ {
+ // "Cancel" returns "0"
+ TInt ret( 0 );
+
+ HBufC* label = CreateMessageTextLC();
+ CAknMessageQueryDialog* query = CAknMessageQueryDialog::NewL( *label );
+ ret = query->ExecuteLD( R_CONFIRM_QUERY );
+ CleanupStack::PopAndDestroy( label );
+
+ iNotifier.HandleActiveEvent( ret );
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::DoCancel
+//
+// From active object framework
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::DoCancel()
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::Start
+//
+// Starts the active object
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::ShowQueryL( const TDesC8& aBuffer, TBool aSendAs )
+ {
+ if ( IsActive() )
+ {
+ Cancel();
+ }
+
+ //delete iBuf;
+ //iBuf = NULL;
+ //iBuf = aBuffer.AllocL();
+ //iClient.ShowQuery( *iBuf, iStatus );
+
+ if ( aSendAs )
+ {
+ ResolveSendAsConfirmDetailsL( aBuffer );
+ }
+ else
+ {
+ ResolveSendUiConfirmDetailsL( aBuffer );
+ }
+
+ // Complete self:
+ iStatus = KRequestPending;
+ TRequestStatus* pStatus = &iStatus;
+ SetActive();
+ User::RequestComplete( pStatus, KErrNone );
+ }
+
+
+// ---------------------------------------------------------
+// CMsgConfirmSendSession::ResolveSendAsConfirmDetailsL
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::ResolveSendAsConfirmDetailsL( const TDesC8& aBuffer )
+ {
+ TSecurityInfo securityInfo;
+ CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection();
+ CleanupStack::PushL( selection );
+ TMsvPackedNotifierRequest::UnpackL( aBuffer, *selection, securityInfo );
+
+ TInt count = selection->Count();
+ if ( count == 0 )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ CDummyObserver* dummyObs = new ( ELeave ) CDummyObserver;
+ CleanupStack::PushL( dummyObs );
+ CMsvSession* session = CMsvSession::OpenSyncL( *dummyObs );
+ CleanupStack::PushL( session );
+
+ TMsvId dummy;
+ TMsvEntry entry;
+ User::LeaveIfError( session->GetEntry( selection->At( 0 ), dummy, entry ) );
+
+ iMultipleMessages = ( count > 1 );
+ iMultipleRecipients = entry.MultipleRecipients();
+
+ // Assume all entries have same MTM.
+ NameFromMtmL( session, entry.iMtm );
+ NameFromSecurityInfoL( securityInfo );
+
+ CleanupStack::PopAndDestroy( 3, selection ); // selection, dummyObs, session
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendSession::ResolveSendUiConfirmDetailsL
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::ResolveSendUiConfirmDetailsL( const TDesC8& aBuffer )
+ {
+ iMultipleMessages = EFalse;
+ iMultipleRecipients = EFalse;
+
+ RDesReadStream stream( aBuffer );
+ delete iMtmName;
+ iMtmName = NULL;
+ TInt length = stream.ReadInt32L();
+ if ( length )
+ {
+ iMtmName = HBufC::NewL( stream, length );
+ }
+ else
+ {
+ iMtmName = StringLoader::LoadL( R_CONFIRM_UNKNOWN_MTM, iCoe );
+ }
+ TSecurityInfo securityInfo;
+ securityInfo.iSecureId = stream.ReadUint32L();
+ NameFromSecurityInfoL( securityInfo );
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendSession::NameFromSecurityInfoL
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::NameFromSecurityInfoL( TSecurityInfo& securityInfo )
+ {
+ delete iAppName;
+ iAppName = NULL;
+ Swi::RSisRegistrySession sisSession;
+ if ( sisSession.Connect() == KErrNone )
+ {
+ Swi::CSisRegistryPackage* sisRegistry = NULL;
+ TRAPD( err, sisRegistry = sisSession.SidToPackageL( securityInfo.iSecureId ) );
+ if ( !err )
+ {
+ iAppName = sisRegistry->Name().AllocL();
+ }
+ delete sisRegistry;
+ sisSession.Close();
+ }
+ if ( !iAppName || !iAppName->Length() )
+ {
+ iAppName = StringLoader::LoadL( R_CONFIRM_UNKNOWN_APP, iCoe );
+ }
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendSession::NameFromMtmL
+// ---------------------------------------------------------
+//
+void CMsgConfirmSendQuery::NameFromMtmL( CMsvSession* aSession, TUid aMtmTypeUid )
+ {
+ delete iMtmName;
+ iMtmName = NULL;
+ //HBufC* name( NULL );
+ // Create a client registry
+ CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *aSession );
+ CleanupStack::PushL( clientReg );
+
+ // Resolve human readable name for the MTM
+ if ( clientReg->IsPresent( aMtmTypeUid ) )
+ {
+ iMtmName = clientReg->RegisteredMtmDllInfo( aMtmTypeUid ).HumanReadableName().AllocL();
+ }
+ if ( !iMtmName || !iMtmName->Length() )
+ {
+ iMtmName = StringLoader::LoadL( R_CONFIRM_UNKNOWN_MTM, iCoe );
+ }
+ CleanupStack::PopAndDestroy( clientReg );
+ }
+
+// ---------------------------------------------------------
+// CMsgConfirmSendQuery::CreateMessageTextLC
+// ---------------------------------------------------------
+//
+HBufC* CMsgConfirmSendQuery::CreateMessageTextLC()
+ {
+ TInt resourceId = R_CONFIRM_SEND_MANY_MSG;
+ if ( !iMultipleMessages )
+ {
+ resourceId = iMultipleRecipients
+ ? R_CONFIRM_SEND_MANY_RECIP
+ : R_CONFIRM_SEND_ONE;
+ }
+
+ CPtrCArray* array = new ( ELeave ) CPtrCArray( 2 );
+ CleanupStack::PushL( array );
+
+ array->AppendL( *iAppName );
+ array->AppendL( *iMtmName );
+
+ HBufC* label = StringLoader::LoadL(
+ resourceId,
+ *array,
+ iCoe );
+
+ CleanupStack::PopAndDestroy( array );
+ CleanupStack::PushL( label );
+ return label;
+ }
+
+
+// End of File