appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilitiescontent.cpp
changeset 60 245df5276b97
child 64 48c14c385b0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialoggrantcapabilitiescontent.cpp	Wed Aug 18 09:55:45 2010 +0300
@@ -0,0 +1,246 @@
+/*
+* 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: Grant capabilities dialog in SifUi
+*
+*/
+
+#include <sifuidialoggrantcapabilitiescontent.h> // SifUiDialogGrantCapabilitiesContent
+#include <QGraphicsLinearLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbScrollArea>
+#include <HbAction>
+#include <HbDialog>
+#ifdef Q_OS_SYMBIAN
+#include <s32mem.h>                     // TMemBuf
+#endif // Q_OS_SYMBIAN
+
+const QString KDetailsTextHtmlBeginList = "<html>%1<ul>";
+const QString KDetailsTextHtmlListItem = "<li>%1</li>";
+const QString KDetailsTextHtmlEndList = "</ul></html>";
+
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilitiesContent::SifUiDialogGrantCapabilitiesContent(
+    const QString& applicationName, const QVariant &capabilities, QGraphicsItem *parent)
+    : HbWidget(parent), mCapabilities(), mIsCapabilitiesValid(false)
+{
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    HbLabel *label = new HbLabel();
+    //TODO: localized UI string needed
+    //label->setPlainText(hbTrId("txt_").arg(applicationName));
+    label->setPlainText(tr("Application \"%1\" uses capabilities it is not signed for.")
+        .arg(applicationName));
+    label->setTextWrapping(Hb::TextWordWrap);
+    layout->addItem(label);
+    layout->addStretch();
+
+    //TODO: localized UI string needed
+    //HbPushButton *details = new HbPushButton(hbTrId("txt_"));
+    HbPushButton *details = new HbPushButton(tr("View details"));
+    connect(details, SIGNAL(clicked()), this, SLOT(viewDetails()));
+    layout->addItem(details);
+    layout->addStretch();
+
+    HbPushButton *accept = new HbPushButton;
+    //TODO: localized UI string needed
+    //accept->setText(hbTrId("txt_"));
+    accept->setText(tr("I trust the app"));
+    //TODO: localized UI string needed
+    //accept->setAdditionalText(hbTrId("txt_"));
+    accept->setAdditionalText(tr("Grant all permissions"));
+    connect(accept, SIGNAL(clicked()), this, SIGNAL(accepted()));
+    layout->addItem(accept);
+
+    HbPushButton *deny = new HbPushButton;
+    //TODO: localized UI string needed
+    //deny->setText(hbTrId("txt_"));
+    deny->setText(tr("I do not trust"));
+    //TODO: localized UI string needed
+    //deny->setAdditionalText(hbTrId("txt_"));
+    deny->setAdditionalText(tr("Cancel installation"));
+    connect(deny, SIGNAL(clicked()), this, SIGNAL(rejected()));
+    layout->addItem(deny);
+
+    setLayout(layout);
+    setCapabilities(capabilities);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogGrantCapabilitiesContent::~SifUiDialogGrantCapabilitiesContent()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::viewDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::viewDetails()
+{
+    HbDialog *detailsDialog= new HbDialog();
+    detailsDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+    detailsDialog->setTimeout(HbPopup::NoTimeout);
+    detailsDialog->setDismissPolicy(HbDialog::NoDismiss);
+    detailsDialog->setModal(true);
+
+    // TODO: localised UI string needed
+    QString detailsTitle = tr("Permission details");
+    detailsDialog->setHeadingWidget(new HbLabel(detailsTitle));
+
+    HbScrollArea *scrollArea = new HbScrollArea(this);
+
+    // TODO: localized UI string needed
+    QString detailsText = KDetailsTextHtmlBeginList.arg("The application has requested permissions to:");
+    QStringListIterator capaIter(mCapabilities);
+    while (capaIter.hasNext()) {
+        detailsText.append(KDetailsTextHtmlListItem.arg(capaIter.next()));
+    }
+    detailsText.append(KDetailsTextHtmlEndList);
+
+    HbLabel *detailsTextLabel = new HbLabel;
+    detailsTextLabel->setHtml(detailsText);
+    detailsTextLabel->setTextWrapping(Hb::TextWordWrap);
+
+    scrollArea->setContentWidget(detailsTextLabel);
+    scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
+    detailsDialog->setContentWidget(scrollArea);
+
+    HbAction *closeAction = new HbAction(hbTrId("txt_common_button_ok"));
+    detailsDialog->addAction(closeAction);
+
+    detailsDialog->show();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::setCapabilities()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::setCapabilities(const QVariant &capabilities)
+{
+#ifdef Q_OS_SYMBIAN
+    QByteArray byteArray = capabilities.toByteArray();
+    const TPtrC8 ptr(reinterpret_cast<const TText8*>(byteArray.constData()), byteArray.length());
+    QT_TRAP_THROWING(setCapabilitiesSymbianL(ptr));
+#endif  // Q_OS_SYMBIAN
+
+    if (!mIsCapabilitiesValid) {
+        emit rejected();
+    }
+}
+
+#ifdef Q_OS_SYMBIAN
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::setCapabilitiesSymbianL()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogGrantCapabilitiesContent::setCapabilitiesSymbianL( const TDesC8& aBuf )
+{
+    TMemBuf buf;
+    TUint8* ptr = const_cast<TUint8*>(aBuf.Ptr());
+    buf.Set(ptr, ptr + aBuf.Size(), MStreamBuf::ERead);
+    RReadStream readStream(&buf);
+    CleanupClosePushL(readStream);
+    TCapabilitySet capabilitySet;
+    TPckg<TCapabilitySet> capabilitySetPackage( capabilitySet );
+    readStream.ReadL(capabilitySetPackage);
+    CleanupStack::PopAndDestroy(&readStream);
+
+    mIsCapabilitiesValid = true;
+    for( TInt i = 0; i < ECapability_HardLimit && mIsCapabilitiesValid; i++ ) {
+        const TCapability capability( static_cast<TCapability>(i) );
+        if( capabilitySet.HasCapability(capability) ) {
+            QT_TRYCATCH_LEAVING( mCapabilities.append(capabilityName(capability)) );
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogGrantCapabilitiesContent::capabilityName()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogGrantCapabilitiesContent::capabilityName( const TCapability aCapability )
+{
+    QString name;
+
+    switch( aCapability ) {
+    case ECapabilityPowerMgmt:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityPowerMgmt");
+        break;
+    case ECapabilityReadDeviceData:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityReadDeviceData");
+        break;
+    case ECapabilityWriteDeviceData:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityWriteDeviceData");
+        break;
+    case ECapabilityTrustedUI:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityTrustedUI");
+        break;
+    case ECapabilityProtServ:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilityProtServ");
+        break;
+    case ECapabilitySwEvent:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilitySwEvent");
+        break;
+    case ECapabilityNetworkServices:
+        // TODO: localized UI string needed
+        name = tr("Make network connections or phone calls");
+        break;
+    case ECapabilityLocalServices:
+        // TODO: localized UI string needed
+        name = tr("Connect using local connectivity");
+        break;
+    case ECapabilityReadUserData:
+        // TODO: localized UI string needed
+        name = tr("Read user's personal data");
+        break;
+    case ECapabilityWriteUserData:
+        // TODO: localized UI string needed
+        name = tr("Modify user's personal data");
+        break;
+    case ECapabilityLocation:
+        // TODO: localized UI string needed
+        name = tr("Access the location information");
+        break;
+    case ECapabilitySurroundingsDD:
+        // TODO: is this user-grantable?
+        name = tr("ECapabilitySurroundingsDD");
+        break;
+    case ECapabilityUserEnvironment:
+        // TODO: localized UI string needed
+        name = tr("Access user environment");
+        break;
+
+    // Other capabilities are not user-grantable
+    default:
+        mIsCapabilitiesValid = false;
+        break;
+    }
+
+    return name;
+}
+#endif  // Q_OS_SYMBIAN
+