--- 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<KCaMaxAttrValueLen> 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<KCaMaxAttrValueLen> 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<RWsSession>( 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<RApaLsSession>( 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<RWsSession> (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<RApaLsSession> (appArcSession);
+ RWsSession wsSession;
+ User::LeaveIfError( wsSession.Connect() );
+ CleanupClosePushL<RWsSession>( 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<RWsSession> (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);
-}
-