securitydialogs/SecUi/Inc/SecQueryUi.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:04:40 +0300
branchRCL_3
changeset 21 09b1ac925e3f
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:  CSecQueryUi API can be used to implement UI dialogs for
*               SecUi plugins.
*/


#ifndef C_SECQUERYUI_H
#define C_SECQUERYUI_H

#include <e32base.h>                            // CActive
#include <hb/hbcore/hbdevicedialogsymbian.h>    // MHbDeviceDialogObserver
#include <etelmm.h>
#include <e32property.h>

#define ESecUiTypeMask  0x0FFFFFF
#define ESecUiBasicTypeMask    0x00F0000

#define ESecUiCancelSupported  0x1000000
#define ESecUiCancelNotSupported  0x0000000

#define ESecUiEmergencySupported  0x2000000
#define ESecUiEmergencyNotSupported  0x0000000

#define ESecUiAlphaSupported  0x4000000
#define ESecUiAlphaNotSupported  0x0000000

#define ESecUiSecretSupported  0x8000000
#define ESecUiSecretNotSupported  0x0000000

#define ESecUiBasicTypeCheck   0x0010000
#define ESecUiBasicTypeMultiCheck   0x0020000

class MSecQueryUiCertificateDetailsProvider;
class MSecQueryUiDrmDetailsProvider;
class CHbDeviceDialogSymbian;
class CHbSymbianVariantMap;
class CActiveSchedulerWait;
class CApaMaskedBitmap;

typedef TBuf<80> TSecUiPassword;

enum R_SECUI_ERROR_CODES
	{
	R_CODE_ERROR=0x58ED0100,
	R_SEC_BLOCKED,
	R_CONFIRMATION_NOTE,
	R_PIN_CODE_CHANGED_NOTE,
	R_PIN2_CODE_CHANGED_NOTE,
	R_PIN2_REJECTED,
	R_UPIN_CODE_CHANGED_NOTE,
	R_SIM_NOT_ALLOWED,
	R_SIM_ALLREADY_OFF,
	R_SIM_OFF,
	R_SIM_ALLREADY_ON,
	R_OPERATION_NOT_ALLOWED,
	R_SECUI_TEXT_AUTOLOCK_MUST_BE_ACTIVE,
	R_PIN_NOT_ALLOWED,
	R_REMOTELOCK_INVALID_CODE,
	R_SIM_ON,
	R_INSERT_SIM,
	R_CODES_DONT_MATCH,
	R_PIN_BLOCKED_NOTE,
	R_UPIN_NOT_ALLOWED,
	R_SECURITY_CODE_CHANGED_NOTE,
	R_SECUI_ERROR_CODE_LAST
	};

/**
 * CSecQueryUi provides UI dialogs for SW installation. UI dialogs are
 * global and they can be used in a non-UI code (like in SIF plugins).
 * SW install device dialog plugin implements the UI dialogs.
 *
 * @lib SecQueryUi.lib
 * @since 10.1
 */
typedef TBuf<80> TSecUiPassword;

