videocollection/videocollectionview/src/videooperatorservice.cpp
changeset 52 e3cecb93e76a
child 59 a76e86df7ccd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/videocollectionview/src/videooperatorservice.cpp	Wed Aug 18 09:50:14 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   VideoOperatorService class implementation.
+*
+*/
+
+// Version : 
+
+// INCLUDE FILES
+
+#include <qdesktopservices.h>
+#include <qurl.h>
+
+#include <e32base.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <apgcli.h>
+
+#include "videooperatorservice.h"
+#include "videocollectionviewutils.h"
+#include "videocollectioncenrepdefs.h"
+#include "videocollectiontrace.h"
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+VideoOperatorService::VideoOperatorService(QObject *parent) : 
+    QObject(parent)
+{
+    FUNC_LOG;
+}
+
+// ---------------------------------------------------------------------------
+// load
+// ---------------------------------------------------------------------------
+//
+bool VideoOperatorService::load(int titleKey, int iconKey, int serviceUriKey, int appUidKey)
+{
+    FUNC_LOG;
+    VideoCollectionViewUtils& utils = VideoCollectionViewUtils::instance();
+    
+    mTitle = utils.getCenRepStringValue(titleKey);
+    mIconResource = utils.getCenRepStringValue(iconKey);
+    mServiceUri = utils.getCenRepStringValue(serviceUriKey);
+    mApplicationUid = utils.getCenRepIntValue(appUidKey);
+    
+    // Icon is required, either service uri or application uid is required.
+    if(mIconResource.isEmpty() || (mServiceUri.isEmpty() && mApplicationUid <= 0))
+    {
+        return false;
+    }
+    
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+// title
+// ---------------------------------------------------------------------------
+//
+const QString VideoOperatorService::title() const
+{
+    return mTitle;
+}
+
+// ---------------------------------------------------------------------------
+// iconResource
+// ---------------------------------------------------------------------------
+//
+const QString VideoOperatorService::iconResource() const
+{
+    return mIconResource;
+}
+
+// ---------------------------------------------------------------------------
+// launchService
+// ---------------------------------------------------------------------------
+//
+void VideoOperatorService::launchService()
+{
+    FUNC_LOG;
+    
+    if(!mServiceUri.isEmpty())
+    {
+        INFOQSTR_1("VideoOperatorService::launchService() starting url: %S", mServiceUri);
+        QDesktopServices::openUrl(QUrl(mServiceUri));
+    }
+    else
+    {
+        INFO_1("VideoOperatorService::launchService() starting application 0x%x", mApplicationUid);
+        TRAP_IGNORE(launchApplicationL(TUid::Uid(mApplicationUid), 0));
+    }
+}
+
+// ---------------------------------------------------------------------------
+// launchApplicationL
+// ---------------------------------------------------------------------------
+//
+void VideoOperatorService::launchApplicationL(const TUid uid, TInt viewId)
+{
+    CEikonEnv *eikEnv = CEikonEnv::Static();
+    
+    if (viewId > 0 && eikEnv) {
+        TVwsViewId view(uid, TUid::Uid(viewId));
+        eikEnv->EikAppUi()->ActivateViewL(view);
+    } else 
+    {
+        RWsSession wsSession;
+        User::LeaveIfError(wsSession.Connect());
+        CleanupClosePushL<RWsSession>(wsSession);
+
+        // TApaAppInfo size is greater then 1024 bytes
+        // so its instances should not be created on the stack.
+        TApaAppInfo* appInfo = new (ELeave) TApaAppInfo;
+        CleanupStack::PushL(appInfo);
+        TApaAppCapabilityBuf capabilityBuf;
+        RApaLsSession appArcSession;
+        User::LeaveIfError(appArcSession.Connect());
+        CleanupClosePushL<RApaLsSession>(appArcSession);
+
+        User::LeaveIfError(appArcSession.GetAppInfo(*appInfo, uid));
+        User::LeaveIfError(appArcSession.GetAppCapability(
+           capabilityBuf, uid));
+
+        TApaAppCapability &caps = capabilityBuf();
+        CApaCommandLine *cmdLine = CApaCommandLine::NewLC();
+        cmdLine->SetExecutableNameL(appInfo->iFullName);
+
+        if (caps.iLaunchInBackground) {
+            cmdLine->SetCommandL(EApaCommandBackground);
+        } else {
+            cmdLine->SetCommandL(EApaCommandRun);
+        }
+
+        cmdLine->SetTailEndL(KNullDesC8);
+
+        User::LeaveIfError(appArcSession.StartApp(*cmdLine));
+
+        CleanupStack::PopAndDestroy(cmdLine);
+        CleanupStack::PopAndDestroy(&appArcSession);
+        CleanupStack::PopAndDestroy(appInfo);
+
+        CleanupStack::PopAndDestroy(&wsSession);
+    }
+}
+
+// End of file.