meetingrequest/mrcasplugin/src/cesmrcaspluginimpl.cpp
changeset 0 8466d47a6819
child 4 e7aa27f58ae1
equal deleted inserted replaced
-1:000000000000 0:8466d47a6819
       
     1 /*
       
     2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14  *  Description : Implementation of the class CESMRCasPluginImpl.
       
    15  *  Version     : %version: tr1sido#9 % << Don't touch! Updated by Synergy at check-out.
       
    16  *
       
    17  */
       
    18 
       
    19 #include "emailtrace.h"
       
    20 #include "cesmrcaspluginimpl.h"
       
    21 #include "esmrhelper.h"
       
    22 #include "cesmrcaspluginuilauncher.h"
       
    23 #include "cesmrcascontactaction.h"
       
    24 #include "cesmrcasplugincontactretriever.h"
       
    25 // <cmail> Profiler removed. </cmail>
       
    26 
       
    27 #include <esmrcasplugindata.rsg>
       
    28 #include <esmrcasplugin.mbg>
       
    29 
       
    30 #include <MVPbkStoreContact.h>
       
    31 #include <data_caging_path_literals.hrh>
       
    32 #include <coemain.h>
       
    33 #include <calsession.h>
       
    34 #include <cmrmailboxutils.h>
       
    35 #include <CalenInterimUtils2.h>
       
    36 #include <badesca.h>
       
    37 
       
    38 #include <implementationproxy.h>
       
    39 #include <StringLoader.h>
       
    40 #include <AknIconUtils.h>
       
    41 #include <bautils.h>
       
    42 //<cmail>
       
    43 #include "mfscactionutils.h"
       
    44 #include "mfsccontactset.h"
       
    45 //</cmail>
       
    46 
       
    47 #include <utf.h>
       
    48 //<cmail>
       
    49 #include "mfsccontactactionpluginobserver.h"
       
    50 #include "mfsccontactsetobserver.h"
       
    51 //</cmail>
       
    52 #include <gulicon.h>
       
    53 
       
    54 //<cmail>
       
    55 #include "fsccontactactionserviceuids.hrh"
       
    56 #include "fscactionpluginactionuids.h"
       
    57 #include "fscactionplugincrkeys.h"
       
    58 //</cmail>
       
    59 
       
    60 // CONSTANTS DECLARATIONS
       
    61 const TImplementationProxy ImplementationTable[] =
       
    62     {
       
    63     IMPLEMENTATION_PROXY_ENTRY(
       
    64             KFscMruiPluginImplImpUid,
       
    65             CESMRCasPluginImpl::NewL )
       
    66     };
       
    67 
       
    68 // Unnamed namespace for local definitions
       
    69 namespace { // codescanner::namespace
       
    70 
       
    71 // Action Priority
       
    72 const TInt KPbkxActionPriorityMeetingRequest = 450 /* cenrep default value */;
       
    73 
       
    74 const TInt KActionCount = 1;
       
    75 const TInt KInvalidReasonId = 0;
       
    76 
       
    77 _LIT( KMeetingRequestPluginIconPath, "esmrcasplugin.mif" );
       
    78 _LIT( KResourceFileName, "esmrcasplugindata.rsc");
       
    79 
       
    80 #ifdef _DEBUG
       
    81 
       
    82 _LIT( KTESMRCasPluginPanicTxt, "TESMRCasPluginPanic");
       
    83 
       
    84 enum TESMRCasPluginPanic
       
    85     {
       
    86     EESMRCasPluginNotSupported,
       
    87     EESMRCasPluginNoCoeEnv
       
    88     };
       
    89 
       
    90 void Panic( TESMRCasPluginPanic aPanic )
       
    91     {
       
    92     User::Panic ( KTESMRCasPluginPanicTxt, aPanic );
       
    93     }
       
    94 
       
    95 #endif // DEBUG
       
    96 }//namespace
       
    97 
       
    98 // ======== GLOBAL FUNCTIONS ========
       
    99 // ---------------------------------------------------------------------------
       
   100 // ImplementationGroupProxy
       
   101 // ---------------------------------------------------------------------------
       
   102 //
       
   103 EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
       
   104     {
       
   105     FUNC_LOG;
       
   106 
       
   107     aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
       
   108 
       
   109 
       
   110     return ImplementationTable;
       
   111     }
       
   112 
       
   113 // ======== MEMBER FUNCTIONS ========
       
   114 
       
   115 // ---------------------------------------------------------------------------
       
   116 // CESMRCasPluginImpl::CESMRCasPluginImpl
       
   117 // ---------------------------------------------------------------------------
       
   118 //
       
   119 CESMRCasPluginImpl::CESMRCasPluginImpl( const TFscContactActionPluginParams& aParams ) :
       
   120     iParams(aParams),
       
   121     iResourceHandle(0)
       
   122     {
       
   123     FUNC_LOG;
       
   124     //do nothing
       
   125     }
       
   126 
       
   127 // ---------------------------------------------------------------------------
       
   128 // CESMRCasPluginImpl::~CESMRCasPluginImpl
       
   129 // ---------------------------------------------------------------------------
       
   130 //
       
   131 CESMRCasPluginImpl::~CESMRCasPluginImpl( )
       
   132     {
       
   133     FUNC_LOG;
       
   134 
       
   135     delete iMeetingRequestContactAction;
       
   136     delete iActionList;
       
   137 
       
   138     CCoeEnv::Static()->DeleteResourceFile( iResourceHandle );
       
   139 
       
   140     delete iMailboxUtils;
       
   141     delete iCalUtils;
       
   142     delete iCalSession;
       
   143     delete iUiLauncher;
       
   144     delete iContactRetriever;
       
   145 
       
   146     }
       
   147 
       
   148 // ---------------------------------------------------------------------------
       
   149 // CESMRCasPluginImpl::NewL
       
   150 // ---------------------------------------------------------------------------
       
   151 //
       
   152 CESMRCasPluginImpl* CESMRCasPluginImpl::NewL( TAny* aParams )
       
   153     {
       
   154     FUNC_LOG;
       
   155 
       
   156     TFscContactActionPluginParams* params =
       
   157             reinterpret_cast< TFscContactActionPluginParams* >( aParams );
       
   158 
       
   159     CESMRCasPluginImpl* self = new (ELeave) CESMRCasPluginImpl(*params );
       
   160     CleanupStack::PushL ( self );
       
   161     self->ConstructL ( );
       
   162     CleanupStack::Pop ( self );
       
   163 
       
   164 
       
   165     return self;
       
   166     }
       
   167 
       
   168 // ---------------------------------------------------------------------------
       
   169 // CESMRCasPluginImpl::ConstructL
       
   170 // ---------------------------------------------------------------------------
       
   171 //
       
   172 void CESMRCasPluginImpl::ConstructL()
       
   173     {
       
   174     FUNC_LOG;
       
   175 
       
   176     iCalSession = CCalSession::NewL();
       
   177     iCalSession->OpenL( KNullDesC );
       
   178 
       
   179     iMailboxUtils = CMRMailboxUtils::NewL();
       
   180     iCalUtils = CCalenInterimUtils2::NewL();
       
   181 
       
   182     iUiLauncher = CESMRCasPluginUiLauncher::NewL(
       
   183                         *iCalSession,
       
   184                         *iCalUtils,
       
   185                         *iMailboxUtils,
       
   186                         iParams,
       
   187                         *this );
       
   188 
       
   189     TFileName resourceFileName;
       
   190     User::LeaveIfError(
       
   191             ESMRHelper::LocateResourceFile(
       
   192                     KResourceFileName,
       
   193                     KDC_RESOURCE_FILES_DIR ,
       
   194                     resourceFileName ) );
       
   195 
       
   196     CCoeEnv* coeEnv = CCoeEnv::Static();
       
   197 
       
   198     __ASSERT_DEBUG( coeEnv, Panic(EESMRCasPluginNoCoeEnv) );
       
   199 
       
   200     BaflUtils::NearestLanguageFile(
       
   201             coeEnv->FsSession(),
       
   202             resourceFileName); //for localization
       
   203     iResourceHandle =coeEnv->AddResourceFileL( resourceFileName );
       
   204 
       
   205     iActionList = new( ELeave )CArrayFixFlat<TUid>( KActionCount );
       
   206     iActionList->AppendL ( KFscActionUidMeetingReq );
       
   207 // <cmail>
       
   208     iMeetingRequestContactAction =
       
   209             CESMRCasContactAction::NewL(
       
   210                 *this,
       
   211                 KFscActionUidMeetingReq,
       
   212                 KFscAtComSendCalReq,
       
   213                 R_FS_ACTION_MEETING,
       
   214                 IconL(  EMbmEsmrcaspluginQgn_prop_cmail_action_meeting,
       
   215                         EMbmEsmrcaspluginQgn_prop_cmail_action_meeting_mask ) );
       
   216 // </cmail>
       
   217     iContactRetriever = CESMRCasPluginContactRetriever::NewL( iParams );
       
   218 
       
   219     }
       
   220 
       
   221 // ---------------------------------------------------------------------------
       
   222 // CESMRCasPluginImpl::Uid
       
   223 // ---------------------------------------------------------------------------
       
   224 //
       
   225 TUid CESMRCasPluginImpl::Uid( ) const
       
   226     {
       
   227     FUNC_LOG;
       
   228     TUid uid = TUid::Uid( KFscMruiPluginImplImpUid );
       
   229 
       
   230 
       
   231     return uid;
       
   232     }
       
   233 
       
   234 // ---------------------------------------------------------------------------
       
   235 // CESMRCasPluginImpl::ActionList
       
   236 // ---------------------------------------------------------------------------
       
   237 //
       
   238 const CArrayFix<TUid>* CESMRCasPluginImpl::ActionList( ) const
       
   239     {
       
   240 
       
   241     return iActionList;
       
   242     }
       
   243 
       
   244 // ---------------------------------------------------------------------------
       
   245 // CESMRCasPluginImpl::GetActionL
       
   246 // ---------------------------------------------------------------------------
       
   247 //
       
   248 const MFscContactAction& CESMRCasPluginImpl::GetActionL(TUid aActionUid ) const
       
   249     {
       
   250     FUNC_LOG;
       
   251 
       
   252     const MFscContactAction* action=  NULL;
       
   253     if ( aActionUid == KFscActionUidMeetingReq )
       
   254         {
       
   255         action = iMeetingRequestContactAction;
       
   256         }
       
   257     else
       
   258         {
       
   259         User::Leave( KErrNotFound ); // codescanner::leave
       
   260         }
       
   261 
       
   262 
       
   263     return *action;
       
   264     }
       
   265 
       
   266 // ---------------------------------------------------------------------------
       
   267 // CESMRCasPluginImpl::PriorityForContactSetL
       
   268 // ---------------------------------------------------------------------------
       
   269 //
       
   270 void CESMRCasPluginImpl::PriorityForContactSetL(
       
   271         TUid aActionUid,
       
   272         MFscContactSet& aContactSet,
       
   273         TFscContactActionVisibility& aActionMenuVisibility,
       
   274         TFscContactActionVisibility& aOptionsMenuVisibility,
       
   275         MFscContactActionPluginObserver* aObserver )
       
   276     {
       
   277     FUNC_LOG;
       
   278 
       
   279     iActionPriority = iParams.iUtils->ActionPriority (
       
   280                     KFscCrUidMeetingRequest,
       
   281                     KPbkxActionPriorityMeetingRequest );
       
   282 
       
   283     iPluginObserver = aObserver;
       
   284     iActionMenuVisibility = &aActionMenuVisibility;
       
   285     iOptionsMenuVisibility = &aOptionsMenuVisibility;
       
   286 
       
   287     if ( !MRViewersEnabledL() )
       
   288         {
       
   289         iActionPriority = KFscActionPriorityNotAvailable;
       
   290         aActionMenuVisibility.iVisibility = TFscContactActionVisibility::EFscActionHidden;
       
   291         aActionMenuVisibility.iReasonId = KInvalidReasonId;
       
   292         aOptionsMenuVisibility.iVisibility = TFscContactActionVisibility::EFscActionHidden;
       
   293         aOptionsMenuVisibility.iReasonId = KInvalidReasonId;
       
   294         aObserver->PriorityForContactSetComplete( iActionPriority );
       
   295         }
       
   296     else if ( aActionUid == KFscActionUidMeetingReq )
       
   297         {
       
   298         iContactRetriever->CanExecuteL( aContactSet, *this );
       
   299         }
       
   300     else
       
   301         {
       
   302         aObserver->PriorityForContactSetComplete( iActionPriority );
       
   303         }
       
   304     }
       
   305 
       
   306 // ---------------------------------------------------------------------------
       
   307 // CESMRCasPluginImpl::ExecuteL
       
   308 // ---------------------------------------------------------------------------
       
   309 //
       
   310 void CESMRCasPluginImpl::ExecuteL(
       
   311         TUid aActionUid,
       
   312         MFscContactSet& aContactSet,
       
   313         MFscContactActionPluginObserver* aObserver )
       
   314     {
       
   315     FUNC_LOG;
       
   316     
       
   317     if ( aActionUid == KFscActionUidMeetingReq )
       
   318         {
       
   319         iPluginObserver = aObserver;
       
   320         iContactRetriever->GetAttendeesL(
       
   321                 aContactSet,
       
   322                 *this );
       
   323         }
       
   324     else
       
   325         {
       
   326         aObserver->ExecuteFailed( KErrArgument );
       
   327         }
       
   328 
       
   329     }
       
   330 
       
   331 // ---------------------------------------------------------------------------
       
   332 // CESMRCasPluginImpl::CancelExecute
       
   333 // ---------------------------------------------------------------------------
       
   334 //
       
   335 void CESMRCasPluginImpl::CancelExecute()
       
   336     {
       
   337     FUNC_LOG;
       
   338 
       
   339        iContactRetriever->Cancel();
       
   340 
       
   341     }
       
   342 
       
   343 // ---------------------------------------------------------------------------
       
   344 // CESMRCasPluginImpl::CancelPriorityForContactSet
       
   345 // ---------------------------------------------------------------------------
       
   346 //
       
   347 void CESMRCasPluginImpl::CancelPriorityForContactSet()
       
   348     {
       
   349     FUNC_LOG;
       
   350 
       
   351     iContactRetriever->Cancel();
       
   352     
       
   353     }
       
   354 
       
   355 // ---------------------------------------------------------------------------
       
   356 // CESMRCasPluginImpl::GetReasonL
       
   357 // ---------------------------------------------------------------------------
       
   358 //
       
   359 void CESMRCasPluginImpl::GetReasonL(TUid /*aActionUid*/,
       
   360                                     TInt /*aReasonId*/,
       
   361                                     HBufC*& /*aReason */) const
       
   362     {
       
   363     FUNC_LOG;
       
   364     //nothing to do
       
   365     }
       
   366 
       
   367 // ---------------------------------------------------------------------------
       
   368 // CESMRCasPluginImpl::MRCanExecuteComplete
       
   369 // ---------------------------------------------------------------------------
       
   370 //
       
   371 void CESMRCasPluginImpl::MRCanExecuteComplete(
       
   372         TBool aCanExecute )
       
   373     {
       
   374     FUNC_LOG;
       
   375     if ( aCanExecute )
       
   376         {
       
   377         iActionMenuVisibility->iVisibility =
       
   378                 TFscContactActionVisibility::EFscActionVisible;
       
   379         iOptionsMenuVisibility->iVisibility =
       
   380                 TFscContactActionVisibility::EFscActionVisible;
       
   381         }
       
   382     else
       
   383         {
       
   384         iActionPriority = KFscActionPriorityNotAvailable;
       
   385         iActionMenuVisibility->iVisibility =
       
   386                 TFscContactActionVisibility::EFscActionHidden;
       
   387         iActionMenuVisibility->iReasonId = KInvalidReasonId;
       
   388 
       
   389         iOptionsMenuVisibility->iVisibility =
       
   390                 TFscContactActionVisibility::EFscActionHidden;
       
   391         iOptionsMenuVisibility->iReasonId = KInvalidReasonId;
       
   392         }
       
   393 
       
   394     if ( iPluginObserver )
       
   395         {
       
   396         iPluginObserver->PriorityForContactSetComplete( iActionPriority );
       
   397         }
       
   398     
       
   399     }
       
   400 
       
   401 // ---------------------------------------------------------------------------
       
   402 // CESMRCasPluginImpl::MRCanExecuteError
       
   403 // ---------------------------------------------------------------------------
       
   404 //
       
   405 void CESMRCasPluginImpl::MRCanExecuteError(
       
   406         TInt aError )
       
   407     {
       
   408     FUNC_LOG;
       
   409     if ( iPluginObserver )
       
   410         {
       
   411         iPluginObserver->PriorityForContactSetFailed( aError );
       
   412         }    
       
   413     }
       
   414 
       
   415 // ---------------------------------------------------------------------------
       
   416 // CESMRCasPluginImpl::MRGetAttendeesComplete
       
   417 // ---------------------------------------------------------------------------
       
   418 //
       
   419 void CESMRCasPluginImpl::MRGetAttendeesComplete(
       
   420         TInt aContactCount,
       
   421         const RPointerArray<CCalUser>& aContacts )
       
   422     {
       
   423     FUNC_LOG;
       
   424     
       
   425     // MRGetAttendeesCompleteL is synchronous function and will
       
   426     // return only after MR Editor is closed or opening editor leaves.
       
   427     TRAPD( error, MRGetAttendeesCompleteL( aContactCount, aContacts ) );
       
   428     
       
   429     // If editor was opened properly MREditorInitializationComplete should
       
   430     // have been called and iPluginObserver should be NULL.
       
   431     if ( iPluginObserver )
       
   432         {
       
   433         if ( error != KErrNone )
       
   434             {
       
   435             iPluginObserver->ExecuteFailed( error );
       
   436             }
       
   437         else
       
   438             {
       
   439             iPluginObserver->ExecuteComplete();
       
   440             }
       
   441         // Set iPluginObserver to NULL to avoid more calls to observer.
       
   442         iPluginObserver = NULL;
       
   443         }
       
   444     }
       
   445 
       
   446 // ---------------------------------------------------------------------------
       
   447 // CESMRCasPluginImpl::MRGetAttendeesCompleteL
       
   448 // ---------------------------------------------------------------------------
       
   449 //
       
   450 void CESMRCasPluginImpl::MRGetAttendeesCompleteL(
       
   451         TInt aContactCount,
       
   452         const RPointerArray<CCalUser>& aContacts )
       
   453     {
       
   454     FUNC_LOG;
       
   455     TInt invalidContactCount = aContactCount - aContacts.Count();
       
   456     if ( invalidContactCount > 0 &&
       
   457         !iParams.iUtils->ShowNumberMissingNoteL(
       
   458             invalidContactCount,
       
   459             aContactCount,
       
   460             R_FS_QUERY_INFO_MISSING,
       
   461             R_FS_EMAIL_MISSING_QUERY_DIALOG ) )
       
   462         {
       
   463         // User selected cancel
       
   464         User::Leave( KErrCancel );
       
   465         }
       
   466     else
       
   467         {
       
   468         iUiLauncher->LaunchMeetingRequestViewL( aContacts );
       
   469         }
       
   470     }
       
   471 
       
   472 // ---------------------------------------------------------------------------
       
   473 // CESMRCasPluginImpl::MRGetAttendeesError
       
   474 // ---------------------------------------------------------------------------
       
   475 //
       
   476 void CESMRCasPluginImpl::MRGetAttendeesError(
       
   477         TInt aError )
       
   478     {
       
   479     FUNC_LOG;
       
   480     if ( iPluginObserver )
       
   481         {
       
   482         iPluginObserver->ExecuteFailed( aError );
       
   483         }
       
   484     }
       
   485 
       
   486 // ---------------------------------------------------------------------------
       
   487 // CESMRCasPluginImpl::MREditorInitializationComplete
       
   488 // ---------------------------------------------------------------------------
       
   489 //
       
   490 void CESMRCasPluginImpl::MREditorInitializationComplete()
       
   491     {
       
   492     FUNC_LOG;
       
   493    
       
   494     if ( iPluginObserver )
       
   495         {
       
   496         // This is asunchronous callback while MRGetAttendeesCompleteL
       
   497         // still executes. Notify iPluginObserver so that Action Menu is
       
   498         // removed.
       
   499         iPluginObserver->ExecuteComplete();
       
   500         // Set iPluginObserver to NULL to avoid more calls to
       
   501         // iPluginObserver.
       
   502         iPluginObserver = NULL;
       
   503         }
       
   504     }
       
   505 
       
   506 // ---------------------------------------------------------------------------
       
   507 // CESMRCasPluginImpl::IconL
       
   508 // ---------------------------------------------------------------------------
       
   509 //
       
   510 CGulIcon* CESMRCasPluginImpl::IconL( TInt aBitmapId, TInt aMaskId ) const
       
   511     {
       
   512     FUNC_LOG;
       
   513 
       
   514     CGulIcon* returnIcon( NULL );
       
   515     TFileName iconFileName;
       
   516     User::LeaveIfError(
       
   517     ESMRHelper::LocateResourceFile(
       
   518             KMeetingRequestPluginIconPath,
       
   519             KDC_APP_BITMAP_DIR ,
       
   520             iconFileName ) );
       
   521 
       
   522     CFbsBitmap* bitmap( NULL );
       
   523     CFbsBitmap* mask( NULL );
       
   524 
       
   525     AknIconUtils::CreateIconL( bitmap, mask, iconFileName, aBitmapId,
       
   526             aMaskId );
       
   527     CleanupStack::PushL( mask );
       
   528     CleanupStack::PushL( bitmap );
       
   529     returnIcon = CGulIcon::NewL( bitmap, mask );
       
   530     CleanupStack::Pop( bitmap );
       
   531     CleanupStack::Pop( mask );
       
   532 
       
   533 
       
   534     return returnIcon;
       
   535     }
       
   536 
       
   537 // ---------------------------------------------------------------------------
       
   538 // CESMRCasPluginImpl::MRViewersEnabledL
       
   539 // ---------------------------------------------------------------------------
       
   540 //
       
   541 TBool CESMRCasPluginImpl::MRViewersEnabledL()
       
   542     {
       
   543     FUNC_LOG;
       
   544     TBool retValue( EFalse );
       
   545 
       
   546     if ( iCalUtils->MRViewersEnabledL( ETrue ) )
       
   547         {
       
   548         retValue = ETrue;
       
   549         }
       
   550 
       
   551     return retValue;
       
   552     }
       
   553 
       
   554 // EOF
       
   555