syncmlfw/syncmlnotifier/src/SyncMLFwUpdNotifier.cpp
changeset 0 b497e44ab2fc
child 9 57a65a3a658c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/syncmlnotifier/src/SyncMLFwUpdNotifier.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,1000 @@
+/*
+* Copyright (c) 2005-2006 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:  The firmware update result notifier.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikenv.h>          // Eikon environment
+#include <uikon/eiksrvui.h>
+#include <AknQueryDialog.h>
+#include <aknmessagequerydialog.h>
+#include <aknstaticnotedialog.h>
+#include <centralrepository.h>  
+#include <StringLoader.h>    // Localisation stringloader
+#include <SyncMLClient.h>
+#include <SyncMLClientDS.h>
+#include <SyncMLClientDM.h>
+#include <centralrepository.h>
+#include <DevManInternalCRKeys.h>   
+#include <SyncMLNotifierDomainCRKeys.h> 
+#include <SyncMLNotifier.rsg>           // Own resources
+#include <aknnotewrappers.h>
+#include <e32property.h>
+
+#include "SyncMLFwUpdNotifier.h"  // Class declaration
+#include "SyncMLNotifDebug.h"
+
+#include "SyncMLQueryDialog.h"
+#include "SyncMLMessageQueryDialog.h"
+#include "SyncMLNotifPrivateCRKeys.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::CSyncMLFwUpdNotifier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSyncMLFwUpdNotifier::CSyncMLFwUpdNotifier()
+    {
+    iRunLhang = EFalse;
+    iDlg = NULL;
+    iFotaEncryptReq = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLDSNotifier::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSyncMLFwUpdNotifier* CSyncMLFwUpdNotifier::NewL()
+    {
+    CSyncMLFwUpdNotifier* self = new (ELeave) CSyncMLFwUpdNotifier();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+    
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSyncMLFwUpdNotifier::~CSyncMLFwUpdNotifier()
+    {
+    Cancel();   // Free own resources
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::RegisterL
+// -----------------------------------------------------------------------------
+//
+CSyncMLFwUpdNotifier::TNotifierInfo CSyncMLFwUpdNotifier::RegisterL()
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::RegisterL()"));
+    iInfo.iUid = KSyncMLFwUpdNotifierUid;
+    iInfo.iChannel = KSmlFwUpdChannel;
+    iInfo.iPriority = ENotifierPriorityHigh;
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::RegisterL() completed"));
+    return iInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::GetParamsL
+// Initialize parameters and check if device is already
+// in registry. Jump to RunL as soon as possible.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLFwUpdNotifier::GetParamsL( const TDesC8& aBuffer,
+                                             TInt aReplySlot,
+                                       const RMessagePtr2& aMessage )
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::GetParamsL()"));
+
+    if( iReplySlot != NULL || iNeedToCompleteMessage )
+        {
+        User::Leave( KErrInUse );
+        }
+    iMessage = aMessage;
+    iNeedToCompleteMessage = ETrue;
+    iReplySlot = aReplySlot;
+
+	TSyncMLFwUpdNotifParams param;
+ 	TPckgC<TSyncMLFwUpdNotifParams> pckg( param );
+ 	pckg.Set( aBuffer );
+
+    iNoteType = pckg().iNoteType;
+    iNoteInfo = pckg().iIntParam;
+    iFotaMemoryNeeded = pckg().iMemoryNeeded;
+    iFotaEncryptReq = pckg().iEncryptReq;
+
+    // Call SetActive() so RunL() will be called by the active scheduler
+    //
+    SetActive();
+    iStatus = KRequestPending;
+    TRequestStatus* stat = &iStatus;
+    User::RequestComplete( stat, KErrNone );
+
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::GetParamsL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::RunL
+// Ask user response and return it to caller.
+// -----------------------------------------------------------------------------
+//
+void CSyncMLFwUpdNotifier::RunL()
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::RunL()"));
+
+    TInt result( KErrNone );
+
+    // Turn lights on and deactivate apps -key
+    //
+    TurnLightsOn();
+    SuppressAppSwitching( ETrue );
+
+    switch( iNoteType )
+        {
+        case ESyncMLFwUpdErrorNote:
+            {
+            result = ShowUpdateErrorNoteL();
+            break;
+            }
+
+        case ESyncMLFwUpdResultNote:
+            {
+            if (iFotaEncryptReq)
+                {
+                result = ShowUpdateResultWithEncryptionNoteL();
+                }
+            else
+                {
+                result = ShowUpdateResultNoteL();
+                }
+            break;
+            }
+            
+        case ESyncMLFwUpdStartQuery:
+            {
+            result = ShowUpdateStartQueryL();
+            break;
+            }
+        case ESyncMLFwUpdRebootNote:
+            {
+            CAknStaticNoteDialog* dlg = new ( ELeave ) CAknStaticNoteDialog;
+            dlg->PrepareLC( R_SML_FOTA_RESTART_NOTE );
+
+            HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_REBOOT_NOTE );
+            dlg->SetTextL( *stringHolder );
+            CleanupStack::PopAndDestroy( stringHolder );
+
+            result = dlg->RunLD();
+            if ( result == KErrNone )
+                {
+                result = EAknSoftkeyOk;
+                };
+            
+            break;
+            }
+     	case ESyncMLFwUpdNoReminder:
+     		{
+     		 result =  ShowNoReminderQueryL();
+			 break;
+            }
+        case ESyncMLFwUpdLargeNotEnoughMemory:
+        	{
+        	 result = ShowNotEnoughMemoryL( iFotaMemoryNeeded , EFalse );
+			 break;
+        	}
+        case ESyncMLFwUpdOmaDLNotEnoughMemory:
+        	{
+        	 result = ShowNotEnoughMemoryL( iFotaMemoryNeeded , ETrue );
+			 break;
+        	}	
+        case ESyncMLFwUpdOmaDLUserCancel:
+        	{
+        	 result = ShowDownloadUserCancelL();
+        	 break;	
+        	}
+        case ESyncMLFwUpdOmaDLPostponed:
+        	{
+        	 result = ShowDownloadPostponedL();
+        	 break;	
+        	}
+        case ESyncMLFwUpdOmaDLCancelled:
+        	{
+        	 result = ShowDownloadCancelledL();
+        	 break;	
+        	}
+        case ESyncMLFwUpdOmaDLResume:
+        	{
+        	 result = ShowDownloadResumeL();
+        	 break;	
+        	}
+        case ESyncMLFwUpdStartQueryEnc:
+            {
+            result = ShowUpdateStartQueryEncryptionL();
+            break;
+            }
+        default: // Unhandled note type
+            {
+            FLOG(_L("[SMLNOTIF]\t CSyncMLDlgNotifier::RunL() Note type not handled"));
+            User::Leave( KErrArgument );
+            break;
+            }
+        }
+
+    // Activate apps -key again
+    //
+    SuppressAppSwitching( EFalse );
+
+		if ( iNeedToCompleteMessage )
+			{
+			// Translate the user key presses to message completion response
+			FTRACE( FPrint( _L("[SmlNotif]\t User Key-Press for dialog = %d" ), result ) );
+			switch( result ) 
+				{
+					case ESyncMLDlgRespKeyOk://all LSK press will fall here.
+						iMessage.Complete( KErrNone );
+						break;
+					case ESyncMLDlgRespKeyCancel://all RSK press will fall here.
+						iMessage.Complete (KErrCancel);
+						break;
+					case ESyncMLDlgRespKeyOthers: //all call-termination key press fall here.
+						iMessage.Complete (KErrNotFound);
+						break;
+					default://rest of the cases and errors
+						iMessage.Complete (KErrNone);
+						break;
+				}		
+			}
+
+
+    // Complete message and free resources
+    //
+    iNeedToCompleteMessage = EFalse;
+    iReplySlot = NULL;
+
+    iNoteType = ESyncMLFwUpdUnknown;
+
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::RunL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::Cancel
+// Release all own resources (member variables)
+// -----------------------------------------------------------------------------
+//
+void CSyncMLFwUpdNotifier::Cancel()
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel()"));
+    if(iRunLhang)
+    	{
+    	 FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel() inside Runlhang"));
+    	if(iDlg)
+    		{
+    		FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel()before exit"));
+    		TRAP_IGNORE(iDlg->ExitL());
+    		if(iDlg)
+    			{
+        		FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel()before delete"));
+    			delete iDlg;
+    			iDlg = NULL;
+        		FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel()after delete"));
+    			}
+    		}
+    	}
+    CSyncMLNotifierBase::Cancel();
+
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::Cancel() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowUpdateErrorNoteL
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowUpdateErrorNoteL()
+    {
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateErrorNoteL() error = %d" ),
+        iNoteInfo ) );
+
+    HBufC* stringHolder( NULL );
+
+    switch ( iNoteInfo )
+        {
+        case KErrDiskFull:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_NOT_PERMITTED );
+            break;
+            }
+        case KErrCommsLineFail:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_LOST_CONNECTION );
+            break;
+            }
+        case KErrCouldNotConnect:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_SERVER_ERROR );
+            break;
+            }
+        case KErrBadPower:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_BATTERY_LOW );
+            break;
+            }
+        case KErrBadUsbPower:
+             {
+             	stringHolder = StringLoader::LoadLC( R_FOTA_USB_BATTERY_LOW ); 
+             	break;
+            }
+        case KErrCommsLineFail2:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_CONNECTION_FAIL2 );
+            break;
+            }
+        case KErrGeneralResume:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_DOWNLOAD_GENERAL_RESUME );
+            break;
+            }
+        case KErrGeneralNoResume:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_DOWNLOAD_NO_RESUME );
+            break;
+            }
+        case KErrBadPowerForEnc:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_UPDATE_ENC_BATTERY_LOW );
+            break;
+            }
+        case KErrDeviceMemoryBusy:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_DEVICE_MEMORY_BUSY );
+            break;
+            }
+        default:
+            {
+            return KErrArgument; // Will be converted to KErrNone when completing
+                                 // message, since this is not actually an error.
+            }
+        }
+
+    
+    TBool keypress(EFalse);
+	CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+    msgDlg->SetMessageTextL(*stringHolder);
+    
+    CleanupStack::PopAndDestroy( stringHolder );
+    
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+
+    stringHolder = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    msgDlg->SetHeaderTextL( stringHolder->Des() );
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+    
+   	msgDlg->ButtonGroupContainer().SetCommandSetL( 
+    	                                  R_AVKON_SOFTKEYS_OK_EMPTY__OK );
+    
+    TInt retval (ESyncMLDlgRespKeyNone);
+    iRunLhang = ETrue;
+    iDlg = msgDlg; 
+	retval = msgDlg->RunLD();
+	iRunLhang = EFalse;
+    msgDlg = NULL;
+	iDlg = NULL;
+
+	//call-termination key press is handled here.
+	if (keypress)
+    	retval = ESyncMLDlgRespKeyOthers;
+    
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateErrorNoteL() completed: retval = %d" ),
+        retval ) );
+        
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowUpdateResultNoteL
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowUpdateResultNoteL()
+    {
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateResultNoteL() result = %d" ),
+        iNoteInfo ) );
+
+    HBufC* stringHolder( NULL );
+
+    switch ( iNoteInfo )  // It is easier to add cases to switch structure
+        {
+        case KErrNone:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_NOTIF_COMPLETE );
+            break;
+            }
+        default:
+            {
+            stringHolder = StringLoader::LoadLC( R_FOTA_MSG_QUERY_NOT_UPDATED );
+            break;
+            }
+        }
+        
+    TBool keypress(EFalse);
+	CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+    msgDlg->SetMessageTextL(*stringHolder);
+
+    CleanupStack::PopAndDestroy( stringHolder );
+    
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+
+    stringHolder = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    msgDlg->SetHeaderTextL( stringHolder->Des() );
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+    
+   	msgDlg->ButtonGroupContainer().SetCommandSetL( 
+        									R_AVKON_SOFTKEYS_OK_EMPTY__OK );
+    TInt retval(ESyncMLDlgRespKeyNone);
+    iRunLhang = ETrue;
+    iDlg = msgDlg; 
+    retval = msgDlg->RunLD();
+    iRunLhang = EFalse;
+    msgDlg = NULL;
+    iDlg = NULL;
+	//call-termination key press has to be suppressed here. so keypress has no significance here!    
+	/*if (keypress)
+    	retval = EKeyOthers;*/
+    	
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateResultNoteL() completed: retval = %d" ),
+        retval ) );
+    
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowUpdateStartQueryL
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowUpdateStartQueryL()
+    {
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() profileId = %d" ),
+        iNoteInfo ) );
+
+    HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    TInt retval (ESyncMLDlgRespKeyNone);  
+    TInt CustomNotes(KErrNone);
+    CRepository* centrep = NULL;
+    TRAPD( err, centrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys) );    
+    if(!err && centrep)
+    {
+      TInt err= centrep->Get( KDevManUINotesCustomization, CustomNotes);	
+      if (err)
+       CustomNotes = 0;
+    }
+    else
+    {
+      CustomNotes = 0;	
+    }
+    TBool keypress(EFalse);
+    CSyncMLQueryDialog* dlg = CSyncMLQueryDialog::NewL(keypress);
+    TLanguage language = User::Language();
+    if((CustomNotes) && IsLanguageSupportedL())
+    {       //This note will be shown in chinese and english variant only and localisation is not done
+     CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress); 
+     HBufC* stringHolder = StringLoader::LoadLC (R_QTN_FOTA_MSG_QUERY_UPDATE_CUSTOM_WARNING);     
+     msgDlg->SetMessageTextL(*stringHolder);
+     CleanupStack::PopAndDestroy( stringHolder );
+     stringHolder = NULL;
+     msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+     msgDlg->SetHeaderTextL( headerText->Des() );
+     msgDlg->ButtonGroupContainer().SetCommandSetL( R_FOTA_INSTALL_QUERY_SOFTKEYS_NOW_LATER__NOW );
+     retval = ESyncMLDlgRespKeyNone;
+     retval = msgDlg->RunLD();
+     msgDlg = NULL;
+     FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() after new changes in phone updates"));
+    }
+    else
+    {
+      TBuf< KSyncMLMaxProfileNameLength > profileName;
+      RetrieveProfileNameL( profileName ); 
+      
+  HBufC* stringHolder = NULL;
+	retval = ESyncMLDlgRespKeyOk;    	
+	TBool bShowInstallQuery = ETrue;
+	TInt fotaUpdateAppName (EFotaUpdateDM);
+	TInt errAppName = RProperty::Get( KPSUidNSmlDMSyncApp, KNSmlCurrentFotaUpdateAppName, fotaUpdateAppName );
+	TInt errShowInstall = RProperty::Get( KPSUidNSmlDMSyncApp, KDevManShowInstallNowQuery, bShowInstallQuery );
+
+	FTRACE( FPrint(
+	    _L("CSyncMLFwUpdNotifier::ShowUpdateStartQueryL found key Show install query = %d"),
+	    bShowInstallQuery ) );
+
+
+	if ( !errAppName && !errShowInstall && fotaUpdateAppName == EFotaUpdateNSC && !bShowInstallQuery )
+	{
+			FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() do not show install now query "));	
+			bShowInstallQuery = EFalse;
+	}
+
+	if ( !bShowInstallQuery )
+	{
+		
+		FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() should not query "));	
+										
+	}
+	
+	else
+		
+	{
+		FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() will query for Install now? "));		
+    stringHolder = StringLoader::LoadLC( R_FOTA_QUERY_INSTALL_NOW, profileName );
+    dlg->SetPromptL( *stringHolder );
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+    retval = ESyncMLDlgRespKeyNone;
+    
+
+    retval = dlg->ExecuteLD( R_FOTA_INSTALL_CONFIRMATION_QUERY );
+	dlg = NULL;
+	}	
+	// set KDevManShowInstallNowQuery key back to value that it should show query
+	TInt err = RProperty::Set(KPSUidNSmlDMSyncApp,KDevManShowInstallNowQuery,1 );
+	FTRACE( FPrint(
+	    _L("Install query is set back to be shown, err = %d"),
+	    err ) );
+	
+    if ( !keypress && retval )
+        {
+        stringHolder = StringLoader::LoadLC( R_FOTA_UPDATE_1_WARNING );
+                
+        //keypress is EFalse here
+        CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+        
+        msgDlg->SetMessageTextL(*stringHolder);
+        CleanupStack::PopAndDestroy( stringHolder );
+        stringHolder = NULL;
+
+        msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+        msgDlg->SetHeaderTextL( headerText->Des() );
+        
+       	msgDlg->ButtonGroupContainer().SetCommandSetL( R_SML_SOFTKEYS_ACCEPT_CANCEL__ACCEPT );
+        
+        retval = ESyncMLDlgRespKeyNone;;
+        retval = msgDlg->RunLD();
+        msgDlg = NULL;
+		
+		
+		if ( !keypress && retval )
+			{
+	        stringHolder = StringLoader::LoadLC( R_FOTA_UPDATE_2_WARNING );
+	        
+	        //keypress is EFalse here
+	        msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+            msgDlg->SetMessageTextL( *stringHolder );
+
+	        CleanupStack::PopAndDestroy( stringHolder );
+	        stringHolder = NULL;
+
+	        msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+	        msgDlg->SetHeaderTextL( headerText->Des() );
+	        
+        	msgDlg->ButtonGroupContainer().SetCommandSetL( 
+	        						R_SML_SOFTKEYS_ACCEPT_CANCEL__ACCEPT );
+        
+	        retval = ESyncMLDlgRespKeyNone;
+	        retval = msgDlg->RunLD();
+	        msgDlg = NULL;
+			}
+        }
+        }
+    
+
+    CleanupStack::PopAndDestroy( headerText );
+    
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() completed: retval = %d, keypress = %d" ),
+        retval,keypress ) );
+
+	//call-termination key press is handled here.
+	if (keypress)
+    	retval = ESyncMLDlgRespKeyOthers;
+	
+    return retval;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowUpdateStartQueryEncryptionL
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowUpdateStartQueryEncryptionL()
+    {
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryEncryptionL() profileId = %d" ),
+        iNoteInfo ) );
+
+    HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    TInt retval (ESyncMLDlgRespKeyNone);  
+    TBool keypress(EFalse);
+
+    CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress); 
+    HBufC* stringHolder = StringLoader::LoadLC (R_FOTA_UPDATE_DEC_WARNING);     
+    msgDlg->SetMessageTextL(*stringHolder);
+    CleanupStack::PopAndDestroy( stringHolder );
+   
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+    msgDlg->SetHeaderTextL( headerText->Des() );
+    msgDlg->ButtonGroupContainer().SetCommandSetL( R_SML_SOFTKEYS_ACCEPT_CANCEL__ACCEPT );
+    retval = ESyncMLDlgRespKeyNone;
+    retval = msgDlg->RunLD();
+    msgDlg = NULL;
+    
+    CleanupStack::PopAndDestroy(headerText);
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateStartQueryL() after new changes in phone updates"));
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowUpdateResultNoteL
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowUpdateResultWithEncryptionNoteL()
+    {
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateResultWithEncryptionNoteL() result = %d" ),
+        iNoteInfo ) );
+
+    HBufC* firstStr( NULL );
+
+    switch ( iNoteInfo )  // It is easier to add cases to switch structure
+        {
+        case KErrNone:
+            {
+            firstStr = StringLoader::LoadLC( R_FOTA_NOTIF_COMPLETE );
+            break;
+            }
+        default:
+            {
+            firstStr = StringLoader::LoadLC( R_FOTA_MSG_QUERY_NOT_UPDATED );
+            break;
+            }
+        }
+    
+    HBufC* secStr  = StringLoader::LoadLC(R_FOTA_UPDATE_ENC);
+    
+    HBufC* stringHolder = HBufC::NewLC(firstStr->Length() + secStr->Length());
+    TPtr ptr (stringHolder->Des());
+    ptr.Append(firstStr->Des());
+    ptr.Append(secStr->Des());
+    
+    TBool keypress(EFalse);
+    CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+    msgDlg->SetMessageTextL(*stringHolder);
+    CleanupStack::PopAndDestroy( stringHolder );
+    CleanupStack::PopAndDestroy(secStr);
+    CleanupStack::PopAndDestroy(firstStr);
+
+    
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+
+    stringHolder = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    msgDlg->SetHeaderTextL( stringHolder->Des() );
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+    
+    msgDlg->ButtonGroupContainer().SetCommandSetL( R_SML_SOFTKEYS_ACCEPT_CANCEL__ACCEPT );
+    TInt retval(ESyncMLDlgRespKeyNone);
+    iRunLhang = ETrue;
+    iDlg = msgDlg; 
+    retval = msgDlg->RunLD();
+    iRunLhang = EFalse;
+    msgDlg = NULL;
+    iDlg = NULL;
+    //call-termination key press has to be suppressed here. so keypress has no significance here!    
+    /*if (keypress)
+        retval = EKeyOthers;*/
+        
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowUpdateResultWithEncryptionNoteL() completed: retval = %d" ),
+        retval ) );
+    
+    return retval;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::RetrieveProfileNameL
+// -----------------------------------------------------------------------------
+//
+void CSyncMLFwUpdNotifier::RetrieveProfileNameL( TDes& aServerName )
+    {
+    FLOG(_L("[SmlNotif]\t CSyncMLFwUpdNotifier::RetrieveProfileNameL()"));
+
+    RSyncMLSession syncSession;
+    RSyncMLDevManProfile syncProfile;
+  
+    syncSession.OpenL();
+    CleanupClosePushL( syncSession );
+    
+    syncProfile.OpenL( syncSession, iNoteInfo, ESmlOpenRead );
+    CleanupClosePushL( syncProfile );
+    
+    aServerName = syncProfile.DisplayName();
+
+    CleanupStack::PopAndDestroy( &syncProfile );
+    CleanupStack::PopAndDestroy( &syncSession );
+
+    FTRACE( FPrint( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::RetrieveProfileNameL() completed: aServerName = %S" ),
+        &aServerName ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowNoReminderQuery
+// -----------------------------------------------------------------------------
+//
+
+TInt CSyncMLFwUpdNotifier::ShowNoReminderQueryL()
+	{
+
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowNoReminderQueryL() begin "));
+        
+   	TInt configFlags( 0 );
+    CRepository* cenrep = NULL;
+    cenrep = CRepository::NewL( KCRUidNSmlDMSyncApp );
+    cenrep->Get( KNSmlDMFotaConfigurationKey, configFlags );
+    delete cenrep;
+    cenrep = NULL;
+	TInt retval (KErrNone);
+	
+    // Show note if fota is not hidden
+    if ( configFlags & KNSmlDMFotaEnableFotaViewFlag )
+    	{
+    	HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    	HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_UPDATE_REMINDER );
+        
+    	TBool keypress(EFalse);        
+        CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+        msgDlg->SetMessageTextL(*stringHolder);
+        CleanupStack::PopAndDestroy( stringHolder );
+        stringHolder = NULL;
+
+        msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+        msgDlg->SetHeaderTextL( headerText->Des() );
+            
+        msgDlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_EMPTY__OK );
+        retval = msgDlg->RunLD();
+        msgDlg = NULL;
+
+		//call-termination key press is handled here.
+		if (keypress)
+    		retval = ESyncMLDlgRespKeyOthers;
+		
+        CleanupStack::PopAndDestroy( headerText );
+    	}
+        
+     FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowNoReminderQueryL() Completed "));   
+     
+     return retval;
+	}
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowNotEnoughMemory
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowNotEnoughMemoryL( TInt &aMemoryNeeded , TBool aOmaDL)
+{
+  	FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowNotEnoughMemoryL() begin "));
+        
+  	HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );  
+  	
+  	HBufC* stringHolder;
+  	
+  	if( aOmaDL )	
+  	stringHolder = StringLoader::LoadLC( R_FOTA_OMADL_NO_FLEXIBLE_MEMORY , aMemoryNeeded );
+  	else
+  	stringHolder = StringLoader::LoadLC( R_FOTA_LARGE_NO_FLEXIBLE_MEMORY , aMemoryNeeded );
+    
+    TBool keypress(EFalse);  	
+    CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(keypress);
+	msgDlg->SetMessageTextL(*stringHolder);
+  	CleanupStack::PopAndDestroy( stringHolder );
+  	stringHolder = NULL;
+  
+  	msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+  	msgDlg->SetHeaderTextL( headerText->Des() );
+           
+  	msgDlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_EMPTY__OK );
+  	TInt retval (ESyncMLDlgRespKeyNone);
+  	retval = msgDlg->RunLD();
+  	msgDlg = NULL;
+  	CleanupStack::PopAndDestroy( headerText );
+  
+  	FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowNotEnoughMemoryL() Completed "));    	
+	
+	//call-termination key press is handled here.
+	if (keypress)
+    	retval = ESyncMLDlgRespKeyOthers;
+	
+	return retval;
+}
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowDownloadUserCancelL
+// Shows the notification when the user cancels the download.
+// And inform the user the download is suspended.
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowDownloadUserCancelL()
+{
+
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadUserCancelL() begin "));
+        
+  	TInt retval (KErrNone);
+	
+    HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_USER_CANCEL );
+        
+    TBool endKeyPress(EFalse);        
+    CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(endKeyPress);
+    msgDlg->SetMessageTextL(*stringHolder);
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+    msgDlg->SetHeaderTextL( headerText->Des() );
+            
+    msgDlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_YES_NO__YES );
+    iRunLhang = ETrue;
+    iDlg = msgDlg;
+    retval = msgDlg->RunLD();
+    iRunLhang = EFalse;
+    msgDlg = NULL;    
+    iDlg = NULL;
+	//call-termination key press is handled here.
+	if (endKeyPress)
+    	retval = ESyncMLDlgRespKeyOthers;
+		
+    CleanupStack::PopAndDestroy( headerText );
+        
+     FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadUserCancelL() Completed "));   
+     
+     return retval;
+}
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowDownloadPostponedL
+// Shows the notification that the download is postponed.
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowDownloadPostponedL()
+{
+
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadPostponedL() begin "));
+    
+    TInt retval (KErrNone);
+    
+    HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_DOWNLOAD_POSTPONED );
+    CAknInformationNote* infoNote = new (ELeave) CAknInformationNote;
+
+    infoNote->ExecuteLD( *stringHolder );
+    CleanupStack::PopAndDestroy( stringHolder );
+  	
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadPostponedL() Completed "));   
+     
+    return retval;
+}
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowDownloadCancelledL
+// Shows the notification that the download is cancelled.
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowDownloadCancelledL()
+{
+
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadCancelledL() begin "));
+        
+  	TInt retval (KErrNone);
+	
+    HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_DOWNLOAD_CANCELLED );
+    CAknInformationNote* infoNote = new (ELeave) CAknInformationNote;
+
+    infoNote->ExecuteLD( *stringHolder );
+    CleanupStack::PopAndDestroy( stringHolder );
+        
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadCancelledL() Completed "));   
+     
+    return retval;
+}
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowDownloadResumeL
+// Shows the notification to the user for resuming the download.
+// -----------------------------------------------------------------------------
+//
+TInt CSyncMLFwUpdNotifier::ShowDownloadResumeL()
+{
+
+    FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadResumeL() begin "));
+        
+  	TInt retval (KErrNone);
+	
+    HBufC* headerText = StringLoader::LoadLC( R_FOTA_TITLE_PHONE_UPDATES );
+    HBufC* stringHolder = StringLoader::LoadLC( R_FOTA_DOWNLOAD_RESUME );
+        
+    TBool endKeyPress(EFalse);        
+    CSyncMLMessageQueryDialog* msgDlg = CSyncMLMessageQueryDialog::NewL(endKeyPress);
+    msgDlg->SetMessageTextL(*stringHolder);
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+
+    msgDlg->PrepareLC( R_SML_MESSAGE_QUERY );  // Pushed dialog is popped inside RunLD
+    msgDlg->SetHeaderTextL( headerText->Des() );
+            
+    msgDlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_YES_NO__YES );
+    iRunLhang = ETrue;
+    iDlg = msgDlg;
+    retval = msgDlg->RunLD();
+    iRunLhang = EFalse;
+    iDlg = NULL;
+    msgDlg = NULL;
+    
+	//call-termination key press is handled here.
+	if (endKeyPress)
+    	retval = ESyncMLDlgRespKeyOthers;
+		
+    CleanupStack::PopAndDestroy( headerText );
+        
+     FLOG( _L(
+        "[SmlNotif]\t CSyncMLFwUpdNotifier::ShowDownloadResumeL() Completed "));   
+     
+     return retval;
+}
+
+// -----------------------------------------------------------------------------
+// CSyncMLFwUpdNotifier::ShowDownloadResumeL
+// Shows the notification to the user for resuming the download.
+// -----------------------------------------------------------------------------
+//
+TBool CSyncMLFwUpdNotifier::IsLanguageSupportedL()
+{
+	TBool retVal(EFalse);
+	TLanguage language = User::Language();
+	if(language == ELangEnglish || language == ELangInternationalEnglish ||
+ 		   language == ELangTaiwanChinese ||language == ELangHongKongChinese || language == ELangPrcChinese)
+ 		   retVal = ETrue;
+ 	return retVal;
+}
+
+//  End of File