diff -r a5a39a295112 -r 8baec10861af idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Wed Sep 01 12:22:09 2010 +0100 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Tue Sep 14 21:55:16 2010 +0300 @@ -50,7 +50,6 @@ _LIT( KResourceFile, "mcspluginres.rsc" ); _LIT( KResPath, "\\resource\\" ); _LIT( KMMApplication, "mm://" ); -_LIT( KHideExit2, "&exit=hide" ); _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" ); _LIT( KApplicationGroupName, "applicationgroup_name" ); _LIT( KIcon, "icon" ); @@ -62,6 +61,7 @@ _LIT( KMenuMailboxMaskId, "16389" ); _LIT( KMenuTypeMailbox, "menu:mailbox" ); _LIT( KPrefix, "0x" ); +_LIT( KMenuAttrInvokeSettingsUid, "0x99999990" ); const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON }; const TUid KMMUid = { 0x101F4CD2 }; @@ -69,6 +69,10 @@ const TUid KMCSCmailMailboxViewIdValue = { 0x2 }; const TUid KBrowserUid = { 0x10008D39 }; +// maximum custom message length +const TInt KMaxCustomMsg = 256; +const TInt KUndefinedIndex = -1; + // ======== LOCAL FUNCTIONS ======== // ---------------------------------------------------------------------------- // NextIdToken @@ -355,7 +359,7 @@ { item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 ); CleanupStack::PushL( item ); - item->SetAttributeL( KMenuAttrLongName, aData.Name() ); + item->SetAttributeL( KMenuAttrLongName, *aData.Name() ); item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile ); item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId ); item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId ); @@ -375,7 +379,7 @@ { item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 ); CleanupStack::PushL( item ); - item->SetAttributeL( KMenuAttrLongName, aData.Name() ); + item->SetAttributeL( KMenuAttrLongName, *aData.Name() ); item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile ); item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId ); item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId ); @@ -403,7 +407,14 @@ TUint32 isHidden = flags & TMenuItem::EHidden; TUint32 isMissing = flags & TMenuItem::EMissing; - if ( iUndefinedItem && ( isHidden || isMissing ) ) + TBool attrExists = ETrue; + TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists); + + // if item is hidden or missing (mmc card removed) + // use "Undefined" icon instead + // for empty item it's own icon is shown + if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && + ( isHidden || isMissing ) ) { menuItem = iUndefinedItem; } @@ -471,9 +482,14 @@ TUint32 isHidden = flags & TMenuItem::EHidden; TUint32 isMissing = flags & TMenuItem::EMissing; + TBool attrExists = ETrue; + TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists); + // if item is hidden or missing (mmc card removed) // use "Undefined" text instead - if ( iUndefinedItem && ( isHidden || isMissing ) ) + // for empty item it's own icon is shown + if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && + ( isHidden || isMissing ) ) { menuItem = iUndefinedItem; } @@ -532,7 +548,23 @@ } else { - LaunchMCSItemL( dataItem ); + CMenuItem* item(CMenuItem::OpenL(iMenu, dataItem.MenuItem().Id())); + CleanupStack::PushL(item); + + TBool attrExists = ETrue; + + TPtrC uid = item->GetAttributeL(KMenuAttrUid, attrExists); + + // Show selected shortcut settings + if (uid.Compare(KMenuAttrInvokeSettingsUid) == 0) + { + TRAP_IGNORE( ShowSettingsL(aIndex + 1) ); + } + else + { + LaunchMCSItemL(dataItem); + } + CleanupStack::PopAndDestroy(item); } } @@ -567,18 +599,17 @@ if ( !hasApplicationGroupName ) { + CleanupStack::PopAndDestroy( item ); return; } message = HBufC8::NewLC( KMMApplication().Length() + KSetFocusString().Length() + - applicationGroupName.Length() + - KHideExit2().Length() ); + applicationGroupName.Length() ); message->Des().Copy( KMMApplication ); message->Des().Append( KSetFocusString ); message->Des().Append( applicationGroupName ); - message->Des().Append( KHideExit2 ); // find MM application TApaTaskList taskList( CCoeEnv::Static()->WsSession() ); @@ -624,7 +655,7 @@ { StartEffect( KBrowserUid ); - CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value()); + CSchemeHandler* urlHandler = CSchemeHandler::NewL( *aData.Value()); CleanupStack::PushL( urlHandler ); urlHandler->HandleUrlStandaloneL(); CleanupStack::PopAndDestroy( urlHandler ); @@ -768,12 +799,22 @@ // Launch General Settings plugin // --------------------------------------------------------------------------- // -void CMCSPluginEngine::ShowSettingsL() +void CMCSPluginEngine::ShowSettingsL( const TInt aEditIdx ) { TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN}; + // format the custom message + // iInstanceUid/aEditIdx is the format + TBuf8 msg; + msg.Append(iInstanceUid); + if( aEditIdx != KUndefinedIndex ) + { + msg.Append('//'); + msg.AppendFormat(_L8("%d"), aEditIdx); + } + CGSLauncher* launcher = CGSLauncher::NewLC(); - launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid ); + launcher->LaunchGSViewL ( uid, KHomescreenUid, msg ); CleanupStack::PopAndDestroy( launcher ); }