diff -r b183ec05bd8c -r 19bba8228ff0 syncmlfw/syncmlnotifier/src/SyncMLDlgNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/syncmlnotifier/src/SyncMLDlgNotifier.cpp Wed Sep 01 12:27:42 2010 +0100 @@ -0,0 +1,992 @@ +/* +* Copyright (c) 2005 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: Methods for the SyncML Appserver starter notifier +* +*/ + + + +// INCLUDE FILES +#include // Eikon environment +#include +#include +#include +#include +#include +#include +#include +#include // Localisation stringloader +#include +#include +#include +#include +#include // Own resources +#include "SyncMLDlgNotifier.h" // Class definition +#include "SyncMLTimedMessageQuery.h" +#include "SyncMLAppLaunchNotifier.h" +#include "SyncMLNotifDebug.h" +#include "SyncMLTimedInputTextQuery.h" +#include "SyncMLTimedDateQuery.h" +#include "SyncMLTimedNumberQueryDialog.h" +#include "SyncMLAknPopUplist.h" + +// CONSTANTS +const TInt KSyncMLuSecsInSec = 1000000; // Microseconds in a second + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSyncMLDlgNotifier* CSyncMLDlgNotifier::NewL( + CSyncMLAppLaunchNotifier* aAppLaunchNotif ) + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::NewL()") ); + CSyncMLDlgNotifier* self = new (ELeave) CSyncMLDlgNotifier( aAppLaunchNotif ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::NewL() completed") ); + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CSyncMLDlgNotifier::~CSyncMLDlgNotifier() + { + Cancel(); // Free own resources + if(iListItems) + { + delete iListItems; + iListItems = NULL; + } + if(iChunk.Handle()) + { + iChunk.Close(); + } + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::EnableSyncProgressNoteL +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::EnableSyncProgressNoteL( TBool aEnable ) + { + FTRACE( FPrint( _L( + "[SmlNotif]\t CSyncMLDlgNotifier::EnableSyncProgressNoteL(), aEnable = %d" ), + aEnable ) ); + + TSmlJobId currentJobId( KErrNotFound ); + TSmlUsageType usageType; + TUint serviceId = 0; + RSyncMLSession syncSession; + CleanupClosePushL( syncSession ); + + syncSession.OpenL(); + syncSession.CurrentJobL( currentJobId, usageType ); + syncSession.Close(); + CleanupStack::Pop( &syncSession ); + + if ( currentJobId != KErrNotFound ) + { + switch( usageType ) + { + case ESmlDataSync: + serviceId = KDataSyncServiceStart; + break; + case ESmlDevMan: + serviceId = KDevManServiceStart; + break; + default: + User::Leave( KErrArgument ); + break; + } + + // There should be a valid pointer to the application launcher + // notifier, but we can survive without it. Therefore we'll just + // check for it to prevent a crash. + if ( iAppLaunchNotif ) + { + CSyncService* syncService = iAppLaunchNotif->SyncServiceL( serviceId ); + if ( syncService ) + { + syncService->EnableProgressNoteL( aEnable ); + } + } + } + else + { + User::Leave( KErrNotFound ); + } + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::EnableSyncProgressNoteL() completed") ); + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::RegisterL +// ----------------------------------------------------------------------------- +// +CSyncMLDlgNotifier::TNotifierInfo CSyncMLDlgNotifier::RegisterL() + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RegisterL()") ); + iInfo.iUid = KSyncMLDlgNotifierUid; + iInfo.iChannel = KSmlDlgChannel; + iInfo.iPriority = ENotifierPriorityHigh; + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RegisterL() completed") ); + return iInfo; + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::GetParamsL +// Initialize parameters and check if device is already +// in registry. Jump to RunL as soon as possible. +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::GetParamsL( const TDesC8& aBuffer, + TInt aReplySlot, + const RMessagePtr2& aMessage ) + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::GetParamsL()") ); + const TChar KDRSeparator('-'); + const TChar KChoiceItemSeparator(','); + if ( iReplySlot != NULL || iNeedToCompleteMessage ) + { + User::Leave( KErrInUse ); + } + iMessage = aMessage; + iNeedToCompleteMessage = ETrue; + iReplySlot = aReplySlot; + + TSyncMLDlgNotifParams param; + TPckgC pckg( param ); + pckg.Set( aBuffer ); + iNoteType = pckg().iNoteType; + iServerMsg.Copy( pckg().iServerMsg.Left( KSyncMLMaxServerMsgLength ) ); + iMaxTime = pckg().iMaxTime; + iMaxlen = pckg().iMaxLength; + //check for iDR is there are not + iDR.Copy( pckg().iDR.Left( KSyncMLMaxDefaultResponseMsgLength ) ); + iIT = pckg().iIT; + iET = pckg().iET; + //verification of other params as like maxtime + if ( iMaxlen <= 0 || iMaxlen >KSyncMLMaxDefaultResponseMsgLength ) + { + iMaxlen = KSyncMLMaxDefaultResponseMsgLength; + } + + if ( iIT < ESyncMLInputTypeAlphaNumeric || iIT > ESyncMLInputTypeIPAddress ) + { + iIT = ESyncMLInputTypeAlphaNumeric; + } + + if ( iET < ESyncMLEchoTypeText || iET > ESyncMLEchoTypePassword ) + { + iET = ESyncMLEchoTypeText; + } + + if( iServerMsg.Length() == 0 ) + { + HBufC* stringholder = NULL; + stringholder = StringLoader::LoadLC( R_DEFAULT_ALERT_HEADING ); + iServerMsg.Copy( stringholder->Des() ); + CleanupStack::PopAndDestroy( stringholder ); + } + if ( iMaxTime < 0 ) + { + iMaxTime = 0; + } + if (iNoteType == ESyncMLSingleChoiceQuery || iNoteType == ESyncMLMultiChoiceQuery ) + { + iNumberOfItems = pckg().iNumberOfItems; + if(iNumberOfItems > 0) + { + iListItems = new (ELeave) CDesCArrayFlat( iNumberOfItems ); + } + else + { + aMessage.Complete( KErrCancel ); + iNeedToCompleteMessage = EFalse; + return; + } + TPtrC8 listitemsptr; + TBuf listlengtharray; + User::LeaveIfError(iChunk.OpenGlobal(pckg().iChunkName,EFalse)); + TInt size1 = iChunk.Size(); + listitemsptr.Set(iChunk.Base(),size1); + HBufC* databuf = NULL; + TRAPD(errC, databuf = CnvUtfConverter::ConvertToUnicodeFromUtf8L(listitemsptr)); + iChunk.Close(); + if(errC) + { + aMessage.Complete( errC ); + iNeedToCompleteMessage = EFalse; + return; + } + CleanupStack::PushL(databuf); + TPtr listitems = databuf->Des(); + listlengtharray=pckg().iItemLength; + TPtrC temp1,temp2,temp3,temp4; + TInt currlen=0,itemlength=0; + TInt prevcommapos=0; + TBuf<4> checkon(_L("0\t")); + TBuf<4> checkoff(_L("1\t")); + for(TInt i=0;iDes().Append(checkoff);//by default dont show check on + } + item1->Des().Append(temp4); + iListItems->AppendL(item1->Des()); + CleanupStack::PopAndDestroy(1);//item,dataBuf16 + } + } + CleanupStack::PopAndDestroy(1); + } + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); + + FTRACE( FPrint( _L( + "[SmlNotif]\t CSyncMLDlgNotifier::GetParamsL() completed, iNoteType = %d, iTimeout = %d, iServerMsg = " ), + iNoteType, iMaxTime ) ); + FTRACE( FPrint( _L( + "[SmlNotif]\t \"%S\"" ), + &iServerMsg ) ); + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::Cancel +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::Cancel() + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::Cancel()")); + + CSyncMLNotifierBase::Cancel(); + + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::Cancel() completed")); + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::RunL +// Ask user response and return it to caller. +// Store device into registry if user has accepted authorisation. +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::RunL() + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL()")); + const TChar KDRSeparator('-'); + const TChar KChoiceItemSeparator(','); + TInt result( KErrNone ); + EndKeyPress = EFalse; + // Turn lights on and deactivate apps -key + // + TurnLightsOn(); + + switch( iNoteType ) + { + case ESyncMLInfoNote: + { + CAknInformationNote* infoNote = new (ELeave) CAknInformationNote; + TInt maxtime = iMaxTime * KSyncMLuSecsInSec; + if ( maxtime < 0 ) + { + maxtime = 0; + } + infoNote->SetTimeout( (CAknNoteDialog::TTimeout) maxtime ); + result = infoNote->ExecuteLD( iServerMsg ); + if ( result == KErrNone ) + { + result = EAknSoftkeyOk; + } + break; + } + case ESyncMLErrorNote: + { + CAknErrorNote* errNote = new (ELeave) CAknErrorNote; + TInt maxtime = iMaxTime * KSyncMLuSecsInSec; + if ( maxtime < 0 ) + { + maxtime = 0; + } + errNote->SetTimeout( (CAknNoteDialog::TTimeout) maxtime ); + result = errNote->ExecuteLD( iServerMsg ); + if ( result == KErrNone ) + { + result = EAknSoftkeyOk; + }; + break; + } + case ESyncMLOkQuery: + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() Ok/Empty query shown") ); + + CSyncMLTimedMessageQuery* dlg = + CSyncMLTimedMessageQuery::NewL( iServerMsg, iMaxTime ); + + // Pushed dialog is popped inside RunLD + dlg->PrepareLC( R_SML_MESSAGE_QUERY ); + dlg->ButtonGroupContainer().SetCommandSetL( + R_AVKON_SOFTKEYS_OK_EMPTY__OK ); + EnableSyncProgressNoteL( EFalse ); + result = dlg->RunLD(); + dlg = NULL; + EnableSyncProgressNoteL( ETrue ); + break; + } + + case ESyncMLQueryNote: // This enumeration will be removed. + case ESyncMLYesNoQuery: + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() Yes/No query shown") ); + CSyncMLTimedMessageQuery* dlg = + CSyncMLTimedMessageQuery::NewL( iServerMsg, iMaxTime ); + // Pushed dialog is popped inside RunLD + dlg->PrepareLC( R_SML_MESSAGE_QUERY ); + dlg->ButtonGroupContainer().SetCommandSetL( + R_AVKON_SOFTKEYS_YES_NO__YES ); + EnableSyncProgressNoteL( EFalse ); + result = dlg->RunLD(); + dlg = NULL; + EnableSyncProgressNoteL( ETrue ); + break; + } + case ESyncMLSingleChoiceQuery: + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() single choice list query") ); + if ( iNumberOfItems > 0 ) + { + SuppressAppSwitching( ETrue ); + EnableSyncProgressNoteL( EFalse ); + CEikFormattedCellListBox* listBox = new ( ELeave ) + CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + CSyncMLAknPopUpList* popupList = + CSyncMLAknPopUpList::NewL( (CAknSingleHeadingPopupMenuStyleListBox*)listBox, + R_AVKON_SOFTKEYS_OK_CANCEL__OK, + AknPopupLayouts::EMenuWindow,iMaxTime ); + CleanupStack::PushL( popupList ); + listBox->ConstructL( popupList, ( EAknListBoxSelectionList | EAknListBoxLoopScrolling ) ); + listBox->Model()->SetItemTextArray( iListItems ); + listBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + listBox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue ); + listBox->HandleItemAdditionL(); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + TInt defaultindex = 0; + TLex drval(iDR); + drval.Val(defaultindex); + if(defaultindex > 0) + defaultindex--; + else + defaultindex = 0; + listBox->SetCurrentItemIndex(defaultindex); + popupList->SetTitleL( iServerMsg ); + CleanupStack::Pop( popupList ); + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() single choice list query shown") ); + result = popupList->ExecuteLD(); + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() single choice list query dismissed") ); + popupList = NULL; + if ( result ) + { + reply.irettext.Num(listBox->CurrentItemIndex()+1); + } + reply.iretval = result; + CleanupStack::PopAndDestroy( listBox ); // Destroys also the icon array + EnableSyncProgressNoteL( ETrue ); + SuppressAppSwitching( EFalse ); + } + else + { + reply.iretval = result; + } + TSyncMLDlgNotifReturnParamsPckg pkg(reply); + iMessage.WriteL(iReplySlot,pkg); + break; + } + case ESyncMLMultiChoiceQuery: + { + if ( iNumberOfItems > 0 ) + { + SuppressAppSwitching( ETrue ); + EnableSyncProgressNoteL( EFalse ); + // create listbox + // list item string format: "0\tLabel" where 0 is an index to icon array + CEikFormattedCellListBox* listBox = + new ( ELeave ) CAknSingleGraphicPopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + // create popup + CSyncMLAknPopUpList* popup = + CSyncMLAknPopUpList::NewL((CAknSingleHeadingPopupMenuStyleListBox*) listBox, + R_AVKON_SOFTKEYS_OK_CANCEL__MARK , + AknPopupLayouts::EMenuWindow,iMaxTime); + CleanupStack::PushL( popup ); + popup->SetTitleL(iServerMsg ); +#ifdef RD_SCALABLE_UI_V2 + if( AknLayoutUtils::PenEnabled() ) + { + listBox->ConstructL( popup, EAknListBoxStylusMultiselectionList ); + } + else + { + listBox->ConstructL( popup, EAknListBoxMultiselectionList ); + } +#else + listBox->ConstructL( popup, EAknListBoxMultiselectionList ); +#endif + listBox->CreateScrollBarFrameL(ETrue); + listBox->ScrollBarFrame()-> + SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + SetIconsL(listBox); + listBox->Model()->SetItemTextArray( iListItems ); + listBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + listBox->SetCurrentItemIndex(iDefindex); + listBox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue ); + listBox->HandleItemAdditionL(); + // set all items as selected + TInt count( listBox->Model()->NumberOfItems() ); + TBuf<20> drcheck; + for( TInt index( 0 ); index < count; index++ ) + { + drcheck.Zero(); + drcheck.Append(KDRSeparator); + drcheck.AppendNum(index+1); + drcheck.Append(KDRSeparator); + if(iDR.Find(drcheck) >= KErrNone) + { + listBox->View()->SelectItemL( index ); + } + } + // launch popup + result = popup->ExecuteLD(); + // No leaving functions allowed between executeLD and CleanupStack::Pop(). + CleanupStack::Pop( popup ); + /// Own: ListBox selection array + const CArrayFix* iSelectionArray; + if( result ) + { + iSelectionArray = listBox->View()->SelectionIndexes(); + TBuf<20> temp; + TBuf temp1; + for(TInt i=iSelectionArray->Count()-1;i>=0;i--) + { + temp.Num(iSelectionArray->At(i)+1); + if((temp1.Length() + temp.Length()) < KSyncMLMaxAlertResultLength ) + { + temp1.Append(temp); + temp1.Append(KDRSeparator); + } + else{ + break; + } + } + reply.irettext.Append(temp1); + // delete iSelectionArray; this deletion taken care in ~CEIKLISTBOX (eiklbx.cpp) + } + reply.iretval = result; + CleanupStack::PopAndDestroy(); // listBox + EnableSyncProgressNoteL( ETrue ); + SuppressAppSwitching( EFalse ); + } + else + { + reply.iretval = result; + } + TSyncMLDlgNotifReturnParamsPckg pkg(reply); + iMessage.WriteL(iReplySlot,pkg); + break; + } + case ESyncMLInputQuery: //For 1102 alert + { + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() Input query shown") ); + // For input text server alert + + SuppressAppSwitching( ETrue ); + + switch( iIT ) + { + case ESyncMLInputTypeAlphaNumeric: //Alphanumeric Input type + { + + InputTypeAlphaNumericL(result); + break; + } + + case ESyncMLInputTypeNumeric: //Numeric Input type + { + InputTypeNumericL(result); + break; + } + + case ESyncMLInputTypeDate: //Date Input type + { + InputTypeDateL(result); + break; + } + + case ESyncMLInputTypeTime: //Time Input type + {//create TTime from TBuf iDR + //hhmmss + InputTypeTimeL(result); + break; + } + + case ESyncMLInputTypePhoneNumber: //Phone Number Input type + { + InputTypePhoneNumberL(result); + break; + } + + case ESyncMLInputTypeIPAddress: //IP Address Input type + { + TBuf InputText(iDR); + TInetAddr destAddr; + destAddr.Input(iDR); + EnableSyncProgressNoteL( EFalse );//coment out when using test app + CAknIpAddressQueryDialog* dlg = CAknIpAddressQueryDialog::NewL (destAddr); + CleanupStack::PushL(dlg); + dlg->SetPromptL(iServerMsg); + CleanupStack::Pop(); //dlg + result=dlg->ExecuteLD( R_NEWALERT_IP_QUERY ); + dlg=NULL; + destAddr.Output(InputText); + reply.iretval = result; + reply.irettext=InputText; + EnableSyncProgressNoteL( ETrue );//coment out when using test app + break; + } + + default: + { + User::Leave( KErrArgument ); + } + } + SuppressAppSwitching( EFalse ); + TSyncMLDlgNotifReturnParamsPckg pkg(reply); + iMessage.WriteL(iReplySlot,pkg); + break; + } +//#endif + + default: // Unhandled note type + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() Note type not handled")); + User::Leave( KErrArgument ); + break; + } + } + // Complete message, if not cancelled + if ( iNeedToCompleteMessage ) + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() completing the message")); + switch ( result ) + { + case EAknSoftkeyYes: + case EAknSoftkeyOk: + case ETrue: + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() completing the message with KErrNone")); + iMessage.Complete( KErrNone ); + break; + } + case EAknSoftkeyCancel: + case EAknSoftkeyNo: + case KErrNone: // Pressing "Cancel" or "No" may return zero + { + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() completing the message with KErrCancel")); + iMessage.Complete( KErrCancel ); + break; + } + default: + { + iMessage.Complete( result ); + break; + } + } + } + + iNeedToCompleteMessage = EFalse; + iReplySlot = NULL; + + iServerMsg = KNullDesC; + + FLOG(_L("[SmlNotif]\t CSyncMLDlgNotifier::RunL() completed")); + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::CSyncMLDlgNotifier +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSyncMLDlgNotifier::CSyncMLDlgNotifier( CSyncMLAppLaunchNotifier* aAppLaunchNotif ) + : iAppLaunchNotif( aAppLaunchNotif ),iListItems(NULL),iDefindex(0) + { + } + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::InputTypeAlphaNumericL(TInt & result) +// Process if input type is alphanumeric +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::InputTypeAlphaNumericL(TInt & result) +{ + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeAlphaNumericL() startedd") ); + TBuf InputText(iDR); + if( iET == ESyncMLEchoTypePassword ) //for pwd ET + { + CSyncMLTimedInputTextQuery* dlg = CSyncMLTimedInputTextQuery::NewL( InputText, iServerMsg, EndKeyPress, iMaxTime); + dlg->SetMaxLength( iMaxlen ); + EnableSyncProgressNoteL( EFalse );//coment out when using test app + result = dlg->ExecuteLD( R_NEWALERT_DATA_PWD_QUERY ); + if(EndKeyPress) + { + result = KErrAbort; + } + reply.iretval = result; + reply.irettext=InputText; + dlg=NULL; + EnableSyncProgressNoteL( ETrue );//coment out when using test app + } + else + { + CSyncMLTimedInputTextQuery* dlg = CSyncMLTimedInputTextQuery::NewL( InputText,iServerMsg, EndKeyPress, iMaxTime); + dlg->SetMaxLength( iMaxlen ); + EnableSyncProgressNoteL( EFalse );//coment out when using test app + result = dlg->ExecuteLD( R_INPUTTEXT_DATA_QUERY ); + if(EndKeyPress ) + { + result = KErrAbort; + } + reply.iretval = result; + reply.irettext=InputText; + dlg=NULL; + EnableSyncProgressNoteL( ETrue );//coment out when using test app + } + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeAlphaNumericL() completed") ); +} + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::InputTypeNumericL(TInt & result) +// Process if input type is numeric +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::InputTypeNumericL(TInt & result) +{ + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeNumericL() started") ); + TBuf InputText(iDR); + TReal value = 0; + TLex data(iDR); + if( iDR.Length() != 0 ) + { + data.Val(value); + } + if ( iET == ESyncMLEchoTypePassword ) + { + TChar ch = '0'; + for (TInt i=0;iSetMaxLength( iMaxlen ); + EnableSyncProgressNoteL( EFalse );//coment out when using test app + result = dlg->ExecuteLD( R_NEWALERT_NUMERIC_PWD_QUERY ); + dlg = NULL; + if(EndKeyPress) + { + result = KErrAbort; + } + } + else + { + CSyncMLTimedNumberQueryDialog* dlg = + CSyncMLTimedNumberQueryDialog::NewL( value, iServerMsg, EndKeyPress, iMaxTime); + + EnableSyncProgressNoteL( EFalse );//coment out when using test app + result = dlg->ExecuteLD( R_NEWALERT_NUMBER_QUERY ); + dlg = NULL; + if(EndKeyPress) + { + result = KErrAbort; + } + reply.iretval = result; + data.Val( value ); + _LIT(KSendFormat ,"%10.10f"); + InputText.Format ( KSendFormat, value ); + } + reply.iretval = result; + reply.irettext= InputText; + + EnableSyncProgressNoteL( ETrue );//coment out when using test app + + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeNumericL() completed") ); +} + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::InputTypeDateL(TInt & result) +// Process if input type is Date +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::InputTypeDateL(TInt & result) +{ + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeDateL() started") ); + TBuf InputText(iDR); + TTime date(_L("00010101:")); + TInt BadData = 1; + TChar ch = '0'; + for (TInt i=0;i revdate; + revdate.Append(iDR.Mid(4,4)); + revdate.Append(iDR.Mid(2,2)); + revdate.Append(iDR.Left(2)); + revdate.Append(':'); + date.Set( revdate ); + } + CSyncMLTimedDateQuery* dlg = CSyncMLTimedDateQuery::NewL( date, iServerMsg,EndKeyPress , iMaxTime); + EnableSyncProgressNoteL( EFalse );//coment out when using test app + result = dlg->ExecuteLD(R_NEWALERT_DATE_QUERY); + + if(EndKeyPress) + { + result = KErrAbort;//0-keypress 1-ok,0-cancel,-1=end key + } + reply.iretval = result; + _LIT(KDateFormat,"%F%D%M%Y"); + TBuf <20> StringDate; + date.FormatL(StringDate, KDateFormat); + reply.irettext=StringDate; + dlg = NULL; + EnableSyncProgressNoteL( ETrue );//comented out for emulator testing + + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeDateL() completed") ); +} + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::InputTypeTimeL(TInt & result) +// Process if input type is Time +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::InputTypeTimeL(TInt & result) +{ + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeTimeL() started") ); + TBuf InputText(iDR); + //create TTime from TBuf iDR + //hhmmss + TTime IpTime(_L("120000.")); + TInt BadData=1; + TChar ch= '0'; + for (TInt i=0;iExecuteLD(R_NEWALERT_TIME_QUERY); + if(EndKeyPress) + { + result = KErrAbort;//0-keypress 1-ok,0-cancel,-1=end key + } + reply.iretval = result; + _LIT(KTimeFormat,"%F%H%T%S"); + TBuf <20> StringTime; + IpTime.FormatL(StringTime, KTimeFormat); + reply.irettext=StringTime; + dlg = NULL; + EnableSyncProgressNoteL( ETrue );//coment out when using test app + + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypeTimeL() completed") ); +} + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::InputTypePhoneNumberL(TInt & result) +// Process if input type is Phone number +// ----------------------------------------------------------------------------- +// +void CSyncMLDlgNotifier::InputTypePhoneNumberL(TInt & result) +{ + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypePhoneNumberL() started") ); + TBuf InputText(iDR); + EnableSyncProgressNoteL( EFalse );//comented out for emulator testing + TInt ret=0; + for(TInt i=0;i 0) + { + ret = -1; + break; + } + else + { + continue; + } + } + else + { + TChar ch=iDR[i] ; + if(!ch.IsDigit()) + { + ret = -1; + break; + } + } + } + + if(ret == -1) + InputText.Zero(); + CSyncMLTimedInputTextQuery* dlg = CSyncMLTimedInputTextQuery::NewL(InputText,iServerMsg, EndKeyPress, iMaxTime); + dlg->SetMaxLength( iMaxlen ); + result = dlg->ExecuteLD( R_NEWALERT_PHONE_QUERY ); + if(EndKeyPress ) + { + result = KErrAbort; + } + reply.iretval = result; + reply.irettext=InputText; + dlg=NULL; + EnableSyncProgressNoteL( ETrue );//coment out when using test app + FLOG( _L("[SmlNotif]\t CSyncMLDlgNotifier::InputTypePhoneNumberL() completed") ); +} + +// ----------------------------------------------------------------------------- +// CSyncMLDlgNotifier::SetIconsL() +// Sets the icons to multiselection/markable list +// ----------------------------------------------------------------------------- +void CSyncMLDlgNotifier::SetIconsL(CEikFormattedCellListBox* aListBox) + { + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 ); + CleanupStack::PushL( iconArray ); + CFbsBitmap* checkboxOnBitmap = NULL; + CFbsBitmap* checkboxOnBitmapMask = NULL; + CFbsBitmap* checkboxOffBitmap = NULL; + CFbsBitmap* checkboxOffBitmapMask = NULL; + + //CListItemDrawer is using this logical color as default for its marked icons + TRgb defaultColor; + defaultColor = iEikEnv->Color( EColorControlText ); + + // Create 'ON' checkbox icon + AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), + KAknsIIDQgnIndiCheckboxOn, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG13, + checkboxOnBitmap, + checkboxOnBitmapMask, + KAvkonBitmapFile, + EMbmAvkonQgn_indi_checkbox_on, + EMbmAvkonQgn_indi_checkbox_on_mask, + defaultColor + ); + + CGulIcon* checkboxOnIcon = CGulIcon::NewL( checkboxOnBitmap, checkboxOnBitmapMask ); + // cleanup checkboxOnBitmap, checkboxOnBitmapMask + CleanupStack::Pop( checkboxOnBitmapMask ); + CleanupStack::Pop( checkboxOnBitmap ); + + CleanupStack::PushL( checkboxOnIcon ); + iconArray->AppendL( checkboxOnIcon ); + + // Create 'OFF' checkbox icon + AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), + KAknsIIDQgnIndiCheckboxOff, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG13, + checkboxOffBitmap, + checkboxOffBitmapMask, + KAvkonBitmapFile, + EMbmAvkonQgn_indi_checkbox_off, + EMbmAvkonQgn_indi_checkbox_off_mask, + defaultColor + ); + + CGulIcon* checkboxOffIcon = CGulIcon::NewL( checkboxOffBitmap, checkboxOffBitmapMask ); + // cleanup checkboxOffBitmap, checkboxOffBitmapMask + CleanupStack::Pop( checkboxOffBitmapMask ); //WILL BE DELETED BY CGUIICON + CleanupStack::Pop( checkboxOffBitmap ); //WILL BE DELETED BY CGUIICON + + + CleanupStack::PushL( checkboxOffIcon ); + iconArray->AppendL( checkboxOffIcon ); + aListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); // changes ownership + + // cleanup checkboxOnIcon, checkboxOffIcon, iconArray + CleanupStack::Pop( checkboxOffIcon ); //WILL BE DELETED BY CGUIICON + CleanupStack::Pop( checkboxOnIcon ); //WILL BE DELETED BY CGUIICON + CleanupStack::Pop( iconArray );//WILL BE DELETED BY CFormattedCellListBoxData:: + + } + +// End of File