--- /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 <eikenv.h> // Eikon environment
+#include <SyncMLClient.h>
+#include <SyncMLClientDS.h>
+#include <SyncMLClientDM.h>
+#include <SyncService.h>
+#include <aknnotewrappers.h>
+#include <s32mem.h>
+#include <in_sock.h>
+#include <StringLoader.h> // Localisation stringloader
+#include <aknlists.h>
+#include <avkon.mbg>
+#include <aknconsts.h>
+#include <utf.h>
+#include <SyncMLNotifier.rsg> // 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<TSyncMLDlgNotifParams> 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<KSyncMLChoiceItemsLengthBuffer> 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;i<listlengtharray.Length();i++)
+ {
+ if(listlengtharray[i]== KChoiceItemSeparator )
+ {
+ if(prevcommapos)
+ {
+ temp1.Set(listlengtharray.LeftTPtr(i));
+ temp2.Set(temp1.Right(i-(prevcommapos+1)));
+ prevcommapos= i;
+ }
+ else //firsttime finding comma
+ {
+ prevcommapos= i;
+ temp1.Set(listlengtharray.LeftTPtr(i));
+ temp2.Set(temp1.Right(i));
+ }
+ TLex lexval;
+ lexval.Assign(temp2);
+ lexval.Val(itemlength);
+ temp3.Set(listitems.Left(currlen + itemlength));
+ temp4.Set(temp3.Right(itemlength));
+ currlen += itemlength;
+ HBufC* item1 = HBufC::NewLC(temp4.Length()+3);
+ if(iNoteType == ESyncMLMultiChoiceQuery)
+ {
+ item1->Des().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<TInt>* iSelectionArray;
+ if( result )
+ {
+ iSelectionArray = listBox->View()->SelectionIndexes();
+ TBuf<20> temp;
+ TBuf<KSyncMLMaxAlertResultLength> 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<KSyncMLMaxDefaultResponseMsgLength> 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<KSyncMLMaxDefaultResponseMsgLength> 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<KSyncMLMaxDefaultResponseMsgLength> 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;i<iDR.Length();i++)
+ {
+ ch=iDR[i];
+ if( ch!='+' || ch!='-' || ch!='.' )
+ {
+ if( !ch.IsDigit() )
+ {
+ InputText.Zero();
+ break;
+ }
+ }
+ }
+ CSyncMLTimedInputTextQuery* dlg = CSyncMLTimedInputTextQuery::NewL( InputText, iServerMsg, EndKeyPress, iMaxTime);
+ dlg->SetMaxLength( 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<KSyncMLMaxDefaultResponseMsgLength> InputText(iDR);
+ TTime date(_L("00010101:"));
+ TInt BadData = 1;
+ TChar ch = '0';
+ for (TInt i=0;i<iDR.Length();i++)
+ {
+ ch=iDR[i];
+ if(!ch.IsDigit())
+ {
+ BadData=0;
+ break;
+ }
+ }
+ if( iDR.Length() != 0 && iDR.Length()==8 && BadData )
+ {
+ //iDR.Append(':');
+ TBuf <9> 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<KSyncMLMaxDefaultResponseMsgLength> InputText(iDR);
+ //create TTime from TBuf iDR
+ //hhmmss
+ TTime IpTime(_L("120000."));
+ TInt BadData=1;
+ TChar ch= '0';
+ for (TInt i=0;i<iDR.Length();i++)
+ {
+ ch=iDR[i];
+ if(!ch.IsDigit())
+ {
+ BadData=0;
+ break;
+ }
+ }
+ if( iDR.Length() != 0 && iDR.Length() == 6 && BadData )
+ {
+ iDR.Append('.');
+ IpTime.Set( iDR );
+ }
+ CSyncMLTimedDateQuery* dlg =
+ CSyncMLTimedDateQuery::NewL( IpTime, iServerMsg, EndKeyPress, iMaxTime);
+ EnableSyncProgressNoteL( EFalse );//comented out for emulator testing
+ result = dlg->ExecuteLD(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<KSyncMLMaxDefaultResponseMsgLength> InputText(iDR);
+ EnableSyncProgressNoteL( EFalse );//comented out for emulator testing
+ TInt ret=0;
+ for(TInt i=0;i<iDR.Length();i++)
+ {
+ if(iDR[i] == 'p' || iDR[i] == 'w' || iDR[i] == '+' || iDR[i] == '*' ||iDR[i] == '#')
+ {
+ if( iDR[i] == '+' && 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