commondrm/drmui/drmuidialogs/src/drmuidialogs.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:29:38 +0300
branchRCL_3
changeset 71 1221b68b8a5f
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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:  Implementation of CDrmUIDialogs class.
*
*/

#include "drmuidialogs.h"                       // CDrmUIDialogs
#include <hb/hbcore/hbsymbianvariant.h>         // CHbSymbianVariantMap

// Identifier of DRM UI device notification dialog plugin
_LIT( KDrmUIDeviceDialogPlugin, "com.nokia.hb.drmuidialog/1.0" );

// Keys for the parameters passed to notification dialog plugin
_LIT( KDrmUIDialogId, "dialogId" );
_LIT( KDrmUIInsertText, "insertText" );
_LIT( KDrmUIInsertInt, "insertInt" );

// Keys name for result sent from notification dialog plugin
_LIT( KDrmUIDialogResult, "result");


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CDrmUIDialogs::NewLC()
// ---------------------------------------------------------------------------
//
EXPORT_C CDrmUIDialogs* CDrmUIDialogs::NewLC()
    {
    CDrmUIDialogs* self = new( ELeave ) CDrmUIDialogs();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::NewL()
// ---------------------------------------------------------------------------
//
EXPORT_C CDrmUIDialogs* CDrmUIDialogs::NewL()
    {
    CDrmUIDialogs* self = CDrmUIDialogs::NewLC();
    CleanupStack::Pop( self );
    return self;
    }


// ---------------------------------------------------------------------------
// CDrmUIDialogs::~CDrmUIDialogs()
// ---------------------------------------------------------------------------
//
CDrmUIDialogs::~CDrmUIDialogs()
    {
    Cancel();
    delete iWait;
    delete iDeviceDialog;
    delete iVariantMap;
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::ShowNoteL()
// ---------------------------------------------------------------------------
EXPORT_C TInt CDrmUIDialogs::ShowNoteL( TInt aDialogId, const TDesC& aString, TInt aValue )
    {
    // Add the dialog id to the variant map
    AddParamL( KDrmUIDialogId, aDialogId );
    
    // Add the string to the variant map if it exists
    if ( aString.Compare( KNullDesC ) )
        {
        AddParamL( KDrmUIInsertText, aString );
        }

    // Add the int to the variant map
    if ( aValue >= 0 )
        {
        AddParamL( KDrmUIInsertInt, aValue );
        }

    DisplayDeviceDialogL();

    TInt error = WaitUntilDeviceDialogClosed();
    User::LeaveIfError( error );

    return iReturnValue;
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::DoCancel()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::DoCancel()
    {
    if( iWait && iWait->IsStarted() && iWait->CanStopNow() )
        {
        iCompletionCode = KErrCancel;
        iWait->AsyncStop();
        }
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::RunL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::RunL()
    {
    if( iWait )
        {
        iWait->AsyncStop();
        }
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::DataReceived()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::DataReceived( CHbSymbianVariantMap& aData )
    {
    const CHbSymbianVariant* resultVariant = aData.Get( KDrmUIDialogResult );
 
    if( resultVariant )
        {
        TInt* result = resultVariant->Value<TInt>();

        if( result )
            {
            iReturnValue = *result;
            }
        }
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::DeviceDialogClosed()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::DeviceDialogClosed( TInt aCompletionCode )
    {
    iCompletionCode = aCompletionCode;
    iIsDisplayingDialog = EFalse;

    TRequestStatus* status( &iStatus );
    User::RequestComplete( status, KErrNone );
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::CDrmUIDialogs()
// ---------------------------------------------------------------------------
//
CDrmUIDialogs::CDrmUIDialogs() : CActive( CActive::EPriorityStandard )
    {
    CActiveScheduler::Add( this );
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::ConstructL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::ConstructL()
    {
    iReturnValue = KErrNone;
    iWait = new( ELeave ) CActiveSchedulerWait;
    iDeviceDialog = CHbDeviceDialogSymbian::NewL();
    iVariantMap = CHbSymbianVariantMap::NewL();
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::ClearParamsL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::ClearParamsL()
    {
    if( iVariantMap )
        {
        delete iVariantMap;
        iVariantMap = NULL;
        }
    iVariantMap = CHbSymbianVariantMap::NewL();
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::ClearParamsAndSetDialogIdL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::ClearParamsAndSetDialogIdL( TInt aDialogId )
    {
    ClearParamsL();
    AddParamL( KDrmUIDialogId, aDialogId );
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::AddParamL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::AddParamL( const TDesC& aKey, TInt aValue )
    {
    CHbSymbianVariant* variant = NULL;
    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EInt );
    iVariantMap->Add( aKey, variant );  // Takes ownership of variant
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::AddParamL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::AddParamL( const TDesC& aKey, const TDesC& aValue )
    {
    CHbSymbianVariant* variant = NULL;
    variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EDes );
    iVariantMap->Add( aKey, variant );  // Takes ownership of variant
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::DisplayDeviceDialogL()
// ---------------------------------------------------------------------------
//
void CDrmUIDialogs::DisplayDeviceDialogL()
    {
    if( iIsDisplayingDialog )
        {
        iDeviceDialog->Update( *iVariantMap );
        }
    else
        {
        iDeviceDialog->Show( KDrmUIDeviceDialogPlugin, *iVariantMap, this );
        iIsDisplayingDialog = ETrue;
        }
    }

// ---------------------------------------------------------------------------
// CDrmUIDialogs::WaitUntilDeviceDialogClosed()
// ---------------------------------------------------------------------------
//
TInt CDrmUIDialogs::WaitUntilDeviceDialogClosed()
    {
    iCompletionCode = KErrInUse;

    if( !IsActive() && iWait && !iWait->IsStarted() )
        {
        iStatus = KRequestPending;
        SetActive();
        iWait->Start();
        }
    return iCompletionCode;
    }