diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cahandler/app/src/caapphandler.cpp --- a/contentstorage/cahandler/app/src/caapphandler.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/cahandler/app/src/caapphandler.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -27,6 +27,7 @@ #include "caapphandler.h" #include "cainnerentry.h" #include "cauninstalloperation.h" +#include"catasklist.h" #include "cautils.h" #include "cadef.h" @@ -49,9 +50,9 @@ CCaAppHandler *CCaAppHandler::NewL() { CCaAppHandler *handler = new(ELeave) CCaAppHandler(); - CleanupStack::PushL(handler); + CleanupStack::PushL( handler ); handler->ConstructL(); - CleanupStack::Pop(handler); + CleanupStack::Pop( handler ); return handler; } @@ -73,40 +74,113 @@ { } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCaAppHandler::HandleCommandL( + CCaInnerEntry &aEntry, const TDesC8 &aCommand ) +{ + if( aCommand == KCaCmdOpen() + && aEntry.GetEntryTypeName() == KCaTypeApp() ) + { + TInt viewId(-1); + TBuf viewIdValue; + if( aEntry.FindAttribute( KCaAttrView(), viewIdValue ) ) + { + if( MenuUtils::GetTUint( viewIdValue, (TUint &) viewId ) + != KErrNone ) + { + User::Leave( KErrCorrupt ); + } + } + LaunchApplicationL( + TUid::Uid( aEntry.GetUid() ), KNullDesC8(), viewId ); + } + else if ( aCommand == KCaCmdClose() + && aEntry.GetEntryTypeName() == KCaTypeApp() ) + { + CloseApplicationL( aEntry ); + } + else if ( aCommand == KCaCmdRemove() + && ( aEntry.GetEntryTypeName() == KCaTypeApp() + || aEntry.GetEntryTypeName() == KCaTypeWidget() ) ) + { + if ( iUninstallOperation && iUninstallOperation->IsActive() ) + { + User::Leave( KErrInUse ); + } + delete iUninstallOperation; + iUninstallOperation = NULL; + iUninstallOperation = CCaUninstallOperation::NewL( aEntry ); + } + else + { + User::Leave( KErrNotSupported ); + } +} // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CCaAppHandler::HandleCommandL(CCaInnerEntry &aEntry, - const TDesC8 &aCommand) +void CCaAppHandler::LaunchApplicationL( + const TUid aUid, const TDesC8 &aParam, TInt aViewId ) { - if (aCommand == KCaCmdOpen() && aEntry.GetEntryTypeName() - == KCaTypeApp()) { - TInt viewId(-1); - TBuf viewIdValue; - if (aEntry.FindAttribute(KCaAttrView(), viewIdValue)) { - if (MenuUtils::GetTUint(viewIdValue, (TUint &) viewId) - != KErrNone) { - User::Leave(KErrCorrupt); - } + if( aViewId > 0 && iEikEnv ) + { + TUid viewId = TUid::Uid( aViewId ); + TVwsViewId view( aUid, viewId ); + iEikEnv->EikAppUi()->ActivateViewL( view ); } - LaunchApplicationL(TUid::Uid(aEntry.GetUid()), KNullDesC8(), - viewId); - } else if (aCommand == KCaCmdClose() && aEntry.GetEntryTypeName() - == KCaTypeApp()) { - CloseApplicationL(aEntry); - } else if (aCommand == KCaCmdRemove() - && (aEntry.GetEntryTypeName() == KCaTypeApp() - || aEntry.GetEntryTypeName() == KCaTypeWidget())) { - if (iUninstallOperation && iUninstallOperation->IsActive()) { - User::Leave(KErrInUse); + else + { + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CCaTaskList* taskList = CCaTaskList::NewLC( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); + CleanupStack::PopAndDestroy( taskList ); + + if( task.Exists() ) + { + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + TApaAppCapabilityBuf capabilityBuf; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + User::LeaveIfError( appArcSession.GetAppInfo( appInfo, aUid ) ); + User::LeaveIfError( appArcSession.GetAppCapability( + capabilityBuf, aUid ) ); + + TApaAppCapability &caps = capabilityBuf(); + TFileName appName = appInfo.iFullName; + CApaCommandLine *cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL( appName ); + + if( caps.iLaunchInBackground ) + { + cmdLine->SetCommandL( EApaCommandBackground ); + } + else + { + cmdLine->SetCommandL( EApaCommandRun ); + } + + cmdLine->SetTailEndL( aParam ); + + User::LeaveIfError( appArcSession.StartApp( *cmdLine ) ); + + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy( &appArcSession ); } - delete iUninstallOperation; - iUninstallOperation = NULL; - iUninstallOperation = CCaUninstallOperation::NewL(aEntry); - } else { - User::Leave(KErrNotSupported); + CleanupStack::PopAndDestroy( &wsSession ); } } @@ -114,85 +188,33 @@ // // --------------------------------------------------------------------------- // -void CCaAppHandler::LaunchApplicationL(const TUid aUid, - const TDesC8 &aParam, TInt aViewId) +void CCaAppHandler::CloseApplicationL( CCaInnerEntry &aEntry ) { - if (aViewId > 0 && iEikEnv) { - TUid viewId = TUid::Uid(aViewId); - TVwsViewId view(aUid, viewId); - iEikEnv->EikAppUi()->ActivateViewL(view); - } else { - RWsSession wsSession; - User::LeaveIfError(wsSession.Connect()); - CleanupClosePushL (wsSession); - - CAknTaskList *taskList = CAknTaskList::NewL(wsSession); - TApaTask task = taskList->FindRootApp(aUid); - delete taskList; - - if (task.Exists()) { - task.BringToForeground(); - } else { - TApaAppInfo appInfo; - TApaAppCapabilityBuf capabilityBuf; - RApaLsSession appArcSession; - User::LeaveIfError(appArcSession.Connect()); - CleanupClosePushL (appArcSession); + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); - User::LeaveIfError(appArcSession.GetAppInfo(appInfo, aUid)); - User::LeaveIfError(appArcSession.GetAppCapability( - capabilityBuf, aUid)); - - TApaAppCapability &caps = capabilityBuf(); - TFileName appName = appInfo.iFullName; - CApaCommandLine *cmdLine = CApaCommandLine::NewLC(); - cmdLine->SetExecutableNameL(appName); + if( ( aEntry.GetFlags() & ERunning ) + && !( aEntry.GetFlags() & ESystem ) ) + { + RBuf value; + CleanupClosePushL( value ); + value.CreateL( KCaMaxAttrValueLen ); + if( aEntry.FindAttribute( KCaAttrWindowGroupId, value ) ) + { + TInt wgId( KErrNotFound ); + TLex16 parser( value ); + if( KErrNone == parser.Val( wgId ) && wgId > 0 ) + { + TWsEvent event; + event.SetTimeNow(); + event.SetType( KAknShutOrHideApp ); + wsSession.SendEventToWindowGroup( wgId, event ); + } + } + CleanupStack::PopAndDestroy( &value ); + } - if (caps.iLaunchInBackground) { - cmdLine->SetCommandL(EApaCommandBackground); - } else { - cmdLine->SetCommandL(EApaCommandRun); - } - - cmdLine->SetTailEndL(aParam); - - User::LeaveIfError(appArcSession.StartApp(*cmdLine)); - - CleanupStack::PopAndDestroy(cmdLine); - CleanupStack::PopAndDestroy(&appArcSession); - } - CleanupStack::PopAndDestroy(&wsSession); - } + CleanupStack::PopAndDestroy( &wsSession ); } -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CCaAppHandler::CloseApplicationL(CCaInnerEntry &aEntry) -{ - RWsSession wsSession; - User::LeaveIfError(wsSession.Connect()); - CleanupClosePushL (wsSession); - - if ((aEntry.GetFlags() & ERunning) && - (!(aEntry.GetFlags() & ESystem))) { - RBuf value; - CleanupClosePushL(value); - value.CreateL(KCaMaxAttrValueLen); - if (aEntry.FindAttribute(KCaAttrWindowGroupId, value)) { - TInt wgId(KErrNotFound); - TLex16 parser(value); - if (KErrNone == parser.Val(wgId) && wgId > 0) { - TWsEvent event; - event.SetTimeNow(); - event.SetType(KAknShutOrHideApp); - wsSession.SendEventToWindowGroup(wgId, event); - } - } - CleanupStack::PopAndDestroy(&value); - } - - CleanupStack::PopAndDestroy(&wsSession); -} -