idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp
branchRCL_3
changeset 130 67f2ed48ad91
parent 122 6cadd6867c17
equal deleted inserted replaced
122:6cadd6867c17 130:67f2ed48ad91
    48 _LIT( KMif,          "mif" );
    48 _LIT( KMif,          "mif" );
    49 _LIT( KResourceDrive, "Z:" );
    49 _LIT( KResourceDrive, "Z:" );
    50 _LIT( KResourceFile, "mcspluginres.rsc" );
    50 _LIT( KResourceFile, "mcspluginres.rsc" );
    51 _LIT( KResPath, "\\resource\\" );
    51 _LIT( KResPath, "\\resource\\" );
    52 _LIT( KMMApplication, "mm://" );
    52 _LIT( KMMApplication, "mm://" );
    53 _LIT( KSetOpenItemString, "!openitem?id="  );
    53 _LIT( KHideExit2, "&exit=hide" );
       
    54 _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
       
    55 _LIT( KApplicationGroupName, "applicationgroup_name" );
    54 _LIT( KIcon, "icon" );
    56 _LIT( KIcon, "icon" );
    55 _LIT( KMenuAttrUndefUid, "0x99999991" );
    57 _LIT( KMenuAttrUndefUid, "0x99999991" );
    56 _LIT( KMenuIconFile, "aimcsplugin.mif" );
    58 _LIT( KMenuIconFile, "aimcsplugin.mif" );
    57 _LIT( KMenuBookmarkIconId, "16386" );
    59 _LIT( KMenuBookmarkIconId, "16386" );
    58 _LIT( KMenuBookmarkMaskId, "16387" );
    60 _LIT( KMenuBookmarkMaskId, "16387" );
    59 _LIT( KMenuMailboxIconId, "16388" );
    61 _LIT( KMenuMailboxIconId, "16388" );
    60 _LIT( KMenuMailboxMaskId, "16389" );
    62 _LIT( KMenuMailboxMaskId, "16389" );
    61 _LIT( KMenuTypeMailbox, "menu:mailbox" );
    63 _LIT( KMenuTypeMailbox, "menu:mailbox" );
    62 _LIT( KPrefix, "0x" );
    64 _LIT( KPrefix, "0x" );
    63 _LIT( KMenuAttrInvokeSettingsUid, "0x99999990" );
       
    64 
    65 
    65 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
    66 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
    66 const TUid KMMUid = { 0x101F4CD2 };
    67 const TUid KMMUid = { 0x101F4CD2 };
    67 const TUid KMCSCmailUidValue = { 0x2001E277 };
    68 const TUid KMCSCmailUidValue = { 0x2001E277 };
    68 const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
    69 const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
    69 const TUid KBrowserUid = { 0x10008D39 };
    70 const TUid KBrowserUid = { 0x10008D39 };
    70 
       
    71 // maximum custom message length
       
    72 const TInt KMaxCustomMsg = 256;
       
    73 const TInt KUndefinedIndex = -1;
       
    74 
       
    75 // maximun integer character length
       
    76 const TInt  KMaxLength = 12;
       
    77 
    71 
    78 // ======== LOCAL FUNCTIONS ========
    72 // ======== LOCAL FUNCTIONS ========
    79 // ----------------------------------------------------------------------------
    73 // ----------------------------------------------------------------------------
    80 // NextIdToken
    74 // NextIdToken
    81 // ----------------------------------------------------------------------------
    75 // ----------------------------------------------------------------------------
   359     CMenuItem* item( NULL );
   353     CMenuItem* item( NULL );
   360     if( aData.MenuItem().Id() != KErrNotFound )
   354     if( aData.MenuItem().Id() != KErrNotFound )
   361         {        
   355         {        
   362         item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
   356         item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
   363         CleanupStack::PushL( item );
   357         CleanupStack::PushL( item );
   364         item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
   358         item->SetAttributeL( KMenuAttrLongName, aData.Name() );
   365         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   359         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   366         item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
   360         item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
   367         item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
   361         item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
   368         CleanupStack::Pop( item );
   362         CleanupStack::Pop( item );
   369         }
   363         }
   379     CMenuItem* item( NULL );
   373     CMenuItem* item( NULL );
   380     if( aData.MenuItem().Id() != KErrNotFound )
   374     if( aData.MenuItem().Id() != KErrNotFound )
   381         {   
   375         {   
   382         item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
   376         item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
   383         CleanupStack::PushL( item );
   377         CleanupStack::PushL( item );
   384         item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
   378         item->SetAttributeL( KMenuAttrLongName, aData.Name() );
   385         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   379         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   386         item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
   380         item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
   387         item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
   381         item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
   388         CleanupStack::Pop( item );
   382         CleanupStack::Pop( item );
   389         }
   383         }
   407         { 
   401         { 
   408         TUint32 flags = aMenuItem->Flags();
   402         TUint32 flags = aMenuItem->Flags();
   409         TUint32 isHidden = flags & TMenuItem::EHidden;
   403         TUint32 isHidden = flags & TMenuItem::EHidden;
   410         TUint32 isMissing = flags & TMenuItem::EMissing;
   404         TUint32 isMissing = flags & TMenuItem::EMissing;
   411 
   405 
   412         TBool attrExists = ETrue;
   406         if ( iUndefinedItem && ( isHidden || isMissing ) )
   413         TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
       
   414                 
       
   415         // if item is hidden or missing (mmc card removed)
       
   416         // use "Undefined" icon instead
       
   417         // for empty item it's own icon is shown
       
   418         if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
       
   419                 ( isHidden || isMissing ) )
       
   420             {
   407             {
   421             menuItem = iUndefinedItem;
   408             menuItem = iUndefinedItem;
   422             }
   409             }
   423         else
   410         else
   424             {
   411             {
   482         {
   469         {
   483         TUint32 flags = aMenuItem->Flags();
   470         TUint32 flags = aMenuItem->Flags();
   484         TUint32 isHidden = flags & TMenuItem::EHidden;
   471         TUint32 isHidden = flags & TMenuItem::EHidden;
   485         TUint32 isMissing = flags & TMenuItem::EMissing;
   472         TUint32 isMissing = flags & TMenuItem::EMissing;
   486 
   473 
   487         TBool attrExists = ETrue;
       
   488         TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
       
   489                 
       
   490         // if item is hidden or missing (mmc card removed)
   474         // if item is hidden or missing (mmc card removed)
   491         // use "Undefined" text instead
   475         // use "Undefined" text instead
   492         // for empty item it's own icon is shown
   476         if ( iUndefinedItem && ( isHidden || isMissing ) )
   493         if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
       
   494                 ( isHidden || isMissing ) )
       
   495             {
   477             {
   496             menuItem = iUndefinedItem;
   478             menuItem = iUndefinedItem;
   497             }
   479             }
   498         else
   480         else
   499             {
   481             {
   548         {
   530         {
   549         LaunchMailboxItemL( dataItem );
   531         LaunchMailboxItemL( dataItem );
   550         }
   532         }
   551     else
   533     else
   552         {
   534         {
   553         CMenuItem* item(CMenuItem::OpenL(iMenu, dataItem.MenuItem().Id()));
   535         LaunchMCSItemL( dataItem );
   554         CleanupStack::PushL(item);
       
   555         
       
   556         TBool attrExists = ETrue;
       
   557         
       
   558         TPtrC uid = item->GetAttributeL(KMenuAttrUid, attrExists);
       
   559         
       
   560         // Show selected shortcut settings
       
   561         if (uid.Compare(KMenuAttrInvokeSettingsUid) == 0)
       
   562             {
       
   563             TRAP_IGNORE( ShowSettingsL(aIndex + 1) );
       
   564             }
       
   565         else
       
   566             {
       
   567             LaunchMCSItemL(dataItem);
       
   568             }
       
   569         CleanupStack::PopAndDestroy(item);
       
   570         }
   536         }
   571     }
   537     }
   572 
   538 
   573 // ---------------------------------------------------------------------------
   539 // ---------------------------------------------------------------------------
   574 // 
   540 // 
   592     
   558     
   593     // message for MM application
   559     // message for MM application
   594     HBufC8* message; 
   560     HBufC8* message; 
   595 
   561 
   596     // prepare message for launching folder
   562     // prepare message for launching folder
   597     TBuf<KMaxLength>  itemId;
   563     TBool hasApplicationGroupName( EFalse );
   598     itemId.Num( item->Id() );
   564     
   599     
   565     TPtrC applicationGroupName( item->GetAttributeL(
   600     message = HBufC8::NewLC( KMMApplication().Length()
   566         KApplicationGroupName, hasApplicationGroupName ) );
   601                             + KSetOpenItemString().Length()
   567                                                       
   602                             + itemId.Length() );
   568     if ( !hasApplicationGroupName )
       
   569         {
       
   570         return;
       
   571         }
       
   572     
       
   573     message = HBufC8::NewLC( KMMApplication().Length() + 
       
   574                              KSetFocusString().Length() +
       
   575                              applicationGroupName.Length() + 
       
   576                              KHideExit2().Length() );
       
   577 
   603     message->Des().Copy( KMMApplication );
   578     message->Des().Copy( KMMApplication );
   604     message->Des().Append( KSetOpenItemString );
   579     message->Des().Append( KSetFocusString );
   605     message->Des().Append( itemId );
   580     message->Des().Append( applicationGroupName );
       
   581     message->Des().Append( KHideExit2 );
   606 
   582 
   607     // find MM application
   583     // find MM application
   608     TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
   584     TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
   609     TApaTask task( taskList.FindApp( KMMUid ) );
   585     TApaTask task( taskList.FindApp( KMMUid ) );
   610 
   586 
   646 //
   622 //
   647 void CMCSPluginEngine::LaunchBookmarkItemL( CMCSData& aData )
   623 void CMCSPluginEngine::LaunchBookmarkItemL( CMCSData& aData )
   648     {
   624     {
   649     StartEffect( KBrowserUid );
   625     StartEffect( KBrowserUid );
   650     
   626     
   651     CSchemeHandler* urlHandler = CSchemeHandler::NewL( *aData.Value());    
   627     CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value());    
   652     CleanupStack::PushL( urlHandler );
   628     CleanupStack::PushL( urlHandler );
   653     urlHandler->HandleUrlStandaloneL();
   629     urlHandler->HandleUrlStandaloneL();
   654     CleanupStack::PopAndDestroy( urlHandler );
   630     CleanupStack::PopAndDestroy( urlHandler );
   655     }
   631     }
   656 
   632 
   738     for ( TInt i = 0; i < count; i++ )
   714     for ( TInt i = 0; i < count; i++ )
   739         {
   715         {
   740         CMCSData& data( iPluginData->DataItemL( i ) );
   716         CMCSData& data( iPluginData->DataItemL( i ) );
   741         data.SetDirty( ETrue );
   717         data.SetDirty( ETrue );
   742         }
   718         }
       
   719     iPluginData->UpdateDataL();
   743     
   720     
   744     iPlugin.PublishL();
   721     iPlugin.PublishL();
   745     
   722     
   746     // Notification must be activated again
   723     // Notification must be activated again
   747     iNotifyWatcher->Cancel();
   724     iNotifyWatcher->Cancel();
   790 // ---------------------------------------------------------------------------
   767 // ---------------------------------------------------------------------------
   791 // CMCSPluginEngine::ShowSettingsL
   768 // CMCSPluginEngine::ShowSettingsL
   792 // Launch General Settings plugin
   769 // Launch General Settings plugin
   793 // ---------------------------------------------------------------------------
   770 // ---------------------------------------------------------------------------
   794 //
   771 //
   795 void CMCSPluginEngine::ShowSettingsL( const TInt aEditIdx )
   772 void CMCSPluginEngine::ShowSettingsL()
   796     { 
   773     { 
   797     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
   774     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
   798     
   775     
   799     // format the custom message
       
   800     // iInstanceUid/aEditIdx is the format
       
   801     TBuf8<KMaxCustomMsg> msg;
       
   802     msg.Append(iInstanceUid);
       
   803     if( aEditIdx != KUndefinedIndex )
       
   804         {
       
   805         msg.Append('//');
       
   806         msg.AppendFormat(_L8("%d"), aEditIdx);
       
   807         }
       
   808 
       
   809     CGSLauncher* launcher = CGSLauncher::NewLC();
   776     CGSLauncher* launcher = CGSLauncher::NewLC();
   810     launcher->LaunchGSViewL ( uid, KHomescreenUid, msg );
   777     launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
   811     CleanupStack::PopAndDestroy( launcher );
   778     CleanupStack::PopAndDestroy( launcher );
   812     }
   779     }
   813 
   780 
   814 // ---------------------------------------------------------------------------
   781 // ---------------------------------------------------------------------------
   815 // CMCSPluginEngine::ConstructMenuItemForIconL
   782 // CMCSPluginEngine::ConstructMenuItemForIconL