appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp
changeset 58 67f2119dc623
parent 55 ac7f90a6ff4c
child 64 48c14c385b0e
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp	Mon Jul 26 18:52:42 2010 +0300
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp	Fri Aug 06 10:59:22 2010 +0300
@@ -15,9 +15,10 @@
 *
 */
 
-#include "sifuidialog.h"
-#include "sifuidialogtitlewidget.h"
-#include "sifuidialogcontentwidget.h"
+#include "sifuidialog.h"                    // SifUiDialog
+#include "sifuidialogtitlewidget.h"         // SifUiDialogTitleWidget
+#include "sifuidialogcontentwidget.h"       // SifUiDialogContentWidget
+#include "sifuidialoggrantcapabilities.h"   // SifUiDialogGrantCapabilities
 #include "sifuiinstallindicatorparams.h"
 #include <QFile>
 #include <hblabel.h>
@@ -44,7 +45,8 @@
 SifUiDialog::SifUiDialog(const QVariantMap &parameters) : HbDialog(),
     mCommonTranslator(0), mSifUITranslator(0), mLastDialogError(KErrNone),
     mShowEventReceived(false), mDialogType(SifUiUnspecifiedDialog),
-    mTitle(0), mContent(0), mPrimaryAction(0), mSecondaryAction(0),
+    mTitle(0), mContent(0), mErrorDetails(), mErrorCode(KErrNone),
+    mExtendedErrorCode(KErrNone), mPrimaryAction(0), mSecondaryAction(0),
     mResultMap(), mIndicator(0), mSubscriber(0)
 {
     mCommonTranslator = new HbTranslator(KTranslationsPath, KCommonTranslationsFile);
@@ -200,24 +202,20 @@
 bool SifUiDialog::updateFromParameters(const QVariantMap &parameters)
 {
     SifUiDeviceDialogType prevDialogType = mDialogType;
-    mDialogType = dialogType(parameters);
-    if (mTitle)
-        {
-        mTitle->updateFromParameters(parameters);
-        }
-    if (mContent)
-        {
-        mContent->updateFromParameters(parameters);
+    if (!displayAdditionalQuery(parameters)) {
+        mDialogType = dialogType(parameters);
+        if (mTitle)
+            {
+            mTitle->updateFromParameters(parameters);
+            }
+        if (mContent)
+            {
+            mContent->updateFromParameters(parameters);
+            }
+        if (prevDialogType != mDialogType) {
+            updateButtons(parameters);
         }
-    if (prevDialogType != mDialogType) {
-        updateButtons(parameters);
-    }
-    if (parameters.contains(KSifUiErrorCode)) {
-        bool ok = false;
-        int errorCode = parameters.value(KSifUiErrorCode).toInt(&ok);
-        if (ok) {
-            mInstallError = errorCode;
-        }
+        prepareForErrorDetails(parameters);
     }
     return true;
 }
@@ -300,6 +298,49 @@
 }
 
 // ----------------------------------------------------------------------------
+// SifUiDialog::prepareForErrorDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::prepareForErrorDetails(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiErrorDetails)) {
+        mErrorDetails = parameters.value(KSifUiErrorDetails).toString();
+    }
+    if (parameters.contains(KSifUiErrorCode)) {
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCode).toInt(&ok);
+        if (ok) {
+            mErrorCode = errorCode;
+        }
+    }
+    if (parameters.contains(KSifUiErrorCodeExtended)) {
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCodeExtended).toInt(&ok);
+        if (ok) {
+            mExtendedErrorCode = errorCode;
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::displayAdditionalQuery()
+// ----------------------------------------------------------------------------
+//
+bool SifUiDialog::displayAdditionalQuery(const QVariantMap &parameters)
+{
+    if (parameters.contains(KSifUiGrantCapabilities)) {
+        SifUiDialogGrantCapabilities *dlg = new SifUiDialogGrantCapabilities(
+            mContent->applicationName(), parameters.value(KSifUiGrantCapabilities));
+        connect(dlg, SIGNAL(accepted()), this, SLOT(handleCapabilitiesGranted()));
+        connect(dlg, SIGNAL(declined()), this, SLOT(handleCapabilitiesDenied()));
+        dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+        dlg->open();
+        return true;
+    }
+    return false;
+}
+
+// ----------------------------------------------------------------------------
 // SifUiDialog::sendResult()
 // ----------------------------------------------------------------------------
 //
@@ -363,12 +404,7 @@
         bool result = request->send();
         if (result) {
             closeDeviceDialog(false);
-        } else {
-            // TODO: proper error handling
-            int error = request->lastError();
-            QString messageText = tr("Unable to open AppLib. Error %1").arg(error);
-            HbMessageBox::warning(messageText);
-        }
+        } // else error silently ignored
         delete request;
     }
 
@@ -381,13 +417,33 @@
 //
 void SifUiDialog::handleErrorDetails()
 {
-    // TODO: show proper error details dialog
-    QString messageText;
-    messageText = tr("Error code %1").arg(mInstallError);
+    QString messageText = mErrorDetails;
 
     if (QFile::exists(KSwiErrorsFile)) {
-        messageText.append(KSwiErrorFormat.arg(mInstallError));
+        messageText.append(KSwiErrorFormat.arg(mErrorCode));
+        if (mExtendedErrorCode) {
+            messageText.append(KSwiErrorFormat.arg(mExtendedErrorCode));
+        }
     }
+
     HbMessageBox::warning(messageText);
 }
 
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleCapabilitiesGranted()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleCapabilitiesGranted()
+{
+    sendResult(SifUiContinue);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialog::handleCapabilitiesDenied()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialog::handleCapabilitiesDenied()
+{
+    sendResult(SifUiCancel);
+}
+