class CSecQueryUi : public CActive, public MHbDeviceDialogObserver
    {
    public:  // constructor and destructor
        /**
         * Creates new CSecQueryUi object and pushes it into cleanup stack.
         * @returns CSecQueryUi* -- new CSecQueryUi object
         */
        IMPORT_C static CSecQueryUi* NewLC();

        /**
         * Creates new CSecQueryUi object.
         * @returns CSecQueryUi* -- new CSecQueryUi object
         */
        IMPORT_C static CSecQueryUi* NewL();

        /**
         * Destructor.
         */
        CSecQueryUi::~CSecQueryUi();

    public:  // new functions
        /**
         * Displays install confirmation query synchronously. Synchronous function
         * returns after the user has accepted or cancelled the query.
         * @param aAppDetails - other application details (like supplier)
         * @return TBool - ETrue if user accepted the query, EFalse otherwise
         */
        IMPORT_C TBool InstallConfirmationQueryL( TInt aType, RMobilePhone::TMobilePassword& password );
        IMPORT_C TInt  SecQueryDialog(const TDesC& aCaption, TDes& aDataText, TInt aMinLength,TInt aMaxLength,TInt aMode);
        /*
        IMPORT_C TBool InstallConfirmationQueryL( const TDesC& aAppName,
                const TDesC& aIconFile, const TDesC& aAppVersion, TInt aAppSize,
                const TDesC& aAppDetails );
        */

        /**
         * Displays information note. If the information note is already displayed, then
         * only the dialog text is updated. Information note is closed automatically after
         * pre-defined time (e.g. after 1.5 seconds). User can also press any key to close
         * the note faster.
         * @param aText - info text to be displayed
         */
        IMPORT_C void DisplayInformationNoteL( const TDesC& aText );

        /**
         * Displays warning note. If the warning note is already displayed, then only the note
         * text is updated. Warning note is closed automatically after pre-defined time (e.g.
         * after three seconds). User can also press any key to close the note faster.
         * @param aText - error text to be displayed
         */
        IMPORT_C void DisplayWarningNoteL( const TDesC& aText );

        /**
         * Displays error note. If the error note is already displayed, then only the dialog
         * text is updated. Error note is closed automatically after pre-defined time (e.g.
         * after three seconds). User can also press any key to close the note faster.
         * @param aText - error text to be displayed
         */
        IMPORT_C void DisplayErrorNoteL( const TDesC& aText );

        /**
         * Displays permanent note. If the permanent note is already displayed, then only the
         * dialog text is updated. User cannot cancel or close permanent notes. Permanent note
         * is displayed until ClosePermanentNote() is called. Delayed notes are displayed after
         * pre-defined delay time, and they may be closed before they appear on the screen.
         * @param aText - text to be displayed
         * @param aIsDelayed - ETrue if delayed dialog should be used
         */
        IMPORT_C void DisplayPermanentNoteL( const TDesC& aText );

        /**
         * Closes the permanent note.
         */
        IMPORT_C void ClosePermanentNote();

        /**
         * Displays progress note using aFinalValue. Use UpdateProgressNoteValueL() to
         * update the progress bar. If the progress note is already active, then only
         * the note text and final value are updated.
         * @param aText - text displayed in progress note
         * @param aFinalValue - final value of the progress bar
         */
        IMPORT_C void DisplayProgressNoteL( const TDesC& aText, TInt aFinalValue );

        /**
         * Updates the progress bar in progress note. Progress bar shows 0% when
         * aNewValue is zero (or less than zero), and full 100% when aNewValue is
         * equal (or more than) the final value set with SetProgressNoteFinalValueL().
         * @param aNewValue - new value for the progress bar
         */
        IMPORT_C void UpdateProgressNoteValueL( TInt aNewValue );

        /**
         * Closes the progress note. TRequestStatus set in DisplayProgressNoteL() is
         * completed with KErrNone. Note that it is completed with KErrCancel if user
         * cancels the note, or with error code if some error happens.
         */
        IMPORT_C void CloseProgressNoteL();

        /**
         * Displays wait note. If the wait note is already displayed, then only the note
         * text is updated. Wait note is like progress note, except that it is not known
         * how long the operation takes. User can cancel the operation as in progress note.
         * @param aText - text to be displayed
         * @param aStatus - request status that indicates if user cancels the note
         */
        IMPORT_C void DisplayWaitNoteL( const TDesC& aText, TRequestStatus& aStatus );

        /**
         * Closes the wait note.
         */
        IMPORT_C void CloseWaitNote();

        /**
         * Launches help with the help context aContext for application aUid.
         * @param aContext - help context to be displayed
         * @param aUid - application which help needs to be launched
         */
        IMPORT_C void LaunchHelpL( const TDesC& aContext, const TUid& aUid );

        /**
         * Launches SW Install application (UID 0x101F8512) help using the
         * help context aContext.
         * @param aContext - help context to be displayed
         */
        IMPORT_C void LaunchHelpL( const TDesC& aContext );

    protected:  // from CActive
        void DoCancel();
        void RunL();

    private:    // from MHbDeviceDialogObserver
        void DataReceived( CHbSymbianVariantMap& aData );
        void DeviceDialogClosed( TInt aCompletionCode );

    private:    // new functions
        CSecQueryUi();
        void ConstructL();
        void ClearParamsL();
        void ClearParamsAndSetNoteTypeL( TInt aType );
        void AddParamL( const TDesC& aKey, TInt aValue );
        void AddParamL( const TDesC& aKey, const TDesC& aValue );
        void DisplayDeviceDialogL();
        TInt WaitUntilDeviceDialogClosed();

    private:    // data
        CHbDeviceDialogSymbian* iDeviceDialog;
        CHbSymbianVariantMap* iVariantMap;
        CActiveSchedulerWait* iWait;
        TBool iIsDisplayingDialog;
        TInt iCompletionCode;
        TInt iReturnValue;
public:
	   // previoulsy it was RMobilePhone::TMobilePassword iPassword; but this was only 10 bytes
        TSecUiPassword iPassword;
    };


#endif  // C_SECQUERYUI_H