deviceupdatesui/deviceupdates/src/nsmldmsynchandler.cpp
branchRCL_3
changeset 57 6757f1e2efd2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceupdatesui/deviceupdates/src/nsmldmsynchandler.cpp	Tue Aug 31 15:05:55 2010 +0300
@@ -0,0 +1,510 @@
+/*
+* 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: Implementation of DM UI component
+* 	This is part of omadmappui.
+*
+*/
+
+
+// INCLUDES
+
+#include <textresolver.h>   // for CTextResolver
+#include <e32property.h>
+#include <data_caging_path_literals.hrh>  // for resource and bitmap directories
+#include <SyncMLErr.h>      // sync error codes
+#include <DevManInternalCRKeys.h>
+#include <centralrepository.h>
+#include <featmgr.h>
+#include "nsmldmsynchandler.h"
+#include "nsmldmsyncdebug.h"
+#include "nsmldmsyncinternalpskeys.h"
+#include "nsmldmsyncprivatecrkeys.h"
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDMSyncHandler* CNSmlDMSyncHandler::NewL( RSyncMLSession* aSyncSession,
+                                              CNSmlDMSyncAppEngine* aAppEngine )
+    {
+	FLOG( "CNSmlDMSyncHandler::NewL()" );
+
+    CNSmlDMSyncHandler* self =
+        new (ELeave) CNSmlDMSyncHandler( aSyncSession,
+                                         aAppEngine);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNSmlDMSyncHandler::~CNSmlDMSyncHandler()
+    {
+    FLOG( "CNSmlDMSyncHandler::~CNSmlDMSyncHandler()" );     
+	delete iActiveCaller;
+
+	if ( iSyncRunning )
+	    {
+	    TRAP_IGNORE( iSyncJob.StopL() );
+        iSyncJob.Close();
+	    }
+	if(iPrimaryAction)
+	    iPrimaryAction->deleteLater();
+	
+	if(iDialog)
+	    iDialog->deleteLater();
+	
+	  FeatureManager::UnInitializeLib();
+	FLOG( "CNSmlDMSyncHandler::~CNSmlDMSyncHandler() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::ConstructL( void )
+    {
+    FLOG( "CNSmlDMSyncHandler::ConstructL" );
+   FeatureManager::InitializeLibL();   	
+	iActiveCaller = CNSmlDMActiveCaller::NewL(this);
+	iServerAlertedSync = EFalse;
+	iSyncRunning = EFalse;
+	iSyncError = KErrNone;	
+	iCheckUpdate = EFalse;	
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::CNSmlDMSyncHandler
+// -----------------------------------------------------------------------------
+//
+CNSmlDMSyncHandler::CNSmlDMSyncHandler( RSyncMLSession* aSyncSession,
+                                        CNSmlDMSyncAppEngine* aAppEngine) 
+    : iSyncSession( aSyncSession ),
+    iSyncAppEngine( aAppEngine )   
+	{
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::SynchronizeL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::SynchronizeL( TDesC& aServerName,
+                                       const TInt aProfileId,
+                                       const TInt aJobId,
+                                       const TInt aConnectionBearer,
+                                       const TBool aUseFotaProgressNote )
+	{
+	FLOG( "CNSmlDMSyncHandler::SynchronizeL Server alert" );
+	
+	iServerName = aServerName;
+	iConnectionBearer = aConnectionBearer;
+    iProfileId = aProfileId;
+    iJobId = aJobId;
+    iUseFotaProgressNote = aUseFotaProgressNote;
+    
+    iSyncJob.OpenL( Session(), iJobId );
+    iSyncJobId = iSyncJob.Identifier();
+    FTRACE( FPrint( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::SynchronizeL--server alert, iSyncJobId = %d" ),
+	     iSyncJobId ) ); 
+	  //SAN Support
+	  iServerAlertedSync = ETrue;  
+	                      
+	  //SAN Support
+    SynchronizeL();
+	}
+	
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::SynchronizeL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::SynchronizeL( TDesC& aServerName,
+                                       const TInt aProfileId,
+                                       const TInt aConnectionBearer,
+                                       const TBool aUseFotaProgressNote )
+    {
+    FLOG( "CNSmlDMSyncHandler::SynchronizeL" );
+
+    iServerName = aServerName;
+    iConnectionBearer = aConnectionBearer;
+    iProfileId = aProfileId;
+    iUseFotaProgressNote = aUseFotaProgressNote;
+
+    iSyncJob.CreateL( Session(), iProfileId );
+    iSyncJobId = iSyncJob.Identifier();
+    SynchronizeL();
+    
+    
+    FTRACE( FPrint( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::SynchronizeL--UI initiated, iSyncJobId = %d" ),
+	     iSyncJobId ) );       
+	}
+	
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::SynchronizeL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::SynchronizeL()
+	{
+	FLOG( "CNSmlDMSyncHandler::SynchronizeL" );
+	
+	TInt err = KErrNone;
+	
+	// for MSyncMLEventObserver events
+	TRAP( err, Session().RequestEventL(*this) );
+	if ( err != KErrNone )
+		{
+		iSyncJob.StopL();
+		iSyncJob.Close();
+		User::Leave(err);
+		}
+    
+    // for MSyncMLProgressObserver events
+    TRAP( err, Session().RequestProgressL(*this) );
+	if ( err != KErrNone )
+		{
+		Session().CancelEvent();
+		iSyncJob.StopL();
+		iSyncJob.Close();
+		User::Leave( err );
+		}
+	
+	   
+	
+	TRAP( err, ShowProgressDialogL() );
+	if ( err != KErrNone )
+		{
+		Session().CancelEvent();
+		Session().CancelProgress();
+		iSyncJob.StopL();
+		iSyncJob.Close();
+		User::Leave( err );
+		}
+	FLOG( "CNSmlDMSyncHandler::SynchronizeL Sync is running" );
+
+    //iSyncDocument->MarkFwUpdChangesStartL();
+	
+	iSyncRunning = ETrue;
+	iSyncError = KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::SynchronizeCompletedL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::SynchronizeCompletedL( TInt aError )
+	{
+    FTRACE( FPrint(
+        _L("[OMADM]\t CNSmlDMSyncHandler::SynchronizeCompletedL(), aError = %d"),
+        aError ) );
+	
+	if ( !SyncRunning() )
+		{
+		FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL already completed" );
+		return;  // sync has already completed
+		}
+		
+    iSyncJob.Close();
+    
+     FTRACE( FPrint( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::SynchronizecompletedL, iSyncJobId = %d" ),
+	     KNSmlDMNoUserInitiatedJob ) );
+   	
+	iSyncRunning = EFalse;
+	iSyncError = aError;    
+    iCheckUpdate = EFalse;        	
+
+#ifndef NO_UPDATE 
+        CRepository* centrep = NULL;
+        TRAPD( err, centrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) );
+	TInt profileId;
+	centrep->Get( KNSmlDMDefaultFotaProfileKey, profileId );
+	//FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL profileId = %d", profileId );
+	delete centrep;
+	if ( profileId ==  iProfileId )
+        {
+        
+	//FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL - connected witrh default profile ID" );
+        TInt configFlags( 0 );
+        //TInt SetGenValue(0);
+        TRAPD( err, centrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys ) );
+        if ( centrep )
+            {
+
+	  //  FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL Centrep is defined" );
+	       if( err == KErrNone )
+        	{
+	        centrep->Get( KDevManSessionType, configFlags );
+	    //	FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL DevManSessiontype = %d", configFlags );
+             	}
+	       centrep->Set( KDevManSessionType, 0 );
+	    	//FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL KDevManSessionType getting reset" );
+	        delete centrep;
+            } 
+        // configFlags=2 for FOTA Package not downloaded case ,1- successful download
+        if ( (aError == KErrNone) 
+        			&& configFlags == 2 )
+            {
+            //FLOG( "[OMADM]\t CNSmlDMSyncHandler::SynchronizeCompletedL(): No changes in FW Update states." );
+        iDialog = new HbDialog();
+        iDialog->setHeadingWidget(new HbLabel(hbTrId("txt_device_update_title_phone_uptodate")));
+        iDialog->setContentWidget(new HbLabel(hbTrId("txt_device_update_dpopinfo_your_phone_is_already_u")));
+        iPrimaryAction = new HbAction();
+        iPrimaryAction->setText(hbTrId("OK"));
+	    iDialog->setPrimaryAction(iPrimaryAction);
+	    iDialog->setTimeout(HbPopup::NoTimeout);
+	    iDialog->setDismissPolicy(HbPopup::NoDismiss);
+	    iDialog->show();
+            // show the dialog
+            }
+
+        }  
+#endif
+
+	iUseFotaProgressNote = EFalse;
+    iSyncJob.Close();
+    
+	// handle error in HandleActiveCallL (when active caller completes)
+	iActiveCaller->Start( aError );
+
+	FLOG( "CNSmlDMSyncHandler::SynchronizeCompletedL() completed" );
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::OnSyncMLSessionEvent
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::OnSyncMLSessionEvent( TEvent aEvent,
+                                               TInt aIdentifier,
+                                               TInt aError,
+                                               TInt /*aAdditionalData*/ )
+	{
+	FTRACE( FPrint( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSessionEvent(), aEvent = %d, aIdentifier = %d, aError = %d" ),
+	    aEvent, aIdentifier, aError ) );
+	FTRACE( RDebug::Print( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSessionEvent(), aEvent = %d, aIdentifier = %d, aError = %d" ),
+	    aEvent, aIdentifier, aError ) );
+
+	if ( aEvent == EJobStop
+	    || aEvent == EJobStartFailed
+	    || aEvent == EJobRejected )
+		{
+    	FTRACE( RDebug::Print( _L(
+    	    "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSessionEvent(), iSyncJobId = %d" ),
+    	    iSyncJobId ) );
+    	  FTRACE( FPrint( _L(
+    	    "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSessionEvent(), iSyncJobId = %d" ),
+    	    iSyncJobId ) );  
+			
+		if ( iSyncJobId == aIdentifier )
+			{
+			FLOG( "CNSmlDMSyncHandler::OnSyncMLSessionEvent EJobStop close" );
+			
+            TRAP_IGNORE( SynchronizeCompletedL( aError ) );
+			}
+		}
+    FLOG( "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSessionEvent() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::OnSyncMLSyncError
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::OnSyncMLSyncError( TErrorLevel aErrorLevel,
+                                            TInt aError,
+                                            TInt /*aTaskId*/,
+                                            TInt /*aInfo1*/,
+                                            TInt /*aInfo2*/)
+	{
+	FTRACE( FPrint( _L(
+	    "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSyncError(), aErrorLevel = %d, aError = %d"),
+	    aErrorLevel, aError ) );
+	    FTRACE( RDebug::Print(
+	          _L("CNSmlDMSyncHandler::OnSyncMLSyncProgress  aErrorLevel =(%d) aError =(%d)"), aErrorLevel, aError  ) );
+	
+	if ( aErrorLevel == ESmlFatalError )
+		{
+        TRAP_IGNORE( SynchronizeCompletedL( aError ) );
+		}
+    FLOG( "[OMADM]\tCNSmlDMSyncHandler::OnSyncMLSyncError() completed" );
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::OnSyncMLSyncProgress
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::OnSyncMLSyncProgress( TStatus aStatus,
+                                               TInt /*aInfo1*/,
+                                               TInt /*aInfo2*/ )
+	{
+	FTRACE( RDebug::Print(
+	          _L("CNSmlDMSyncHandler::OnSyncMLSyncProgress (%d)"), aStatus ) );
+	
+	switch (aStatus)
+		{
+		case ESmlConnecting:
+		    //State()->SetSyncPhase( CNSmlDMSyncState::EPhaseConnecting );
+		    break;
+		case ESmlConnected:
+		    break;
+		case ESmlLoggingOn:
+		    break;
+		case ESmlLoggedOn:
+		    
+		    break;
+		case ESmlDisconnected:
+		    
+		    break;
+		case ESmlCompleted:
+		   
+		    break;
+		case ESmlProcessingServerCommands:
+		   
+		    break;
+		case ESmlReceivingServerCommands:
+		   
+		    break;
+		
+		case ESmlSendingModificationsToServer:
+		    {		   		    
+		    break;
+		    }
+		
+		default:
+		    break;
+		}    
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::OnSyncMLDataSyncModifications
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::OnSyncMLDataSyncModifications( TInt /*aTaskId*/,
+                   const TSyncMLDataSyncModifications& /*aClientModifications*/,
+                   const TSyncMLDataSyncModifications& /*aServerModifications*/ )
+    {
+    FLOG( "CNSmlDMSyncHandler::OnSyncMLDataSyncModifications" );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::HandleActiveCallL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::HandleActiveCallL()
+	{
+    FLOG( "CNSmlDMSyncHandler::HandleActiveCallL" );
+    
+    // HandleSyncErrorL will set this to true if
+    // sync will be retried.
+    iRetrySync = EFalse;
+
+	if ( (iSyncError != KErrNone) && (iSyncError != KErrCancel) )
+		{
+		TRAP_IGNORE( HandleSyncErrorL() );
+		}
+	if ( iRetrySync == EFalse )
+		{
+	    // Inform parent that sync is done.
+	    iSyncAppEngine->SyncCompleted( ENSmlSyncComplete );		
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::HandleSyncErrorL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::HandleSyncErrorL()
+	{
+	FLOG( "CNSmlDMSyncHandler::HandleSyncErrorL" );
+	
+	if ( iSyncError != KDMErr )
+		{
+		}
+	if ( ( iSyncError == SyncMLError::KErrAuthenticationFailure ) ||
+	    ( iSyncError == SyncMLError::KErrTransportAuthenticationFailure ) )
+        {
+	    FLOG( "CNSmlDMSyncHandler::HandleSyncErrorL ask username" );
+        }
+    }
+	
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::ShowProgressDialogL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::ShowProgressDialogL( )
+	{
+	FLOG( "CNSmlDMSyncHandler::ShowProgressDialogL" );
+	
+	FLOG( "CNSmlDMSyncHandler::ShowProgressDialogL() completed" );
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::HideProgressDialogL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMSyncHandler::HideProgressDialogL()
+    {
+    FLOG( "CNSmlDMSyncHandler::HideProgressDialogL" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::Session
+// -----------------------------------------------------------------------------
+//
+RSyncMLSession& CNSmlDMSyncHandler::Session()
+	{
+	__ASSERT_DEBUG(iSyncSession, TUtil::Panic(KErrGeneral));
+	
+	return *iSyncSession;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::SyncRunning
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlDMSyncHandler::SyncRunning()
+	{
+	FTRACE( RDebug::Print(
+	          _L("CNSmlDMSyncHandler::SyncRunning status (%d)"), iSyncRunning ) );
+	          
+	return iSyncRunning;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSyncHandler::CancelSynchronizeL
+// -----------------------------------------------------------------------------
+//		
+void CNSmlDMSyncHandler::CancelSynchronizeL()
+    {
+    FLOG( "CNSmlDMSyncHandler::CancelSynchronizeL" );
+    
+    if ( iSyncRunning )
+        {
+        iSyncJob.StopL();
+        SynchronizeCompletedL( KErrCancel );
+        }
+    }
+
+// End of File