idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp
branchRCL_3
changeset 118 8baec10861af
parent 114 a5a39a295112
child 122 6cadd6867c17
equal deleted inserted replaced
114:a5a39a295112 118:8baec10861af
    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( KHideExit2, "&exit=hide" );
       
    54 _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
    53 _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
    55 _LIT( KApplicationGroupName, "applicationgroup_name" );
    54 _LIT( KApplicationGroupName, "applicationgroup_name" );
    56 _LIT( KIcon, "icon" );
    55 _LIT( KIcon, "icon" );
    57 _LIT( KMenuAttrUndefUid, "0x99999991" );
    56 _LIT( KMenuAttrUndefUid, "0x99999991" );
    58 _LIT( KMenuIconFile, "aimcsplugin.mif" );
    57 _LIT( KMenuIconFile, "aimcsplugin.mif" );
    60 _LIT( KMenuBookmarkMaskId, "16387" );
    59 _LIT( KMenuBookmarkMaskId, "16387" );
    61 _LIT( KMenuMailboxIconId, "16388" );
    60 _LIT( KMenuMailboxIconId, "16388" );
    62 _LIT( KMenuMailboxMaskId, "16389" );
    61 _LIT( KMenuMailboxMaskId, "16389" );
    63 _LIT( KMenuTypeMailbox, "menu:mailbox" );
    62 _LIT( KMenuTypeMailbox, "menu:mailbox" );
    64 _LIT( KPrefix, "0x" );
    63 _LIT( KPrefix, "0x" );
       
    64 _LIT( KMenuAttrInvokeSettingsUid, "0x99999990" );
    65 
    65 
    66 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
    66 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
    67 const TUid KMMUid = { 0x101F4CD2 };
    67 const TUid KMMUid = { 0x101F4CD2 };
    68 const TUid KMCSCmailUidValue = { 0x2001E277 };
    68 const TUid KMCSCmailUidValue = { 0x2001E277 };
    69 const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
    69 const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
    70 const TUid KBrowserUid = { 0x10008D39 };
    70 const TUid KBrowserUid = { 0x10008D39 };
       
    71 
       
    72 // maximum custom message length
       
    73 const TInt KMaxCustomMsg = 256;
       
    74 const TInt KUndefinedIndex = -1;
    71 
    75 
    72 // ======== LOCAL FUNCTIONS ========
    76 // ======== LOCAL FUNCTIONS ========
    73 // ----------------------------------------------------------------------------
    77 // ----------------------------------------------------------------------------
    74 // NextIdToken
    78 // NextIdToken
    75 // ----------------------------------------------------------------------------
    79 // ----------------------------------------------------------------------------
   353     CMenuItem* item( NULL );
   357     CMenuItem* item( NULL );
   354     if( aData.MenuItem().Id() != KErrNotFound )
   358     if( aData.MenuItem().Id() != KErrNotFound )
   355         {        
   359         {        
   356         item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
   360         item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
   357         CleanupStack::PushL( item );
   361         CleanupStack::PushL( item );
   358         item->SetAttributeL( KMenuAttrLongName, aData.Name() );
   362         item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
   359         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   363         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   360         item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
   364         item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
   361         item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
   365         item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
   362         CleanupStack::Pop( item );
   366         CleanupStack::Pop( item );
   363         }
   367         }
   373     CMenuItem* item( NULL );
   377     CMenuItem* item( NULL );
   374     if( aData.MenuItem().Id() != KErrNotFound )
   378     if( aData.MenuItem().Id() != KErrNotFound )
   375         {   
   379         {   
   376         item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
   380         item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
   377         CleanupStack::PushL( item );
   381         CleanupStack::PushL( item );
   378         item->SetAttributeL( KMenuAttrLongName, aData.Name() );
   382         item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
   379         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   383         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
   380         item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
   384         item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
   381         item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
   385         item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
   382         CleanupStack::Pop( item );
   386         CleanupStack::Pop( item );
   383         }
   387         }
   401         { 
   405         { 
   402         TUint32 flags = aMenuItem->Flags();
   406         TUint32 flags = aMenuItem->Flags();
   403         TUint32 isHidden = flags & TMenuItem::EHidden;
   407         TUint32 isHidden = flags & TMenuItem::EHidden;
   404         TUint32 isMissing = flags & TMenuItem::EMissing;
   408         TUint32 isMissing = flags & TMenuItem::EMissing;
   405 
   409 
   406         if ( iUndefinedItem && ( isHidden || isMissing ) )
   410         TBool attrExists = ETrue;
       
   411         TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
       
   412                 
       
   413         // if item is hidden or missing (mmc card removed)
       
   414         // use "Undefined" icon instead
       
   415         // for empty item it's own icon is shown
       
   416         if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
       
   417                 ( isHidden || isMissing ) )
   407             {
   418             {
   408             menuItem = iUndefinedItem;
   419             menuItem = iUndefinedItem;
   409             }
   420             }
   410         else
   421         else
   411             {
   422             {
   469         {
   480         {
   470         TUint32 flags = aMenuItem->Flags();
   481         TUint32 flags = aMenuItem->Flags();
   471         TUint32 isHidden = flags & TMenuItem::EHidden;
   482         TUint32 isHidden = flags & TMenuItem::EHidden;
   472         TUint32 isMissing = flags & TMenuItem::EMissing;
   483         TUint32 isMissing = flags & TMenuItem::EMissing;
   473 
   484 
       
   485         TBool attrExists = ETrue;
       
   486         TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
       
   487                 
   474         // if item is hidden or missing (mmc card removed)
   488         // if item is hidden or missing (mmc card removed)
   475         // use "Undefined" text instead
   489         // use "Undefined" text instead
   476         if ( iUndefinedItem && ( isHidden || isMissing ) )
   490         // for empty item it's own icon is shown
       
   491         if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
       
   492                 ( isHidden || isMissing ) )
   477             {
   493             {
   478             menuItem = iUndefinedItem;
   494             menuItem = iUndefinedItem;
   479             }
   495             }
   480         else
   496         else
   481             {
   497             {
   530         {
   546         {
   531         LaunchMailboxItemL( dataItem );
   547         LaunchMailboxItemL( dataItem );
   532         }
   548         }
   533     else
   549     else
   534         {
   550         {
   535         LaunchMCSItemL( dataItem );
   551         CMenuItem* item(CMenuItem::OpenL(iMenu, dataItem.MenuItem().Id()));
       
   552         CleanupStack::PushL(item);
       
   553         
       
   554         TBool attrExists = ETrue;
       
   555         
       
   556         TPtrC uid = item->GetAttributeL(KMenuAttrUid, attrExists);
       
   557         
       
   558         // Show selected shortcut settings
       
   559         if (uid.Compare(KMenuAttrInvokeSettingsUid) == 0)
       
   560             {
       
   561             TRAP_IGNORE( ShowSettingsL(aIndex + 1) );
       
   562             }
       
   563         else
       
   564             {
       
   565             LaunchMCSItemL(dataItem);
       
   566             }
       
   567         CleanupStack::PopAndDestroy(item);
   536         }
   568         }
   537     }
   569     }
   538 
   570 
   539 // ---------------------------------------------------------------------------
   571 // ---------------------------------------------------------------------------
   540 // 
   572 // 
   565     TPtrC applicationGroupName( item->GetAttributeL(
   597     TPtrC applicationGroupName( item->GetAttributeL(
   566         KApplicationGroupName, hasApplicationGroupName ) );
   598         KApplicationGroupName, hasApplicationGroupName ) );
   567                                                       
   599                                                       
   568     if ( !hasApplicationGroupName )
   600     if ( !hasApplicationGroupName )
   569         {
   601         {
       
   602         CleanupStack::PopAndDestroy( item );
   570         return;
   603         return;
   571         }
   604         }
   572     
   605     
   573     message = HBufC8::NewLC( KMMApplication().Length() + 
   606     message = HBufC8::NewLC( KMMApplication().Length() + 
   574                              KSetFocusString().Length() +
   607                              KSetFocusString().Length() +
   575                              applicationGroupName.Length() + 
   608                              applicationGroupName.Length() );
   576                              KHideExit2().Length() );
       
   577 
   609 
   578     message->Des().Copy( KMMApplication );
   610     message->Des().Copy( KMMApplication );
   579     message->Des().Append( KSetFocusString );
   611     message->Des().Append( KSetFocusString );
   580     message->Des().Append( applicationGroupName );
   612     message->Des().Append( applicationGroupName );
   581     message->Des().Append( KHideExit2 );
       
   582 
   613 
   583     // find MM application
   614     // find MM application
   584     TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
   615     TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
   585     TApaTask task( taskList.FindApp( KMMUid ) );
   616     TApaTask task( taskList.FindApp( KMMUid ) );
   586 
   617 
   622 //
   653 //
   623 void CMCSPluginEngine::LaunchBookmarkItemL( CMCSData& aData )
   654 void CMCSPluginEngine::LaunchBookmarkItemL( CMCSData& aData )
   624     {
   655     {
   625     StartEffect( KBrowserUid );
   656     StartEffect( KBrowserUid );
   626     
   657     
   627     CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value());    
   658     CSchemeHandler* urlHandler = CSchemeHandler::NewL( *aData.Value());    
   628     CleanupStack::PushL( urlHandler );
   659     CleanupStack::PushL( urlHandler );
   629     urlHandler->HandleUrlStandaloneL();
   660     urlHandler->HandleUrlStandaloneL();
   630     CleanupStack::PopAndDestroy( urlHandler );
   661     CleanupStack::PopAndDestroy( urlHandler );
   631     }
   662     }
   632 
   663 
   766 // ---------------------------------------------------------------------------
   797 // ---------------------------------------------------------------------------
   767 // CMCSPluginEngine::ShowSettingsL
   798 // CMCSPluginEngine::ShowSettingsL
   768 // Launch General Settings plugin
   799 // Launch General Settings plugin
   769 // ---------------------------------------------------------------------------
   800 // ---------------------------------------------------------------------------
   770 //
   801 //
   771 void CMCSPluginEngine::ShowSettingsL()
   802 void CMCSPluginEngine::ShowSettingsL( const TInt aEditIdx )
   772     { 
   803     { 
   773     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
   804     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
   774     
   805     
       
   806     // format the custom message
       
   807     // iInstanceUid/aEditIdx is the format
       
   808     TBuf8<KMaxCustomMsg> msg;
       
   809     msg.Append(iInstanceUid);
       
   810     if( aEditIdx != KUndefinedIndex )
       
   811         {
       
   812         msg.Append('//');
       
   813         msg.AppendFormat(_L8("%d"), aEditIdx);
       
   814         }
       
   815 
   775     CGSLauncher* launcher = CGSLauncher::NewLC();
   816     CGSLauncher* launcher = CGSLauncher::NewLC();
   776     launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
   817     launcher->LaunchGSViewL ( uid, KHomescreenUid, msg );
   777     CleanupStack::PopAndDestroy( launcher );
   818     CleanupStack::PopAndDestroy( launcher );
   778     }
   819     }
   779 
   820 
   780 // ---------------------------------------------------------------------------
   821 // ---------------------------------------------------------------------------
   781 // CMCSPluginEngine::ConstructMenuItemForIconL
   822 // CMCSPluginEngine::ConstructMenuItemForIconL