coreapplicationuis/SysAp/Src/hbdeviceinputdialogsymbian.cpp
changeset 61 224b21efc2d4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/hbdeviceinputdialogsymbian.cpp	Fri Aug 20 13:36:26 2010 +0300
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbWidgets module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include "hbdeviceinputdialogsymbian.h"
+
+#include <hbsymbianvariant.h>
+#include <hbdevicedialogsymbian.h>
+#include <coreapplicationuisdomainpskeys.h>
+
+#define ARG_UNUSED(x) (void)x;
+
+//_LIT(KDialogText, "text");
+
+enum TInputDialogPanic {
+    ELineEditPanic,
+    EPropertyPanic,
+    EButtonIdPanic
+};
+
+NONSHARABLE_CLASS(CHbDeviceInputDialogPrivate)  : public CBase, public MHbDeviceDialogObserver
+{
+public:
+
+    void ConstructL(MHbDeviceInputDialogObserver *aObserver);
+    ~CHbDeviceInputDialogPrivate();
+    
+    void SetButtonNull(CHbDeviceInputDialogSymbian::TButtonId aButtonId, bool aValue);
+    void SetButtonTextL(CHbDeviceInputDialogSymbian::TButtonId aButtonId, const TDesC &aValue);
+    void SendToServerL(bool aShow = false);
+    void Close();
+    bool WaitForClosed();
+    void AddVariantL(const TDesC& aKey, const TAny* aData,CHbSymbianVariant::TType aDataType, CHbSymbianVariantMap* map);
+
+public: // MHbDeviceDialogObserver
+    void DataReceived(CHbSymbianVariantMap& aData);
+    void DeviceDialogClosed(TInt aCompletionCode);
+
+public: // data
+
+    CHbDeviceInputDialogSymbian *q;
+    CHbDeviceDialogSymbian *mDeviceDialog;
+    bool mShowCalled;
+    CHbDeviceInputDialogSymbian::TButtonId mReceivedButton;
+    MHbDeviceInputDialogObserver *mObserver;
+    CHbSymbianVariantMap* iVariantMap;
+    
+    bool *mDeleted;
+    CActiveSchedulerWait mActiveSchedulerWait;
+};
+
+
+void CHbDeviceInputDialogPrivate::ConstructL(MHbDeviceInputDialogObserver *aObserver)
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::ConstructL::Begin") ) );
+    mDeviceDialog = CHbDeviceDialogSymbian::NewL();
+    iVariantMap = CHbSymbianVariantMap::NewL();
+    
+    
+
+    mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+    mObserver = aObserver;
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::ConstructL::End") ) );
+}
+
+// Destructor
+CHbDeviceInputDialogPrivate::~CHbDeviceInputDialogPrivate()
+{
+    // If no observer, remove observer from device dialog. This leaves the
+    // dialog widget executing at server when client closes connection.
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Destructor::Begin") ) );
+    if (!mObserver) {
+        mDeviceDialog->SetObserver(0);
+    }
+    
+    delete mDeviceDialog;
+    delete iVariantMap;
+
+    // Set object deleted flag
+    if (mDeleted) {
+        // Mark the object as deleted.
+        *mDeleted = true;
+        mDeleted = 0;
+    }
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Destructor::End") ) );
+}
+
+void CHbDeviceInputDialogPrivate::AddVariantL(const TDesC& aKey,const TAny* aData,CHbSymbianVariant::TType aDataType,CHbSymbianVariantMap* map )
+    {
+    CHbSymbianVariant *variant = CHbSymbianVariant::NewL(aData, aDataType);
+    CleanupStack::PushL(variant);
+    User::LeaveIfError(map->Add(aKey, variant));
+    CleanupStack::Pop(variant);
+    }
+
+// Send properties to server. Show or update.
+void CHbDeviceInputDialogPrivate::SendToServerL(bool /* aShow */)
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::SendToServerL::Begin") ) );
+    _LIT(KDeviceDialogType, "com.nokia.hb.deviceinputdialog/1.0");
+    TInt error;
+    mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+    error = mDeviceDialog->Show(KDeviceDialogType, *iVariantMap, this);
+    User::LeaveIfError(error);
+    mShowCalled = true;
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::SendToServerL::End") ) );
+}
+
+
+// Close input dialog
+void CHbDeviceInputDialogPrivate::Close()
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Close::Begin") ) );
+    mDeviceDialog->Cancel();
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::Close::End") ) );
+}
+
+// Wait for input dialog to close
+bool CHbDeviceInputDialogPrivate::WaitForClosed()
+{
+    // Returns true if object was not deleted during wait
+    if (!mShowCalled) {
+        return true;
+    }
+    return true;
+}
+
+// Observer, data received from device input dialog
+void CHbDeviceInputDialogPrivate::DataReceived(CHbSymbianVariantMap& aData)
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DataReceived::Begin") ) );
+    mReceivedButton = CHbDeviceInputDialogSymbian::ERejectButton;
+    _LIT(KKeyOk, "ok");
+    _LIT(KKeyCancel, "cancel");
+    const CHbSymbianVariant* variantOk = aData.Get(KKeyOk);
+    const CHbSymbianVariant* variantCancel = aData.Get(KKeyCancel);
+    if (variantOk) 
+    {
+        const TDesC *value = variantOk->Value<const TDesC>();
+        q->iPassword = *value;
+        mReceivedButton = CHbDeviceInputDialogSymbian::EAcceptButton;
+        RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsMemoryCardCustomDialogOk );
+    }
+    else if(variantCancel)
+    {
+      const TDesC *value = variantCancel->Value<const TDesC>();
+    q->iPassword = *value;
+    mReceivedButton = CHbDeviceInputDialogSymbian::EAcceptButton;
+    RProperty::Set( KPSUidCoreApplicationUIs, KCoreAppUIsPowerMenuCustomDialogStatus, ECoreAppUIsMemoryCardCustomDialogCancel);
+    }
+    	    	
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DataReceived::End") ) );
+}
+
+// Observer, device input dialog closed
+void CHbDeviceInputDialogPrivate::DeviceDialogClosed(TInt aCompletionCode)
+{
+    ARG_UNUSED(aCompletionCode)
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DeviceDialogClosed::Begin") ) );
+
+    mShowCalled = false;
+    
+        
+    if (mObserver) {
+        mObserver->InputDialogClosed(q, mReceivedButton);
+            return; // observer callback deleted this object. Do not touch it anymore.
+    }
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogPrivate::DeviceDialogClosed::End") ) );
+}
+
+// Constructor
+CHbDeviceInputDialogSymbian::CHbDeviceInputDialogSymbian()
+{
+}
+
+// Destructor
+CHbDeviceInputDialogSymbian::~CHbDeviceInputDialogSymbian()
+{
+    delete d;
+}
+
+CHbDeviceInputDialogSymbian* CHbDeviceInputDialogSymbian::NewL(MHbDeviceInputDialogObserver *aObserver)
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::NewL::Begin") ) );
+    ARG_UNUSED(aObserver)
+    CHbDeviceInputDialogSymbian *inputDialog = new (ELeave) CHbDeviceInputDialogSymbian;
+    CleanupStack::PushL(inputDialog);
+    CHbDeviceInputDialogPrivate *idialogPrivate = new (ELeave) CHbDeviceInputDialogPrivate;
+    idialogPrivate->q = inputDialog;
+    CleanupStack::PushL(idialogPrivate);
+    idialogPrivate->ConstructL( aObserver);
+    inputDialog->d = idialogPrivate;
+    CleanupStack::Pop(2); // inputDialog, idialogPrivate
+    inputDialog->SetObserver(aObserver);
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::NewL::End") ) );
+    return inputDialog;
+}
+
+
+void CHbDeviceInputDialogSymbian::ShowL()
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::ShowL::Begin") ) );
+    d->SendToServerL(true);
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::ShowL::End") ) );
+}
+
+
+TPtrC CHbDeviceInputDialogSymbian::getTextL()
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::getTextL::Begin") ) );
+    TRACES( RDebug::Print(_L( "CHbDeviceInputDialogSymbian::getTextL::Begin %S" ),&iPassword));
+    HBufC* sample1 = HBufC::NewLC(iPassword.Length());
+    TPtrC aStringPointer = sample1->Des();
+    aStringPointer.Set(iPassword);
+    CleanupStack::PopAndDestroy();       
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::getTextL::End") ) );
+    return aStringPointer;
+}
+
+void CHbDeviceInputDialogSymbian::Close()
+{
+    TRACES( RDebug::Print( _L("CHbDeviceInputDialogSymbian::Close::Begin") ) );
+    d->Close();
+}
+
+void CHbDeviceInputDialogSymbian::SetObserver(MHbDeviceInputDialogObserver *aObserver)
+{
+    d->mObserver = aObserver;
+}