emailuis/nmailui/src/nmviewerserviceinterface.cpp
branchRCL_3
changeset 63 d189ee25cf9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/nmailui/src/nmviewerserviceinterface.cpp	Tue Aug 31 15:04:17 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: NMail application service interface used for viewing a mail
+*              according to given id. The service utilizes the Qt highway framework.
+*/
+
+//  INCLUDES
+#include "nmuiheaders.h" // Includes also the class header.
+
+
+/*!
+    \class NmViewerServiceInterface
+    \brief A service interface for displaying the message according to given id.
+*/
+
+
+/*!
+    Class constructor.
+*/
+NmViewerServiceInterface::NmViewerServiceInterface(QObject *parent,
+        NmApplication *application,
+        NmUiEngine &uiEngine)
+    : XQServiceProvider(emailFullServiceNameMessage, parent),
+      mApplication(application),
+      mUiEngine(uiEngine),
+      mAsyncReqId(0)
+{
+    publishAll();
+}
+
+
+/*!
+    Class desctructor.
+*/
+NmViewerServiceInterface::~NmViewerServiceInterface()
+{
+    NM_FUNCTION;
+}
+
+
+/*!
+    Opens view to the specific message
+ */
+void NmViewerServiceInterface::viewMessage(QVariant mailboxId, QVariant folderId, QVariant messageId)
+{
+    NM_FUNCTION;
+
+    mAsyncReqId = setCurrentRequestAsync();
+    NmId mailboxNmId(0);
+    mailboxNmId = mailboxId.toULongLong();   
+    NmId messageNmId(0);
+    messageNmId = messageId.toULongLong(); 
+    NmId folderNmId(0);
+    folderNmId = folderId.toULongLong();
+
+	// Make sure the app stays background if user presses back in viewer view
+	bool visible = mApplication->updateVisibilityState();
+
+    NmMessage *message = mUiEngine.message( mailboxNmId, folderNmId, messageNmId );
+    if (message) {
+        // bring application to foreground
+        if (!XQServiceUtil::isEmbedded()) {
+            XQServiceUtil::toBackground(false);
+        }
+        HbMainWindow *mainWindow = mApplication->mainWindow();
+        mainWindow->show();
+
+        // Launch the message list view.
+        NmUiStartParam *startParam1 = 
+            new NmUiStartParam(NmUiViewMessageList,
+                               mailboxNmId,
+                               folderNmId, // folder id
+                               messageNmId, // message id
+                               NmUiEditorCreateNew, // editor start mode
+                               NULL, // address list
+                               NULL, // attachment list
+                               true); // start as service
+        mApplication->enterNmUiView(startParam1);
+        
+        // Launch the message view.
+        NmUiStartParam *startParam =
+            new NmUiStartParam(NmUiViewMessageViewer,
+                               mailboxNmId,
+                               folderNmId, // folder id
+                               messageNmId, // message id
+                               NmUiEditorCreateNew, // editor start mode
+                               NULL, // address list
+                               NULL, // attachment list
+                               false); // not started as service
+        mApplication->enterNmUiView(startParam);
+
+        completeRequest(mAsyncReqId,0);
+    }
+    else {
+        // Message was not found
+
+        // if started as embedded, do not hide the app
+		if (!XQServiceUtil::isEmbedded() && !visible) {
+			XQServiceUtil::toBackground(true);
+		}
+
+        completeRequest(mAsyncReqId,1);
+
+        // Close the application if started as service
+        if (XQServiceUtil::isService()) {
+            // Exit the application when the return value is delivered
+            connect(this, SIGNAL(returnValueDelivered()),
+                    mApplication, SLOT(delayedExitApplication()));
+        }
+    }
+}
+
+// End of file.