Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
This page was last modified 20:47, 13 October 2008.

CS001056 - Creating a password dialog with secret editors

From Forum Nokia Wiki



ID CS001056 Creation date July 1, 2008
Platform S60 3rd Edition, FP1 Tested on devices Nokia N93
Category Symbian C++ Subcategory Files/Data


Keywords (APIs, classes, methods, functions): CAknMultiLineDataQueryDialog, CAknTextQueryDialog, NUMSECRETED, SECRETED, CAknMultiLineDataQueryDialog::ExecuteLD, CAknTextQueryDialog::ExecuteLD

Overview

This code snippet shows how to create a password dialog with secret editors. Numeric secret editors can be defined using s NUMSECRETED resource structure in a resource file and alphanumeric secret editors are defined using a SECRETED resource structure. This code snippet implements two example dialogs with SECRETED structures. The first one is a multiline query dialog containing password and confirmation fields and the second one is a simple text query dialog with one password field.

This snippet can be self-signed.

MMP file

The following libraries are required:

LIBRARY     avkon.lib   //Avkon resources


Resource file

.rss

#define KMaxPasswordLength 10
 
RESOURCE DIALOG r_dialog_password_and_confirmation_query
    {
    flags = EGeneralQueryFlags;
 
    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
    items =
        {
        DLG_LINE
            {
            type = EAknCtMultilineQuery;
            id = EMultilineFirstLine;
            control = AVKON_DATA_QUERY
                {
                layout = EMultiDataFirstSecEd; 
                label = "Enter Password:";
                control = SECRETED
                    {
                    num_letters = KMaxPasswordLength;
                    };
                };
            },
        DLG_LINE
            {
            type = EAknCtMultilineQuery;
            id = EMultilineSecondLine;
            control = AVKON_DATA_QUERY
                {
                layout = EMultiDataSecondSecEd;
                label = "Confirm Password:";
                control = SECRETED
                    {
                    num_letters = KMaxPasswordLength;
                    };
                };
            }
        };
    }
 
 
RESOURCE DIALOG r_dialog_password_query
    {
    flags = EAknGeneralQueryFlags;
    
    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
    items =
        {
        DLG_LINE
            {
            type = EAknCtQuery;
            id = EGeneralQuery;
            control = AVKON_DATA_QUERY
                {
                layout = ECodeLayout;
                label = "Enter Password:";
                control = SECRETED
                    {
                    num_letters = KMaxPasswordLength;
                    };
                };
            }
        };
    }


Header file

#ifndef __PASSWORDAPPUI_H__
#define __PASSWORDAPPUI_H__
 
const TInt KMaxPasswordLength = 10;
//...
 
class CPasswordAppUi : public CAknAppUi
    {
//...
private:
//...
    TBool ShowPasswordAndConfirmationDialogL(TDes& aPassword);
    TBool ShowPasswordDialogL(TDes& aPassword);
    void UsePasswordDialogsL(); //a test method for dialogs 
private:
//...
    HBufC* iPassword;
    };
 
#endif // __PASSWORDAPPUI_H__


Source file

#include <AknQueryDialog.h>
#include <Password_0xE0859401.rsg>
 
//...
CPasswordAppUi::CPasswordAppUi():iPassword(NULL)
    {
    }
 
CPasswordAppUi::~CPasswordAppUi()
    {
    //...
    if (iPassword)
        {
        delete iPassword;
        iPassword=NULL;
        }
    }
 
TBool CPasswordAppUi::ShowPasswordAndConfirmationDialogL(TDes& aPassword)
{
    TBuf<KMaxPasswordLength> password;
    TBuf<KMaxPasswordLength> confirmation;
 
    CAknMultiLineDataQueryDialog* dlg = 
    CAknMultiLineDataQueryDialog::NewL(password, confirmation);
    
    if (!dlg->ExecuteLD(R_DIALOG_PASSWORD_AND_CONFIRMATION_QUERY)) 
        {
        //Cancel key pressed 
        //do something...
        return EFalse;
        }
    else
        {       
        if(password.Compare(confirmation) == 0)
            {
            //password and confirmedPassword match. 
            //do something...
            
            aPassword.Copy(password);
            return ETrue;
            }
        else if(password.Length() != confirmation.Length())
            {
            //password buffer and confirmation buffer have different lengths
            //do something...
            
            return EFalse;
            }       
        else
            {
            //password buffer and confirmation buffer have different contents 
            //do something...
            
            return EFalse;
            }
        }
}
 
TBool CPasswordAppUi::ShowPasswordDialogL(TDes& aPassword)
{
    TBuf<KMaxPasswordLength> password;
    
    CAknTextQueryDialog* dlg = 
    new(ELeave) CAknTextQueryDialog(password, CAknQueryDialog::ENoTone );
    
    if(!dlg->ExecuteLD(R_DIALOG_PASSWORD_QUERY))
        {
        //Cancel key pressed 
        //do something...
        return EFalse;
        }
    else
        {
        //OK do something...
        aPassword.Copy(password);
        return ETrue;
        }
}
 
 
void CPasswordAppUi::UsePasswordDialogsL()
    {
    //reset old password if exists
    if(iPassword)
        {
        delete iPassword;
        iPassword=NULL;
        }
        
     iPassword = HBufC::NewL(KMaxPasswordLength);
     TPtr bufPtr = iPassword->Des();
 
     //show password and confirmation dialog and store the given
     //password in member variable iPassword if input values are ok
     TBool ret = ShowPasswordAndConfirmationDialogL(bufPtr);
        
     if(ret)
         {
         //create a temporary buffer to store the given password
         HBufC* tmpPassword = HBufC::NewLC(KMaxPasswordLength);
         TPtr tmpPtr = tmpPassword->Des();
 
         //show a password dialog
         TBool ret2 = ShowPasswordDialogL(tmpPtr);
         
         if(ret2)
             {
              //compare the given password with member variable iPassword  
              if (tmpPassword->Compare(*iPassword) == 0)
                  {
                  //passwords match ok, do something....
                  }
              else
                  {
                  //The given password is not correct, do something...
                  }          
             }
         else
             {
             //the user pressed cancel, there is no password to compare
             //do something...
             }
         
         CleanupStack::PopAndDestroy(); //tmpPassword
         } 
     else
         {
         //giving a new password failed, do something... 
         delete iPassword;
         iPassword=NULL;
         }
    }


Postconditions

The example code shows a password and confirmation dialog to the user and stores the given password into the member variable iPassword. After this, a simple password query dialog is shown to the user.

Related Discussions
Thread Thread Starter Forum Replies Last Post
DIALOG secreted (newbie, urgent) kienzan Symbian User Interface 2 2006-03-10 17:37
How to make marquee in CEikEdwin tqchcm Symbian User Interface 1 2007-11-01 11:42
MEikSrvNotifierBase Asheesh General Symbian C++ 6 2004-11-12 17:02
Closing app from tasklist ezhil01 General Symbian C++ 1 2006-11-08 21:59
Background color of dialog alok_bbk Symbian User Interface 2 2005-02-08 11:10
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX