diff -r 1fc85118c3ae -r 870918037e16 eventsui/eventshandlerui/eventsnotifier/evtinfonote/src/evtinfonote.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventsui/eventshandlerui/eventsnotifier/evtinfonote/src/evtinfonote.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,470 @@ +/* +* Copyright (c) 2008 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: Info Note implementation +* +*/ + + +// System Includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +// User Includes +#include "evtinfonoteparams.h" +#include "evtinfonote.h" +#include "evtinfonoteinterface.h" +#include "evtinfonoteconsts.hrh" +#include "evtinfonoteimpl.h" + +#include "evtdebug.h" + +// Constant Definitions +_LIT(KResourceFileName, "evtinfonote.rsc"); +static const TInt KLengthOfNum = 64; + +// +// ------------------------- Member Function definition ---------------------- + +// --------------------------------------------------------------------------- +// CEvtInfoNote::CEvtInfoNote() +// --------------------------------------------------------------------------- +// +CEvtInfoNote::CEvtInfoNote() + : CActive( EPriorityStandard ) + { + } + +// --------------------------------------------------------------------------- +// CEvtInfoNote::~CEvtInfoNote() +// --------------------------------------------------------------------------- +// +CEvtInfoNote::~CEvtInfoNote() + { + // If there is an existing message outstanding then + // terminate the message + CompleteMessage( KErrServerTerminated ); + + Cancel(); + + delete iInputBuffer; + + // Free the resources + iEikEnv->DeleteResourceFile( iResourceFileFlag ); + + if ( iAppSwitchSupress && iAppUi ) + { + iAppUi->SuppressAppSwitching( EFalse ); + iAppSwitchSupress = EFalse; + } + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::ConstructL() +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::ConstructL() + { + EVTUIDEBUG( "+ CEvtInfoNote::ConstructL" ); + + // Store a Local pointer for Eikon Env + iEikEnv = CEikonEnv::Static(); + iAppUi = static_cast< CAknNotifierAppServerAppUi* >( iEikEnv->EikAppUi()); + + // Open the localized resource file + TFileName dllDrive;; + Dll::FileName( dllDrive ); + + // File name without the drive letter. + TFileName filename; + filename += KDC_RESOURCE_FILES_DIR; + filename += KResourceFileName; + + // Append the drive letter to the file name. + TParse parse; + User::LeaveIfError( parse.Set( dllDrive, NULL, NULL ) ); + User::LeaveIfError( parse.Set( parse.Drive(), &filename, NULL ) ); + filename = parse.FullName(); + + BaflUtils::NearestLanguageFile(iEikEnv->FsSession(),filename); + + EVTUIDEBUG( "Before Resource File" ); + + iResourceFileFlag=iEikEnv->AddResourceFileL(filename); + + EVTUIDEBUG( "After Resource File" ); + // Add the object to the Active scheduler + CActiveScheduler::Add( this ); + + EVTUIDEBUG( "- CEvtInfoNote::ConstructL" ); + } + +// --------------------------------------------------------------------------- +// CEvtInfoNote* CEvtInfoNote::NewL() +// --------------------------------------------------------------------------- +// +CEvtInfoNote* CEvtInfoNote::NewL() + { + CEvtInfoNote* self = new ( ELeave ) CEvtInfoNote; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::Release() +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::Release() + { + EVTUIDEBUG( "+ CEvtInfoNote::Release" ); + // This method is called to free all the resources + // associated with the Notifier. Here it would mean deleting + // the notifier handle + delete this; + EVTUIDEBUG( "- CEvtInfoNote::Release" ); + } + +// --------------------------------------------------------------------------- +// MEikSrvNotifierBase2::TNotifierInfo CEvtInfoNote::Info() const +// --------------------------------------------------------------------------- +// +MEikSrvNotifierBase2::TNotifierInfo CEvtInfoNote::Info() const + { + EVTUIDEBUG( "+ CEvtInfoNote::Info" ); + // Return the notifier information + return iInfo; + } + +// --------------------------------------------------------------------------- +// TPtrC8 CEvtInfoNote::StartL +// --------------------------------------------------------------------------- +// +TPtrC8 CEvtInfoNote::StartL( const TDesC8& /* aBuffer */ ) + { + TPtrC8 ret( KNullDesC8 ); + return ( ret ); + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::StartL +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::StartL( const TDesC8& aBuffer, + TInt aReplySlot, + const RMessagePtr2& aMessage ) + { + EVTUIDEBUG( "+ CEvtInfoNote::StartL" ); + // The notifier will handle only one request at a time. + if ( IsActive()) + { + User::Leave ( KErrInUse ); + } + + iTriggerEvent = EDisplayNotifier; + iMessage = aMessage; + + // Delete the old buffer and copy the contents of the argument into this + // buffer + // This buffer needs to be stored because, the user is going to handle + // the request asynchrnously. + delete iInputBuffer; + iInputBuffer = NULL; + iInputBuffer = aBuffer.AllocL(); + + // Copy the reply Slot + iReplySlot = aReplySlot; + + TRequestStatus* status = &iStatus; + SetActive(); + User::RequestComplete( status, KErrNone ); + EVTUIDEBUG( "- CEvtInfoNote::StartL" ); + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::Cancel +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::Cancel() + { + EVTUIDEBUG( "+ CEvtInfoNote::Cancel" ); + // Delete the running Information note + delete iInfoNote; + iInfoNote = NULL; + + CompleteMessage( KErrCancel ); + + delete iInputBuffer; + iInputBuffer = NULL; + + iTriggerEvent = ENone; + CActive::Cancel(); + EVTUIDEBUG( "- CEvtInfoNote::Cancel" ); + } + +// --------------------------------------------------------------------------- +// TPtrC8 CEvtInfoNote::UpdateL +// --------------------------------------------------------------------------- +// +TPtrC8 CEvtInfoNote::UpdateL( const TDesC8& /* aBuffer */ ) + { + TPtrC8 ret( KNullDesC8 ); + return ( ret ); + } + +// --------------------------------------------------------------------------- +// TPtrC8 CEvtInfoNote::UpdateL +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::UpdateL( const TDesC8& /* aBuffer */, + TInt /* aReplySlot */, + const RMessagePtr2& aMessage) + { + aMessage.Complete( KErrNotSupported ); + } + +// --------------------------------------------------------------------------- +// CEvtInfoNote::TNotifierInfo CEvtInfoNote::RegisterL() +// --------------------------------------------------------------------------- +// +CEvtInfoNote::TNotifierInfo CEvtInfoNote::RegisterL() + { + iInfo.iUid = KEvtInfoNote; + iInfo.iChannel = KEvtInfoNoteChannel; + iInfo.iPriority = ENotifierPriorityHigh; + return iInfo; + } + + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::CompleteMessage() +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::CompleteMessage( TInt aError, + TInt aKeyPressEvent ) + { + EVTUIDEBUG( "+ CEvtInfoNote::CompleteMessage" ); + // Check if the message is not NULL + if ( !iMessage.IsNull() ) + { + + // Obtain the Reply slot and communicate the response + // to the user + TInt desLength = iMessage.GetDesLength( iReplySlot ); + if ( desLength >= KLengthOfNum ) + { + TBuf8< KLengthOfNum > returnBuf; + returnBuf.AppendNum( aKeyPressEvent ); + + TInt length = returnBuf.Length(); + length = length + 1; + TInt error = iMessage.Write( iReplySlot, returnBuf ); + if ( !error ) + { + EVTUIDEBUG1( "CEvtInfoNote::CompleteMessage - Write Error : %d", error ); + } + } + + iMessage.Complete( aError ); + } + + if ( iAppSwitchSupress && iAppUi ) + { + iAppUi->SuppressAppSwitching( EFalse ); + iAppSwitchSupress = EFalse; + } + + iTriggerEvent = ENone; + EVTUIDEBUG( "- CEvtInfoNote::CompleteMessage" ); + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::RunL() +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::RunL() + { + EVTUIDEBUG( "+ CEvtInfoNote::RunL" ); + // Do this only on KErrNone + if ( !iStatus.Int()) + { + switch( iTriggerEvent ) + { + case EDisplayNotifier: + { + // Fetch the input parameters + CEvtInfoNoteInputParam* param = GetInputParametersLC(); + CleanupStack::Pop( param ); + + // Create a new dialog instance + CEvtInfoNoteImpl* queryDialog = CEvtInfoNoteImpl::NewLC( param ); + + // Display the dialog in cover UI + // queryDialog->PublishDialogL( SuplQueryId(), KCatUidSuplQuery ); + + // Store the value for the Query dialog. this would be useful + // for cancelling it. + iInfoNote = queryDialog; + + // Supress the App switching + if ( !iAppSwitchSupress ) + { + iAppUi->SuppressAppSwitching( ETrue ); + iAppSwitchSupress = ETrue; + } + TEvtInfoNoteCmds flag; + TInt keypress = KErrNone; + + keypress = queryDialog->RunLD( &flag ); + iInfoNote = NULL; + + EVTUIDEBUG1( "Key Press : %d", keypress ); + EVTUIDEBUG1( "Return Code : %d", flag ); + + if ( keypress ) + { + switch( flag ) + { + case EEvtCmdOpenEvent: + { + CompleteMessage( KErrNone, EOpenTrigger ); + break; + } + case EEvtCmdSnoozeEvent: + { + CompleteMessage( KErrNone, ESnoozeTrigger ); + break; + } + case EEvtCmdShowDetails: + { + CompleteMessage( KErrNone, EShowDetails ); + break; + } + case ECloseInfoNote: + { + CompleteMessage( KErrNone, ECloseInfoNote ); + break; + } + default: + { + break; + } + } + } + else + { + CompleteMessage( KErrNone, ECloseInfoNote ); + } + + // Reset the trigger Event + iTriggerEvent = ENone; + + break; + } + default: + { + User::Leave( KErrNotSupported ); + break; + } + } + } + else + { + EVTUIDEBUG1( "- CEvtInfoNote::Error %d ", iStatus.Int() ); + // Error Handling for non-KErrNone status + CompleteMessage( iStatus.Int()); + } + EVTUIDEBUG( "- CEvtInfoNote::RunL" ); + } + +// --------------------------------------------------------------------------- +// void CEvtInfoNote::DoCancel() +// --------------------------------------------------------------------------- +// +void CEvtInfoNote::DoCancel() + { + // Reset the state machine + iTriggerEvent = ENone; + } + +// --------------------------------------------------------------------------- +// TInt CEvtInfoNote::RunError() +// --------------------------------------------------------------------------- +// +TInt CEvtInfoNote::RunError( TInt aError ) + { + EVTUIDEBUG( "+ CEvtInfoNote::RunError" ); + // If the dialog value is set then the dialog must be + // set to NULL because the dialog would have been destroyed + // already since its present on the cleanup stack + iInfoNote= NULL; + + // Complete the outstanding request with the error code + CompleteMessage( aError ); + + // Reset the state machine. + iTriggerEvent = ENone; + + EVTUIDEBUG( "- CEvtInfoNote::RunError" ); + return CActive::RunError( aError ); + } + +// --------------------------------------------------------------------------- +// TInt CEvtInfoNoteInputParam::GetInputParametersLC() +// --------------------------------------------------------------------------- +// +CEvtInfoNoteInputParam* CEvtInfoNote::GetInputParametersLC() + { + EVTUIDEBUG( "+ CEvtInfoNote::GetInputParametersLC" ); + // Create a new input paramter object. The ownership of + // this object will be transferred back to the calling + // function. + CEvtInfoNoteInputParam* input = CEvtInfoNoteInputParam::NewL(); + CleanupStack::PushL( input ); + + // Obtain the parameters from the Input Buffer + CBufFlat* inputParams = + CBufFlat::NewL( iInputBuffer->Des().Length() ); + CleanupStack::PushL( inputParams ); + inputParams->ResizeL( iInputBuffer->Des().Length()); + + inputParams->Ptr( 0 ).Copy( *iInputBuffer ); + + // Set the Read buffer to read the values from input buffer + RBufReadStream readStream( *inputParams, 0 ); + CleanupClosePushL( readStream ); + + // Internalize the input buffer string to the current object. + input->InternalizeL( readStream ); + + CleanupStack::PopAndDestroy( 2, inputParams ); + + EVTUIDEBUG( "- CEvtInfoNote::GetInputParametersLC" ); + + return input; + }