messagingfw/senduiservices/datautils/src/SendUiFileRightsEngine.cpp
branchRCL_3
changeset 23 d51193d814ea
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/senduiservices/datautils/src/SendUiFileRightsEngine.cpp	Wed Sep 01 12:27:27 2010 +0100
@@ -0,0 +1,763 @@
+/*
+* Copyright (c) 2002-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:   Provides functionality for DRM file protection analyzing
+*                and content MMS compatibility resolving.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "SendUiFileRightsEngine.h"
+#include    <SendUiConsts.h>
+#include    "SendUiDataUtils.h"
+
+#include    <MsgMedia.hrh>
+#include    <MsgMediaResolver.h>            // Msg Media Resolver
+#include    <MmsConformance.h>              // MMS Conformance
+
+#include    <Sendnorm.rsg>
+#include    <AknQueryDialog.h>              // Query dialog
+#include    <aknnotewrappers.h>             // Note dialog
+#include    <stringresourcereader.h>        // String Resource Reader
+#include    <StringLoader.h>                // Stringloader
+#include    <data_caging_path_literals.hrh>
+#include    <mmsconst.h>
+#include    <fileprotectionresolver.h>
+#include    <VideoConversionApi.h>
+#include    <MsgMimeTypes.h>
+#include    "CSendUiAttachment.h"
+// CONSTANTS
+const TInt KFREKiloByte                     = 1024;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::CSendUiFileRightsEngine
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSendUiFileRightsEngine::CSendUiFileRightsEngine( RFs& aFS )
+    : iFileSession( aFS )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ConstructL()
+    {
+    iProtectionResolver = CFileProtectionResolver::NewL( iFileSession );
+    iMediaResolver = CMsgMediaResolver::NewL();
+    iMmsConformance = CMmsConformance::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSendUiFileRightsEngine* CSendUiFileRightsEngine::NewL( RFs& aFs)
+    {
+    CSendUiFileRightsEngine* self = NewLC( aFs );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSendUiFileRightsEngine* CSendUiFileRightsEngine::NewLC( RFs& aFs )
+    {
+    CSendUiFileRightsEngine* self =
+        new( ELeave ) CSendUiFileRightsEngine( aFs );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor
+CSendUiFileRightsEngine::~CSendUiFileRightsEngine()
+    {
+    delete iProtectionResolver;
+    delete iMediaResolver;
+    delete iMmsConformance;
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ConfirmDrmFileRightsL
+
+// Closed content list checking is also done here.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSendUiFileRightsEngine::ConfirmDrmFileRightsL(
+    CArrayPtrFlat<CSendUiAttachment>* aAttachments )
+    {
+	if ( !aAttachments )
+		{
+		return;
+		}
+    TInt fileCount = aAttachments->Count();
+    if ( fileCount )
+        {
+        TInt index = 0;
+        TInt protection = 0;
+        TDataType mimeType;
+
+        CSendUiDataUtils* dataUtils = CSendUiDataUtils::NewL( iFileSession );
+        CleanupStack::PushL( dataUtils );
+
+        while ( index < fileCount)
+            {
+            iValidationResults[ESenduiIndexTotalCount]++;
+            CSendUiAttachment& attachment = *(aAttachments->At(index));
+            RFile file = *(attachment.Handle());
+            dataUtils->ResolveFileMimeTypeL( file, mimeType );
+        	protection = iProtectionResolver->ProtectionStatusL( file, mimeType );
+     		attachment.SetMimeType( mimeType );
+            	
+            if ( protection & EFileProtSuperDistributable )
+                {
+                iValidationResults[ESenduiIndexDrmSD]++;
+                }
+            else if ( ( protection & EFileProtForwardLocked ) ||
+                      ( protection & EFileProtClosedContent ) )
+                {
+                iInvalidationReason[ESenduiIndexDrmFLOrCCL]++;
+                iValidationResults[ESenduiIndexDeleted]++;
+                delete aAttachments->At(index);
+                aAttachments->Delete( index );
+                
+                fileCount--;
+                index--;
+                }
+            index++;
+            }
+
+        CleanupStack::PopAndDestroy( dataUtils );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ConfirmMmsValidityL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSendUiFileRightsEngine::ConfirmMmsValidityL(
+    CArrayPtrFlat<CSendUiAttachment>* aAttachments,
+    TUid                aServiceId )
+    {
+	if ( !aAttachments )
+		{
+		return;
+		}
+    TBool removeFilePath = EFalse;
+    TInt index = 0;
+    TInt fileCount = aAttachments->Count();
+    TInt attachmentsSize = 0;
+    // MMS image size is set to original for MMS upload service,
+    // otherwise oversize images are not filtered away from array
+    if( aServiceId == KMmsDirectUpload || aServiceId == KMmsIndirectUpload )
+        {
+        // Image size setting not used since only MIME type conformance is checked.
+        iMmsConformance->SetCreationMode( ETrue );
+        }
+    if ( fileCount )
+        {
+        while ( index < fileCount)
+            {
+            
+            // Validate file for MMS
+            CSendUiAttachment& attachment = *(aAttachments->At(index));
+            removeFilePath = AnalyzeMmsValidationResultL( *(aAttachments->At(index) ), attachmentsSize );
+	  
+            if ( removeFilePath )
+                {
+                delete aAttachments->At(index);
+                aAttachments->Delete( index );
+                iValidationResults[ESenduiIndexDeleted]++;
+                fileCount--;
+                index--;
+                }
+
+            index++;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ShowDrmAndMmsInfoL
+// Shows DRM confirmation query and/or error note, if needed.
+// Returns EFalse if user cancels sending.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSendUiFileRightsEngine::ShowDrmAndMmsInfoL( TUid aServiceId )
+    {
+    TBool showDrmQuery = EFalse;
+    TBool showErrorNotification = EFalse;
+    TUint drmQueryTextId = 0;
+    TUint noteTextId = 0;
+    TUint valueForNote = 0;
+    TFREErrorNoteType noteType = EInformationNote;
+
+    // Information query and/or error note is shown if needed
+    if ( iValidationResults[ESenduiIndexDeleted] )
+        {
+        ResolveErrorNoteL( aServiceId, noteTextId, noteType, valueForNote );
+        showErrorNotification = ETrue;
+        }
+
+    // Possible DRM query is shown only if all files are not deleted.
+    if ( iValidationResults[ESenduiIndexDeleted] <
+         iValidationResults[ESenduiIndexTotalCount] )
+        {
+        if ( iValidationResults[ESenduiIndexDrmSD] )
+            {
+            ResolveDrmQuery( aServiceId, drmQueryTextId );
+            showDrmQuery = ETrue;
+            }
+        }
+
+    // Show error note if needed
+    if ( showErrorNotification )
+        {
+        ShowErrorNotificationL( noteTextId, noteType, valueForNote );
+        }
+
+    // Show query if needed
+    if ( showDrmQuery )
+        {
+        return ShowConfirmationQueryL(
+            drmQueryTextId, R_SENDUI_DRM_FORWARDLOCKED_CONTENT_QUERY );
+        }
+
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::CalculateTotalSizeOfFiles
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSendUiFileRightsEngine::CalculateTotalSizeOfFiles(
+    CArrayPtrFlat<CSendUiAttachment>* aAttachments,
+    TBool aLinksSupported )
+{
+	if ( !aAttachments )
+		{
+		return 0;
+		}
+    TUint totalSize = 0;
+  
+    TInt index = 0;
+    for ( index = 0; index < aAttachments->Count(); index++ )
+        {
+        CSendUiAttachment& attachment = *(aAttachments->At(index));
+        
+        if ( attachment.Type() == CSendUiAttachment::EAttachmentHandle )
+        	{
+        	totalSize += attachment.Size();
+        	}
+    	else
+    		{
+    		if ( !aLinksSupported )
+    			{
+	    		totalSize += attachment.Size();
+    			}
+    		}
+        
+        }
+    return totalSize;
+}
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ClearValidationCounters
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSendUiFileRightsEngine::ClearValidationCounters()
+    {
+    TInt index = 0;
+    // Go through the lists
+    for( index = 0; index < ESenduiIndexLastResult; index++ )
+        {
+        iValidationResults[index] = 0;
+        }
+
+    for( index = 0; index < ESenduiIndexLastInvalid; index++ )
+        {
+        iInvalidationReason[index] = 0;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::AnalyzeMmsValidationResult
+// -----------------------------------------------------------------------------
+// 
+TBool CSendUiFileRightsEngine::AnalyzeMmsValidationResultL( CSendUiAttachment& aAttachment, TInt& aAttachmentsSize )
+    {
+    TBool attachmentInvalid = ETrue;
+    
+    RImplInfoPtrArray implArray;
+    CleanupStack::PushL( TCleanupItem( CleanupImplArray, &implArray ) );
+    CVideoConversionPlugin::ListImplementationsL( implArray );
+    
+    if ( aAttachment.MimeType() == KMsgMimeVideoMp4 && implArray.Count() != 0 )
+        {
+        attachmentInvalid = EFalse;
+        }
+    else if ( !iMmsConformance->CreationMode() &&
+         !iMmsConformance->IsConformantMime( aAttachment.MimeType() ) )
+        {
+        // Restricted mode and non-conformant MIME
+        iInvalidationReason[ESenduiIndexMmsNotSupported]++;
+        }
+    else if ( aAttachmentsSize + aAttachment.Size() > iMmsConformance->MaxSendSize() &&
+              iMediaResolver->MediaType( aAttachment.MimeType() ) != EMsgMediaImage )
+        {
+        iInvalidationReason[ESenduiIndexMmsTooBig]++;
+        }
+    else
+        {
+        attachmentInvalid = EFalse;
+        }
+
+	if ( !attachmentInvalid
+			&& iMediaResolver->MediaType( aAttachment.MimeType() ) != EMsgMediaImage )
+	    {
+	    aAttachmentsSize += aAttachment.Size();
+	    }
+    
+    CleanupStack::PopAndDestroy( );    //implArray
+    return attachmentInvalid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ResolveErrorNoteL
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ResolveErrorNoteL(
+    TUid                    aServiceId,
+    TUint&                  aResourceId,
+    TFREErrorNoteType&      aNoteType,
+    TUint&                  aValueForNote )
+    {
+    TInt i = 0;
+    TInt errorTypeCount = 0;
+    TUint errorType = 0;
+    TUint totalFileCount = iValidationResults[ESenduiIndexTotalCount];
+    TUint deletedFiles = iValidationResults[ESenduiIndexDeleted];
+
+    // Own notes for MMS direct upload
+    if ( aServiceId == KMmsDirectUpload )
+        {
+        ResolveMmsUploadErrorNoteL(
+            aResourceId, aNoteType, aValueForNote );
+        return;
+        }
+
+    // Count amount of different error types, if different errors exists
+    // general error note is shown.
+    for( i = 0; i < ESenduiIndexLastInvalid; i++ )
+        {
+        if ( iInvalidationReason[i] > 0 )
+            {
+            errorType = i;
+            errorTypeCount++;
+            }
+        }
+
+    if ( errorTypeCount == 0 )
+        { // Should never end up here.
+        aResourceId = R_SENDUI_MME_NONE_CANNOT_INS;
+        return;
+        }
+    else if ( errorTypeCount == 1 )
+        {  
+        switch ( errorType )
+            {
+            case ESenduiIndexDrmFLOrCCL:
+                {
+                TUint protectedFiles = iInvalidationReason[ ESenduiIndexDrmFLOrCCL ];
+
+                if ( deletedFiles < totalFileCount )
+                    { // Some files are protected
+                    aResourceId = R_SENDUI_DRM_SEND_FORBID_SOME;
+                    }
+                else
+                    { // All files are protected
+                    if ( protectedFiles == 1 )
+                        { // One protected file
+                        aResourceId = R_SENDUI_DRM_SEND_FORBID_ONE;
+                        }
+                    else
+                        { // Many protected files
+                        aResourceId = R_SENDUI_DRM_ALL_FILES_DELETED;
+                        }
+                    }
+                }            
+                break;
+            case ESenduiIndexAlreadyInUse:
+                {
+                if ( deletedFiles == totalFileCount )
+                    { // All files are in use
+                    User::Leave( KErrInUse );
+                    }
+                else
+                    { // Some files are in use
+                    aResourceId = R_SENDUI_MME_SOME_INSERTED;
+                    }
+                }
+                break;
+            case ESenduiIndexMmsTooBig:
+                {
+                if ( deletedFiles == totalFileCount )
+                    { // All files are too big
+                    aResourceId = R_SENDUI_MME_ONE_TOO_BIG;
+                    }
+                else
+                    { // Some files are too big
+                    aResourceId = R_SENDUI_MME_MANY_TOO_BIG;
+                    }
+
+                aNoteType = EConfirmationQuery;
+                aValueForNote = iMmsConformance->MaxSendSize();
+                aValueForNote /= KFREKiloByte ;
+                }
+                break;
+            case ESenduiIndexMmsNotSupported:
+                {
+                // Different notes when creation mode is locked
+                if ( iMmsConformance->CreationModeUserChangeable() &&
+                     !iMmsConformance->CreationMode() )
+                    {
+                    if ( deletedFiles == totalFileCount )
+                        { // All files are not supported
+                        aResourceId = deletedFiles > 1 ?
+                            R_SENDUI_MME_RMODE_FILES_NOT_SUPPORTED :
+                            R_SENDUI_MME_RMODE_FILE_NOT_SUPPORTED;
+                        }
+                    else
+                        { // Some files are not supported
+                        aResourceId = R_SENDUI_MME_RMODE_SOME_NOT_SUPPORTED;
+                        }
+                    }
+                else
+                    {
+                    if ( deletedFiles == totalFileCount )
+                        { // All files are not supported
+                        aResourceId = deletedFiles > 1 ?
+                            R_SENDUI_MME_FILES_NOT_SUPPORTED :
+                            R_SENDUI_MME_FILE_NOT_SUPPORTED;
+                        }
+                    else
+                        { // Some files are not supported
+                        aResourceId = R_SENDUI_MME_SOME_FILES_DELETED;
+                        }
+                    }
+                }
+                break;
+            case ESenduiIndexBadHandle:
+            default:
+                {
+                aResourceId = R_SENDUI_MME_NONE_CANNOT_INS;
+                }
+                break;
+            }
+        }
+    else // Different kind of errors exist, show general error note
+        {
+        if ( totalFileCount == deletedFiles )
+            { // Can't send any file
+            aResourceId = R_SENDUI_MME_NONE_CANNOT_INS;
+            }
+        else
+            { // Some files can be send
+            aResourceId = R_SENDUI_MME_SOME_INSERTED;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ResolveMmsUploadErrorNoteL
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ResolveMmsUploadErrorNoteL(
+    TUint&                      aResourceId,
+    TFREErrorNoteType&          aNoteType,
+    TUint&                      aValueForNote )
+    {
+    TInt i = 0;
+    TInt errorTypeCount = 0;
+    TUint errorType = 0;
+    TUint totalFileCount = iValidationResults[ESenduiIndexTotalCount];
+    TUint deletedFiles = iValidationResults[ESenduiIndexDeleted];
+
+    // Count amount of different error types, if different errors exists
+    // general error note is shown.
+    for( i = 0; i < ESenduiIndexLastInvalid; i++ )
+        {
+        if ( iInvalidationReason[i] > 0 )
+            {
+            errorType = i;
+            errorTypeCount++;
+            }
+        }
+
+    if ( errorTypeCount == 0 )
+        { // Should never end up here.
+        return;
+        }
+    else if ( errorTypeCount == 1 )
+        {  
+        switch ( errorType )
+            {
+            case ESenduiIndexDrmFLOrCCL:
+                {
+                TUint protectedFiles = iInvalidationReason[ ESenduiIndexDrmFLOrCCL ];
+
+                if ( deletedFiles < totalFileCount )
+                    { // Some files are protected
+                    aResourceId = R_SENDUI_DRM_SEND_FORBID_SOME;
+                    }
+                else
+                    { // All files are protected
+                    if ( protectedFiles == 1 )
+                        { // One protected file
+                        aResourceId = R_SENDUI_DRM_SEND_FORBID_ONE;
+                        }
+                    else
+                        { // Many protected files
+                        aResourceId = R_SENDUI_DRM_ALL_FILES_DELETED;
+                        }
+                    }
+                }
+                break;
+            case ESenduiIndexAlreadyInUse:
+                {
+                if ( deletedFiles == totalFileCount )
+                    { // All files are in use
+                    User::Leave( KErrInUse );
+                    }
+                else
+                    { // Some files are in use
+                    aResourceId = R_SENDUI_MMS_UPLOAD_SOME_FILES_DELETED;
+                    }
+                }
+                break;
+            case ESenduiIndexMmsTooBig:
+                {
+                aResourceId = deletedFiles > 1 ?
+                    R_SENDUI_MMS_UPLOAD_MANY_TOO_BIG : 
+                    R_SENDUI_MMS_UPLOAD_ONE_TOO_BIG;
+
+                aNoteType = EConfirmationQuery;
+                aValueForNote = iMmsConformance->MaxSendSize();
+                aValueForNote /= KFREKiloByte ;
+                }
+                break;
+            case ESenduiIndexMmsNotSupported:
+            default:
+                {
+                if ( deletedFiles == totalFileCount )
+                    { // All files are not supported
+                    aResourceId = deletedFiles > 1 ?
+                        R_SENDUI_MMS_UPLOAD_FILES_NOT_SUPPORTED :
+                        R_SENDUI_MMS_UPLOAD_FILE_NOT_SUPPORTED;
+                    }
+                else
+                    { // Some files are not supported
+                    aResourceId = R_SENDUI_MMS_UPLOAD_SOME_FILES_DELETED;
+                    }
+                }
+                break;
+            }
+        }
+    else // Different kind of errors exist, show general error note
+        {
+        if ( totalFileCount == deletedFiles )
+            { // Can't send any file
+            aResourceId = R_SENDUI_MMS_UPLOAD_NONE_CANNOT_INS;
+            }
+        else
+            { // Some files can be send
+            aResourceId = R_SENDUI_MMS_UPLOAD_SOME_INSERTED;
+            }
+        }   
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ResolveDrmQuery
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ResolveDrmQuery(
+    TUid        aServiceId,
+    TUint&      aResourceId )
+    {
+    TUint totalFileCount = iValidationResults[ESenduiIndexTotalCount];
+    TUint drmProtectedFiles = iInvalidationReason[ ESenduiIndexDrmFLOrCCL ];
+    TUint drmSdFiles = iValidationResults[ ESenduiIndexDrmSD ];
+    TUint unprotectedFiles = totalFileCount - drmProtectedFiles - drmSdFiles;
+    
+    if ( unprotectedFiles > 0 )
+        { // Some DRM SD protected files and unprotected files
+        // Different query for direct MMS upload service
+        if ( aServiceId == KMmsDirectUpload )
+            {
+            aResourceId = R_SENDUI_MMS_UPLOAD_DRM_SOME_SD;
+            }
+        else
+            {
+            aResourceId = R_SENDUI_DRM_SEVERAL_DISTRUTABLE;
+            }
+        }
+    else
+        { // Only DRM protected files
+        // Different query for direct MMS upload service
+        if ( aServiceId == KMmsDirectUpload || 
+             aServiceId == KMmsIndirectUpload )
+            {
+            aResourceId = drmSdFiles > 1 ? 
+                R_SENDUI_MMS_UPLOAD_DRM_MANY_SD : 
+                R_SENDUI_MMS_UPLOAD_DRM_ONE_SD;
+            }
+        else
+            {
+            aResourceId = drmSdFiles > 1 ? 
+                R_SENDUI_DRM_MANY_SD_ITEMS : 
+                R_SENDUI_DRM_SINGLE_DISTRUTABLE;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ShowErrorNotificationL
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ShowErrorNotificationL(
+    TUint                   aResourceId,
+    TFREErrorNoteType       aErrorNoteType, 
+    TUint                   aValueForNote ) const
+    {
+    switch ( aErrorNoteType )
+        {
+        case EErrorNote:
+            {
+            ShowErrorNoteL( aResourceId );
+            break;
+            }
+        case EInformationNote:
+            {
+            ShowInformationNoteL( aResourceId );
+            break;
+            }
+        case EConfirmationQuery:
+            {
+            ShowConfirmationQueryL(
+                aResourceId,
+                R_SENDUI_CONFIRMABLE_INFO,
+                aValueForNote );
+            break;
+            }
+        default: // Shouldn't end up here
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ShowErrorNoteL
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::ShowErrorNoteL( TUint aTextResourceId ) const
+    {
+    // Get text to be shown
+    HBufC* text = StringLoader::LoadLC( aTextResourceId );
+
+    // Create the note and show it
+    CAknErrorNote* note = new (ELeave) CAknErrorNote(ETrue);
+    note->ExecuteLD( text->Des() );
+
+    CleanupStack::PopAndDestroy( text ); // text
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ShowConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+TBool CSendUiFileRightsEngine::ShowConfirmationQueryL( 
+    TUint    aTextResourceId,
+    TUint    aNoteResourceId,
+    TUint    aValueForNote ) const
+    {
+    HBufC* text = NULL;
+    
+    if ( aValueForNote == 0 )
+        {
+        text = StringLoader::LoadLC( aTextResourceId );
+        }
+    else
+        {
+        text = StringLoader::LoadLC( aTextResourceId, aValueForNote );
+        }
+
+    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+
+    TInt result = dlg->ExecuteLD( aNoteResourceId, *text );
+    
+    CleanupStack::PopAndDestroy( text );
+
+    // ETrue, if Yes or Selection key were pressed
+    // Otherwise EFalse
+    return result; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::ShowInformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSendUiFileRightsEngine::ShowInformationNoteL(
+    TUint aTextResourceId ) const
+    {
+    // Get text to be shown
+    HBufC* text = StringLoader::LoadLC( aTextResourceId );
+
+    // Create the note and show it
+    CAknInformationNote* note = new (ELeave) CAknInformationNote( ETrue );
+    note->ExecuteLD( text->Des() );    
+
+    CleanupStack::PopAndDestroy( text ); // text
+    }
+
+// -----------------------------------------------------------------------------
+// CSendUiFileRightsEngine::CleanupImplArray
+// -----------------------------------------------------------------------------
+//
+void CSendUiFileRightsEngine::CleanupImplArray( TAny* aAny )
+    {
+    RImplInfoPtrArray* implArray = 
+        reinterpret_cast<RImplInfoPtrArray*>( aAny );
+    implArray->ResetAndDestroy();
+    implArray->Close();
+    }
+
+
+//  End of File