diff -r bad0cc58d154 -r c74b3d9f6b9e wlansecuritysettings/wlaneapsettingsui/pap/notifierui/src/papnotifdlgplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlansecuritysettings/wlaneapsettingsui/pap/notifierui/src/papnotifdlgplugin.cpp Wed Sep 01 12:23:57 2010 +0100 @@ -0,0 +1,489 @@ +/* +* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 PapNotifDlg dialog plugin. +* +*/ + +/* +* %version: 9 % +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include + +#include // For RProperty +#include // For KPSUidUikon and KUikGlobalNotesAllowed. + +#include +#include "papnotifdlgplugin.h" +#include "papauthdialog.h" +#include "papchallengemsgdialog.h" +#include "papchallengereplydialog.h" + +// CONSTANTS +//static const TUint KUtf8UnicodeRatio = 2; + +// ================= OTHER EXPORTED FUNCTIONS ============== + +// ----------------------------------------------------------------------------- +// CreateNotifiersL +// ----------------------------------------------------------------------------- +// +LOCAL_C void CreateNotifiersL( CArrayPtrFlat< MEikSrvNotifierBase2 >* aNotifiers ) + { + MEikSrvNotifierBase2 *serNotify; + serNotify = CPapNotifDialogPlugin::NewL(); + CleanupStack::PushL( serNotify ); + aNotifiers->AppendL( serNotify ); + CleanupStack::Pop( serNotify ); + } + + +// ----------------------------------------------------------------------------- +// NotifierArray +// ----------------------------------------------------------------------------- +// +EXPORT_C CArrayPtr< MEikSrvNotifierBase2 >* NotifierArray() + { + // NotifierArray() can't leave + CArrayPtrFlat< MEikSrvNotifierBase2 >* array = + new CArrayPtrFlat< MEikSrvNotifierBase2 >( KPluginGranularity ); + + if ( array ) + { + TRAPD( err, CreateNotifiersL( array ) ); + + if( err ) + { + TInt count = array->Count(); + + while( count-- ) + { + ( *array )[ count ]->Release(); + } + + delete array; + array = NULL; + } + } + + return( array ); + } + + +////////////////////////////////////////////////////////////// +// PAP dialog plugin +///////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::CPapNotifDialogPlugin +// ----------------------------------------------------------------------------- +// +CPapNotifDialogPlugin::CPapNotifDialogPlugin() +: iCancelled( EFalse ), + iAuthDlgDismissed( EFalse ), + iChallengeMsgDismissed( EFalse ), + iChallengeReplyDismissed( EFalse ) + { + iManager = NULL; + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::~CPapNotifDialogPlugin +// ----------------------------------------------------------------------------- +// +CPapNotifDialogPlugin::~CPapNotifDialogPlugin() + { + CCoeEnv::Static()->DeleteResourceFile( iResource ); + + if ( !iAuthDlgDismissed ) + { + delete iPapAuthDialog; + } + + if ( !iChallengeMsgDismissed ) + { + delete iPapChallengeMsgDialog; + } + + if ( !iChallengeReplyDismissed ) + { + delete iPapChallengeReplyDialog; + } + + } + + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::RegisterL +// ----------------------------------------------------------------------------- +// +CPapNotifDialogPlugin::TNotifierInfo CPapNotifDialogPlugin::RegisterL() + { + iInfo.iUid = KUidPapDialog; + iInfo.iPriority = ENotifierPriorityHigh; + iInfo.iChannel = KUidPapDialog; + return iInfo; + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::NewL +// ----------------------------------------------------------------------------- +// +CPapNotifDialogPlugin* CPapNotifDialogPlugin::NewL() + { + CPapNotifDialogPlugin* self = new( ELeave ) CPapNotifDialogPlugin(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::ConstructL +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::ConstructL() + { + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::ConstructL") ); + #endif + + TFileName fileName; + + fileName.Append( KDriveZ ); + fileName.Append( KDC_RESOURCE_FILES_DIR ); + fileName.Append( KResourceFileName ); + + BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), fileName ); + iResource = CCoeEnv::Static()->AddResourceFileL( fileName ); + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::StartL +// ----------------------------------------------------------------------------- +// +TPtrC8 CPapNotifDialogPlugin::StartL( const TDesC8& /*aBuffer*/ ) + { + return KNullDesC8().Ptr(); + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::StartL +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::StartL( const TDesC8& aBuffer, + TInt aReplySlot, + const RMessagePtr2& aMessage ) + { + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL") ); + #endif + + iCancelled = EFalse; + iReplySlot = aReplySlot; + iMessage = aMessage; + + // This object gets constructed only once but + // can get called many times. + // So initialize everything here. + iAuthDlgDismissed = EFalse; + iChallengeMsgDismissed = EFalse; + iChallengeReplyDismissed = EFalse; + iPapAuthDialog = NULL; + iPapChallengeMsgDialog = NULL; + iPapChallengeReplyDialog = NULL; + iDataPtr = NULL; + iDataPckgPtr = NULL; + + // We are about to display the password prompt. + // Since this part of the code can be executed during the bootup, check if + // the UI has really started up to display notes/dialogs. + TInt notesAllowed = 0; + TInt error = RProperty::Get( KPSUidUikon, KUikGlobalNotesAllowed, + notesAllowed ); + + // The above call can return error. Ignore the error. What we care is + // if notesAllowed has turned to 1 from 0. + if ( notesAllowed ) + { + iDataPtr = new( ELeave ) TPapUiNotifierInfo; + iDataPckgPtr = new( ELeave ) TPckg( *iDataPtr ); + iDataPckgPtr->Copy( aBuffer ); + + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, state = %d"), iDataPtr->iState ); + #endif + + switch ( iDataPtr->iState ) + { + case TPapUiNotifierInfo::EPapUiNotifierAuthQueryDialog: + { + iPapAuthDialog = CPapAuthDialog::NewL( + iDataPtr->iUsrPwdInfo.iUserName, + iDataPtr->iUsrPwdInfo.iPassword, + this ); + + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, executing auth dialog") ); + #endif + + iPapAuthDialog->ExecuteLD( R_PAPNOTIF_USERNAME_PASSWORD_QUERY ); + + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, auth dialog executed") ); + #endif + + break; + } + + case TPapUiNotifierInfo::EPapUiNotifierPapChallengeSize: + { + iChallengeSize = iDataPtr->iSrvChallengeSize; + break; + } + + case TPapUiNotifierInfo::EPapUiNotifierPapChallengeMsgDialog: + { + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, chal msg dialog start") ); + #endif + + HBufC16* challengetext = HBufC16::NewLC( KMaxPapChallengeLength ); + TPtr16 text = challengetext->Des(); + text.Copy( iDataPtr->iPapChallenge ); + + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, create chal msg dialog") ); + #endif + + iPapChallengeMsgDialog = CPapChallengeMsgDialog::NewL( text, + this ); + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, executing chal msg dialog") ); + #endif + + iPapChallengeMsgDialog->ExecuteLD( R_PAP_CHALLENGE_MESSAGE_QUERY ); + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::StartL, chal msg dialog executed") ); + #endif + + CleanupStack::PopAndDestroy( challengetext ); + + break; + } + + case TPapUiNotifierInfo::EPapUiNotifierPapChallengeReplyQueryDialog: + { + // construct and show the challenge reply dialog, + // save the reply in the password field + iPapChallengeReplyDialog = CPapChallengeReplyDialog::NewL( + iDataPtr->iUsrPwdInfo.iPassword, this ); + iPapChallengeReplyDialog->ExecuteLD( R_PAP_CHALLENGE_REPLY_QUERY); + + break; + } + + default: + { + break; + } + + } + + } + + // In case if the notes are not allowed, this message gets completed when + // EAPOL time out occurs and a subsequent call to cancel + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::UpdateL +// ----------------------------------------------------------------------------- +// +TPtrC8 CPapNotifDialogPlugin::UpdateL( const TDesC8& /*aBuffer*/ ) + { + return KNullDesC8().Ptr(); + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::Cancel +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::Cancel() + { + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::Cancel") ); + #endif + + if ( !iCancelled ) + { + iCancelled = ETrue; + + if ( !iMessage.IsNull() ) + { + iMessage.Complete( KErrCancel ); + } + + if ( !iAuthDlgDismissed && iPapAuthDialog ) + { + iAuthDlgDismissed = ETrue; + delete iPapAuthDialog; + iPapAuthDialog = NULL; + } + + if ( !iChallengeMsgDismissed && iPapChallengeMsgDialog ) + { + iChallengeMsgDismissed = ETrue; + delete iPapChallengeMsgDialog; + iPapChallengeMsgDialog = NULL; + } + + if ( !iChallengeReplyDismissed && iPapChallengeReplyDialog ) + { + iChallengeReplyDismissed = ETrue; + delete iPapChallengeReplyDialog; + iPapChallengeReplyDialog = NULL; + } + + } + + if ( iDataPtr ) + { + delete iDataPtr; + iDataPtr = NULL; + } + + if ( iDataPckgPtr ) + { + delete iDataPckgPtr; + iDataPckgPtr = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::CompleteL +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::CompleteL( TInt aStatus ) + { + #if defined( _DEBUG ) || defined( DEBUG ) + RDebug::Print(_L("CPapNotifDialogPlugin::CompleteL") ); + #endif + + if ( aStatus == KErrNone && !iMessage.IsNull() ) + { + iMessage.WriteL( iReplySlot, *iDataPckgPtr ); + } + + iCancelled = ETrue; + + if ( !iMessage.IsNull() ) + { + iMessage.Complete( aStatus ); + } + + if ( iDataPtr ) + { + delete iDataPtr; + iDataPtr = NULL; + } + + if ( iDataPckgPtr ) + { + delete iDataPckgPtr; + iDataPckgPtr = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::Release +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::Release() + { + delete this; + } + + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::Info +// ----------------------------------------------------------------------------- +// +CPapNotifDialogPlugin::TNotifierInfo CPapNotifDialogPlugin::Info() const + { + return iInfo; + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::Username +// ----------------------------------------------------------------------------- +// +TDes& CPapNotifDialogPlugin::Username() + { + return ( iDataPtr->iUsrPwdInfo.iUserName ) ; + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::Password +// ----------------------------------------------------------------------------- +// +TDes& CPapNotifDialogPlugin::Password() + { + return ( iDataPtr->iUsrPwdInfo.iPassword ) ; + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::SetAuthDlgDismissed +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::SetAuthDlgDismissed() + { + iAuthDlgDismissed = ETrue; + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::SetChallengeMsgDismissed +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::SetChallengeMsgDismissed() + { + iChallengeMsgDismissed = ETrue; + } + +// ----------------------------------------------------------------------------- +// CPapNotifDialogPlugin::SetChallengeReplyDismissed +// ----------------------------------------------------------------------------- +// +void CPapNotifDialogPlugin::SetChallengeReplyDismissed() + { + iChallengeReplyDismissed = ETrue; + } + + + +// End of File