omadm/omadmappui/src/NSmlDMFotaView.cpp
changeset 0 3ce708148e4d
child 8 0a8136f75056
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmappui/src/NSmlDMFotaView.cpp	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,947 @@
+/*
+* 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:  Methods for the firmware update view 
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AknIconArray.h>
+#include <AknQueryDialog.h>
+#include <AknsUtils.h>
+#include <featmgr.h>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+#include <centralrepository.h>
+#include <SyncMLNotifierDomainCRKeys.h>
+
+#include <e32property.h> 
+#include "NSmlDMSyncApp.h"
+#include "nsmldmsyncinternalpskeys.h"
+
+#include "NSmlDMSyncPrivateCRKeys.h"
+
+#include "NSmlDMSyncDocument.h"
+#include "NSmlDMSyncAppUi.h"
+#include "NSmlDMFotaModel.h"
+#include "NSmlDMFotaView.h"
+#include "NSmlDMFotaContainer.h"
+#include "NSmlDMFotaSettingsDialog.h"
+#include "NSmlDMdef.h"
+
+#include "NSmlDMSyncUi.hrh"
+#include <NSmlDMSync.rsg>
+#include <nsmldmsync.mbg>
+#include "NSmlDMSyncDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::ConstructL()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::ConstructL()" );
+    CNSmlDMSyncDocument* doc = ( CNSmlDMSyncDocument* ) AppUi()->Document();
+    if( doc->IsServerAlertSync() ) //For embedded application opening
+       {       	      
+       BaseConstructL( R_CP_SMLSYNC_FOTA_VIEW );
+       }
+    else     //Independent application opening
+       {
+       BaseConstructL( R_SMLSYNC_FOTA_VIEW );	
+       }       
+    iExitPress = -1;
+    FeatureManager::InitializeLibL();
+    iFotaDLObserver = new (ELeave) CDLObserver;
+    iFotaDLObserver->ConstructL(this);
+    iFotaDLObserver->StartL(EFalse);
+    FLOG( "[OMADM]\t CNSmlDMFotaView::ConstructL() completed" );
+    }
+
+// Destructor
+CNSmlDMFotaView::~CNSmlDMFotaView()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::~CNSmlDMFotaView()" );
+   
+    if(iFotaDLObserver)
+    	{
+    	iFotaDLObserver->Cancel();
+    	delete iFotaDLObserver;
+    	iFotaDLObserver = NULL;
+    	}    
+    
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack( iContainer );
+        }
+    delete iContainer;
+     FeatureManager::UnInitializeLib();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::Id
+// -----------------------------------------------------------------------------
+//
+TUid CNSmlDMFotaView::Id() const
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::Id()" );
+    return KNSmlDMFotaViewId;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::HandleCommandL
+// Redirects commands to the appui class.
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::HandleCommandL( TInt aCommand )
+    {
+    FTRACE( FPrint( _L("[OMADM]\t CNSmlDMFotaView::HandleCommandL(), aCommand = 0x%x"),
+        aCommand ) );
+
+    switch ( aCommand )
+        {
+        case EAknSoftkeyBack:
+            {
+            UpdateExitL();
+            TInt value=-1;
+            TInt r1=RProperty::Set(KPSUidNSmlDMSyncApp,KNSmlDMSyncUiLaunchKey,value);
+            AppUi()->HandleCommandL( EEikCmdExit );
+            break;
+            }
+        /*case EAknCmdExit: 
+        case EEikCmdExit:
+            {
+            STATIC_CAST( CNSmlDMSyncAppUi*, iEikonEnv->EikAppUi() )->CloseGs(); //control panel            
+            break;
+            }*/
+
+        case ENSmlMenuCmdFotaCheck:
+            {
+            InitiateFotaCheckL();
+            break;
+            }
+        case ENSmlMenuCmdFotaInstall:
+            {
+            InitiateFwUpdInstallL();
+            break;
+            }
+        case ENSmlMenuCmdFotaContinue:
+            {
+            RefreshL(EFalse);
+            InitiateFwUpdContinueL();
+            break;
+            }
+        case ENSmlMenuCmdFotaSettings:
+            {
+            TInt value = ETrue;                 //IAD: Making DM busy
+            TInt r1=RProperty::Set(KPSUidNSmlDMSyncApp,KDMIdle,value);	
+            CNSmlDMFotaSettingsDialog* settingDialog = CNSmlDMFotaSettingsDialog::NewL();
+            settingDialog->ExecuteLD( R_NSML_FOTA_SETTINGS_DIALOG );
+            break;
+            }
+ 
+        case ENSmlMenuCmdFotaServers:
+            {
+            TInt value = ETrue;    //IAD: Making DM busy
+            TInt r1=RProperty::Set(KPSUidNSmlDMSyncApp,KDMIdle,value);	
+             AppUi()->ActivateLocalViewL( KNSmlDMProfilesViewId );
+             break;
+            }    
+ 
+        case EEikCmdExit:
+        case EAknCmdExit:
+            {
+            UpdateExitL();	
+            STATIC_CAST( CNSmlDMSyncAppUi*, iEikonEnv->EikAppUi() )->CloseGs(); //control panel            
+            break;
+            }
+        default:
+            {
+            UpdateExitL();	
+            AppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+        
+    FLOG( "[OMADM]\t CNSmlDMFotaView::HandleCommandL() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::StepL
+// Does nothing.
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::StepL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::IsProcessDone
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlDMFotaView::IsProcessDone() const
+    {
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::InitiateFotaCheckL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::InitiateFotaCheckL()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFotaCheck()" );
+    TInt profileId( KErrNotFound );
+    TBool isValidId( EFalse );
+    HBufC* stringHolder = NULL;
+
+    profileId = iFotaModel->DefaultFotaProfileIdL();
+
+    if ( profileId >= KErrNone )
+        {
+         isValidId = iFotaModel->VerifyProfileL( profileId );
+        }
+
+    if( ( profileId == KErrNotFound ) || ( !isValidId ) )
+        {
+    	profileId = ShowFotaProfileQueryL();
+    	if( profileId == KErrNotFound )    
+    	  return;
+        }
+    TInt query(EFalse);
+    CRepository* cRepository=NULL;
+	TRAPD ( error, cRepository = CRepository::NewL ( KCRUidNSmlNotifierDomainKeys ) );
+	if ( error == KErrNone )
+	{
+		CleanupStack::PushL( cRepository );
+		TInt dmChargingNote(1);
+		cRepository->Get ( KNSmlDMChargingNote, dmChargingNote );
+		if(dmChargingNote==1)
+		{      
+    	CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+    	CleanupStack::PushL( dlg );
+    	stringHolder = StringLoader::LoadLC( R_QTN_FOTA_CONNECTION_NEEDED );
+    	dlg->SetPromptL( stringHolder->Des() );
+    
+    CleanupStack::PopAndDestroy( stringHolder );
+    stringHolder = NULL;
+    
+    	CleanupStack::Pop( dlg );
+    
+    	query = dlg->ExecuteLD( R_SML_CONFIRMATION_QUERY );
+  		}
+  		else
+  			query = ETrue;
+  		CleanupStack::PopAndDestroy( cRepository );//cRepository
+  	}
+    if(query)
+    {
+        __ASSERT_ALWAYS( iFotaModel, TUtil::Panic( KErrGeneral ) );
+        
+        iFotaModel->EnableFwUpdRequestL( profileId );
+        ( ( CNSmlDMSyncAppUi* ) AppUi() )->StartSyncL( profileId, ETrue );
+    	iFotaDLObserver->StartL(ETrue);
+        }
+    
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFotaCheck() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::ShowFotaProfileQueryL
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlDMFotaView::ShowFotaProfileQueryL()
+    {
+    FLOG( "[OMADM] CNSmlDMFotaView::ShowFotaProfileQueryL()" );
+
+    TInt retval( KErrNotFound );
+
+    CDesCArray* items = new (ELeave) CDesCArrayFlat( KNSmlDefaultGranularity );
+    CleanupStack::PushL( items );
+    items->Reset();
+
+    // Profile list owned by the dialog
+    CArrayFixFlat<TInt>* profileIdList =
+        new ( ELeave ) CArrayFixFlat<TInt>( KNSmlDefaultGranularity );
+    CleanupStack::PushL( profileIdList );
+
+    FormatProfileQueryListItemsL( items, profileIdList );
+
+    if ( items->Count() > 1 )
+        {
+    	CEikFormattedCellListBox* listBox = new ( ELeave )
+    	    CAknDoubleLargeGraphicPopupMenuStyleListBox;
+    	CleanupStack::PushL( listBox );
+
+    	CAknPopupList* popupList = CAknPopupList::NewL( listBox, 
+    							   R_AVKON_SOFTKEYS_OK_CANCEL__OK,
+            				 AknPopupLayouts::EMenuDoubleLargeGraphicWindow );
+    	CleanupStack::PushL( popupList );
+
+    	listBox->ConstructL( popupList, ( EAknListBoxSelectionList | EAknListBoxLoopScrolling ) );
+    	listBox->Model()->SetItemTextArray( items );
+    	listBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+        listBox->HandleItemAdditionL();
+    	
+        listBox->CreateScrollBarFrameL( ETrue );
+        listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+            CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+
+    	CAknIconArray* icons = new (ELeave) CAknIconArray( 10 );
+    	CleanupStack::PushL( icons );
+        CreateIconArrayL( icons );
+    	listBox->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
+    	CleanupStack::Pop( icons );
+
+        HBufC* popupTitle = iCoeEnv->AllocReadResourceLC(
+            R_QTN_FOTA_LIST_QUERY_SELECT_SERVER_PROFILE );
+        popupList->SetTitleL( popupTitle->Des() );
+        CleanupStack::PopAndDestroy( popupTitle );
+        popupTitle = NULL;
+
+        CleanupStack::Pop( popupList );
+        TBool queryResult = popupList->ExecuteLD();
+        popupList = NULL;
+
+        if ( queryResult )
+            {
+            retval = profileIdList->At( listBox->CurrentItemIndex() );
+            }
+        CleanupStack::PopAndDestroy( listBox );  // Destroys also the icon array
+        }
+    else if ( items->Count() == 1 )
+        {
+        retval = profileIdList->At(0);
+        }
+    else
+        {
+        
+        TInt ServersViewVariable( 0 );
+        CRepository* centrep = NULL;
+        TRAPD( err, centrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) );
+        if ( centrep )
+            {
+            centrep->Get( KNSmlDMServersMenuKey, ServersViewVariable );         
+            delete centrep;
+            }
+        if ( err != KErrNone ) 
+            {
+            User::Leave( err );
+            }    
+        if( ServersViewVariable == 0)   
+            {
+            CleanupStack::PopAndDestroy( profileIdList );
+            CleanupStack::PopAndDestroy( items );
+         	return KErrNotFound;
+            }
+        
+        
+		HBufC* newProfileString = 
+		            iEikonEnv->AllocReadResourceLC( R_SML_APPUI_NOTE_TEXT_NEW );
+
+		CAknQueryDialog* newProfileDialog = new ( ELeave ) CAknQueryDialog;
+
+		if ( newProfileDialog->ExecuteLD( R_SML_CONFIRMATION_QUERY,
+		                                  newProfileString->Des() ) )
+			{	
+			
+			TInt viewtitle = 1;
+			( (CNSmlDMSyncAppUi*) AppUi() )->
+			                         SetTitleCall( viewtitle );	
+			                       
+			( (CNSmlDMSyncAppUi*) AppUi() )->
+			    ShowEditProfileDialogL( ESmlNewProfile );
+			}
+		newProfileDialog = NULL;
+		CleanupStack::PopAndDestroy( newProfileString );
+		
+        }
+
+    CleanupStack::PopAndDestroy( profileIdList );
+    CleanupStack::PopAndDestroy( items );
+
+    FTRACE( FPrint(
+        _L("[OMADM]\t CNSmlDMFotaView::ShowFotaProfileQueryL() completed, retval = %d"),
+        retval ) );
+    return retval;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::FormatProfileQueryListItemsL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::FormatProfileQueryListItemsL( CDesCArray*          aItems,
+                                                    CArrayFixFlat<TInt>* aProfileIdList )
+    {
+    FLOG( "[OMADM] CNSmlDMFotaView::FormatProfileQueryListItemsL()" );
+    TInt index( 0 );
+    
+    CNSmlDMSyncDocument* doc = ( CNSmlDMSyncDocument* ) AppUi()->Document();
+    
+    doc->RefreshProfileListL( ETrue ); // Include hidden profile
+    CArrayFixFlat<TNSmlDMProfileItem>* profileList = doc->ProfileList( index );
+
+    TBuf<KNSmlMaxTextLength256> text;
+
+    for ( index = 0; index < profileList->Count(); index++ )
+        {
+        text.Zero();
+        TInt iconIndex( EProfileInternet ); //internet
+
+        if ( ( *profileList )[index].iBearer != EProfileInternet )
+            {
+            iconIndex = EProfileObexBlueTooth;	
+            }
+        text.Num( iconIndex );
+        text.Append( KNSmlTab );
+        text.Append( ( *profileList )[index].iProfileName );
+        text.Append( KNSmlTab );
+        
+        aItems->AppendL( text );
+        aProfileIdList->AppendL( ( *profileList )[index].iProfileId );
+        }
+    FLOG( "[OMADM] CNSmlDMFotaView::FormatProfileQueryListItemsL() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::CreateIconArrayL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::CreateIconArrayL( CAknIconArray* aIconArray )
+    {
+    FLOG( "[OMADM] CNSmlDMFotaView::CreateIconArrayL()" );
+
+    HBufC* appIconFilePath = HBufC::NewLC( 5 + KDC_APP_BITMAP_DIR().Length() 
+                                             + KDMAppIconFileName().Length() );
+    TPtr ptr = appIconFilePath->Des();
+    ptr.Append( KZDrive );
+    ptr.Append( KDC_APP_BITMAP_DIR );
+    ptr.Append( KDMAppIconFileName );
+
+	aIconArray->AppendL( AknsUtils::CreateGulIconL( 
+	                             AknsUtils::SkinInstance(),
+	                             KAknsIIDQgnPropSmlHttp,
+	                             *appIconFilePath,
+	                             EMbmNsmldmsyncQgn_prop_sml_http,
+	                             EMbmNsmldmsyncQgn_prop_sml_http_mask ) );
+	                             
+	aIconArray->AppendL( AknsUtils::CreateGulIconL( 
+	                          AknsUtils::SkinInstance(),
+	                          KAknsIIDQgnPropSmlHttpOff,
+	                          *appIconFilePath,
+	                          EMbmNsmldmsyncQgn_prop_sml_http_off,
+	                          EMbmNsmldmsyncQgn_prop_sml_http_off_mask ) );
+
+	if ( FeatureManager::FeatureSupported( KFeatureIdSyncMlDmObex ) )
+		{
+		aIconArray->AppendL( AknsUtils::CreateGulIconL( 
+		                            AknsUtils::SkinInstance(),
+		                            KAknsIIDQgnPropSmlBt,
+		                            *appIconFilePath,
+		                            EMbmNsmldmsyncQgn_prop_sml_bt,
+		                            EMbmNsmldmsyncQgn_prop_sml_bt_mask ) );
+		                            
+		aIconArray->AppendL( AknsUtils::CreateGulIconL(
+		                        AknsUtils::SkinInstance(),
+		                        KAknsIIDQgnPropSmlBtOff,
+		                        *appIconFilePath,
+		                        EMbmNsmldmsyncQgn_prop_sml_bt_off,
+		                        EMbmNsmldmsyncQgn_prop_sml_bt_off_mask ) );
+		}
+	
+    CleanupStack::PopAndDestroy( appIconFilePath );
+
+    FLOG( "[OMADM] CNSmlDMFotaView::CreateIconArrayL() completed" );
+    }
+    
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::InitiateFwUpdInstallL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::InitiateFwUpdInstallL()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFwUpdInstallL()" );
+    
+    TInt pkgId = iFotaModel->RetrieveFwUpdPkgIdListL(
+        EStartingUpdate );
+    
+    if ( pkgId != KErrNotFound )
+        {
+        TInt retval = iFotaModel->InitiateFwUpdInstall( pkgId, KErrNotFound );
+
+        // No profile id was stored in the fota engine. Trying to select a suitable
+        // profile, or asking user.
+        if ( retval == KErrNotFound )
+            {
+            TBool isValidId( EFalse );
+            TInt profileId = iFotaModel->DefaultFotaProfileIdL();
+
+            if ( profileId >= KErrNone )
+                {
+                 isValidId = iFotaModel->VerifyProfileL( profileId );
+                }
+
+            if( ( profileId == KErrNotFound ) || ( !isValidId ) )
+                {
+            	profileId = ShowFotaProfileQueryL();
+                }
+            
+            // Retrying the update with the chosen profile id.
+            iFotaModel->InitiateFwUpdInstall( pkgId, profileId );
+            }
+        
+        }
+
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFwUpdInstallL() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::InitiateFwUpdContinueL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::InitiateFwUpdContinueL()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFwUpdContinueL()" );    
+    iFotaDLObserver->StartL(ETrue);
+    iFotaModel->ContinueFwUpdInstall();
+    FLOG( "[OMADM]\t CNSmlDMFotaView::InitiateFwUpdContinueL() completed" );
+    }
+        
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::DoActivateL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+                                         TUid /*aCustomMessageId*/,
+                                   const TDesC8& /*aCustomMessage*/ )
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::DoActivateL()" );
+
+    CNSmlDMSyncDocument* doc = ( CNSmlDMSyncDocument* ) AppUi()->Document();
+    __ASSERT_ALWAYS( doc, TUtil::Panic( KErrGeneral ) );
+    
+    	MenuBar()->SetContextMenuTitleResourceId( 
+    	                              R_SMLSYNC_CONTXT_MENUBAR_FOTA_VIEW );
+    
+    //MANUAL CHECK
+    if( !ManualCheckAllowedL() )
+       {    	    
+    Cba()->MakeCommandVisible(EAknSoftkeyContextOptions,EFalse);
+    Cba()->DrawDeferred();    
+       }
+    iFotaModel = doc->FotaModel();
+    iContainer = CNSmlDMFotaContainer::NewL( this, ClientRect(), iFotaModel );
+    AppUi()->AddToStackL( *this, iContainer );
+
+
+	CAknTitlePane* titlePane = 
+	    (CAknTitlePane*)(AppUi()->StatusPane())->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
+    HBufC* titleText = iEikonEnv->AllocReadResourceLC( R_CP_APP_TITLE );	
+	titlePane->SetTextL( titleText->Des() );
+	CleanupStack::PopAndDestroy(titleText);	
+    
+    FLOG( "[OMADM]\t CNSmlDMFotaView::DoActivateL() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::DoDeactivate
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::DoDeactivate()
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::DoDeactivate()" );
+
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack( iContainer );
+        }
+
+    delete iContainer;
+    iContainer = NULL;
+
+    FLOG( "[OMADM]\t CNSmlDMFotaView::DoDeactivate() completed" );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::DynInitMenuPaneL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::DynInitMenuPaneL( TInt aResourceId,
+                                        CEikMenuPane* aMenuPane )
+	{
+	FLOG( "[OMADM] CNSmlDMFotaView::DynInitMenuPaneL()" );
+     
+    if ( aResourceId == R_SMLSYNC_MENU_COMMON && 
+                    ! FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+      {   
+          aMenuPane->SetItemDimmed( EAknCmdHelp , ETrue );
+          
+      }        
+    if ( aResourceId == R_SMLSYNC_MENU_FOTA_VIEW 
+        || aResourceId == R_SMLSYNC_CONTXT_MENU_FOTA_VIEW )
+        {
+        __ASSERT_ALWAYS( iFotaModel, TUtil::Panic( KErrGeneral ) );
+          
+        // Set all variated items first dimmed and show them according to the
+        // configuration flags.
+  
+        aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaCheck, ETrue );
+        aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaInstall, ETrue );
+        aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaContinue, ETrue );
+        TInt configFlags( 0 );
+        
+        TInt ServersViewVariable( 0 ),SettingsVariable(0);
+        
+        CRepository* centrep = NULL;
+        TRAPD( err, centrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) );
+        FTRACE( FPrint(
+            _L("[OMADM]\t CNSmlDMFotaView::DynInitMenuPaneL() centrep open returned %d"),
+            err ) );
+
+        if ( centrep )
+            {
+            centrep->Get( KNSmlDMFotaConfigurationKey, configFlags );
+            centrep->Get( KNSmlDMServersMenuKey, ServersViewVariable );
+            centrep->Get( KNSmlDMSettingsMenuKey, SettingsVariable );
+            delete centrep;
+            }
+
+        // If there was problems with the centrep key, the context menu will
+        // be empty. However, the framework does not handle the situation correctly
+        // and we'll have to leave here in order not to break things.
+        // The Options menu shows at least the Exit item and can be shown.
+        if ( err != KErrNone && aResourceId == R_SMLSYNC_CONTXT_MENU_FOTA_VIEW ) 
+            {
+            User::Leave( err );
+            }
+      
+      if( aResourceId == R_SMLSYNC_MENU_FOTA_VIEW )
+      {      	
+      if(SettingsVariable )
+        {
+        aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaSettings, EFalse );
+        }
+      else
+        {
+        aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaSettings, ETrue );	
+        }      
+      }
+           
+        // if ( configFlags & KNSmlDMFotaEnableManualCheckFlag )
+      if ( ManualCheckAllowedL() )
+            {
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaCheck, EFalse );
+            }
+      if( FeatureManager::FeatureSupported( KFeatureIdSyncMlDmFota ) ) //NFUI
+      {
+        if ( iFotaModel->FindFwUpdPkgWithStateL(
+            EDownloadProgressingWithResume ) != KErrNotFound )
+            {
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaInstall, ETrue );          
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaCheck, ETrue );
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaContinue, EFalse );          
+            }
+        else if ( iFotaModel->FindFwUpdPkgWithStateL(
+            EStartingUpdate ) != KErrNotFound )
+            {
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaInstall, EFalse );          
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaCheck, ETrue );          
+            aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaContinue, ETrue );          
+            }
+        }
+   
+      if( aResourceId == R_SMLSYNC_MENU_FOTA_VIEW )
+        {
+        if( ServersViewVariable )
+           {
+           aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaServers, EFalse );	
+           }
+        else
+           {
+           aMenuPane->SetItemDimmed( ENSmlMenuCmdFotaServers, ETrue );	
+           }
+        
+        }
+      
+	    }
+	   FLOG( "[OMADM] CNSmlDMFotaView::DynInitMenuPaneL() completed" );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::RefreshL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::RefreshL(TBool aPostponeDisplay)
+    {
+    FLOG( "[OMADM]\t CNSmlDMFotaView::RefreshListBox()" );
+
+    if ( iContainer )
+        {
+        iContainer->RefreshL(aPostponeDisplay);
+        }
+    FLOG( "[OMADM]\t CNSmlDMFotaView::RefreshListBox() completed" );
+    }	
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::ManualCheckAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlDMFotaView::ManualCheckAllowedL()
+	{
+	CRepository* cenrep = NULL;
+    TRAPD( error, cenrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) );        
+    if ( cenrep )
+        {
+        cenrep->Get( KNsmlDmManualCheckAllowed, iManCheckAllowed );
+        delete cenrep;
+        }
+    if ( error != KErrNone ) 
+        {
+        User::Leave( error );
+        }
+	if ( iManCheckAllowed == 1)
+	    {
+		return ETrue;		
+	    }
+ 
+	return EFalse;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::HandleForegroundEventL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::HandleForegroundEventL(TBool aForeground)
+	{
+	
+	// For Application Management purpose whenever there is switch between app.
+	
+	
+	
+	FLOG( "[OMADM]\t CNSmlDMFotaView::HandleForegroundEventL():Begin" );
+	if( !aForeground )
+		{
+		FLOG( "[OMADM]\t CNSmlDMFotaView::HandleForegroundEventL() not in FG :end" );
+	    return;	
+		}	
+	
+	
+	if( iExitPress != -2 ) // == 1 some what fast as no call to refreshL based on iexitPress
+		{
+		iExitPress = -1;	
+		STATIC_CAST( CNSmlDMSyncAppUi*, iEikonEnv->EikAppUi())->CheckFotaDlL();
+		FLOG( "[OMADM]\t CNSmlDMFotaView::HandleForegroundEventL(): CheckAMDlL Begin" );
+		STATIC_CAST( CNSmlDMSyncAppUi*, iEikonEnv->EikAppUi())->CheckAMDlL();
+		FLOG( "[OMADM]\t CNSmlDMFotaView::HandleForegroundEventL(): CheckAMDlL END" );
+		}
+	iFotaDLObserver->StartL(EFalse);
+	
+	if ( !ManualCheckAllowedL() && iExitPress != -2 )	//for MSK display
+	    {
+	    if( FeatureManager::FeatureSupported( KFeatureIdSyncMlDmFota ) )
+	       {
+	       if ( iFotaModel->FindFwUpdPkgWithStateL(
+            EStartingUpdate ) != KErrNotFound )
+	    	{
+	        EnableMskL( ETrue );	
+	    	}	
+	       }	    
+	    iExitPress = -1;	
+	    }
+	CAknView::HandleForegroundEventL(aForeground);
+	FLOG( "[OMADM]\t CNSmlDMFotaView::HandleForegroundEventL():completed" );
+	}    
+	
+// -----------------------------------------------------------------------------
+// CNSmlDMFotaView::EnableMskL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDMFotaView::EnableMskL ( TBool aEnable )	
+	{
+	CEikButtonGroupContainer* cbaGrp= Cba();
+	if (cbaGrp)
+		{
+		if (aEnable)
+			{						
+			cbaGrp->MakeCommandVisible(EAknSoftkeyContextOptions,ETrue);	    	
+			}
+		else
+			{
+			cbaGrp->MakeCommandVisible(EAknSoftkeyContextOptions,EFalse);
+			}		
+		}
+	}
+
+// ----------------------------------------------------
+// CNSmlDMFotaView::UpdateExitL
+// ----------------------------------------------------
+//	
+void CNSmlDMFotaView::UpdateExitL()
+	{
+	iExitPress = -2;	
+	}	
+
+
+// -----------------------------------------------------------------------------
+// CDLObserver::CDLObserver()
+// -----------------------------------------------------------------------------
+
+inline CDLObserver::CDLObserver()
+	:CActive(EPriorityStandard)
+	{
+	
+	}
+	
+	
+// -----------------------------------------------------------------------------
+// CDLObserver::ConstructL()
+// -----------------------------------------------------------------------------
+
+void CDLObserver::ConstructL(CNSmlDMFotaView* iFotaView)
+	{
+	CActiveScheduler::Add(this);	
+    iView = iFotaView;
+	}
+
+// -----------------------------------------------------------------------------
+// CDLObserver::Start()
+// -----------------------------------------------------------------------------
+void CDLObserver::StartL(TBool aResetKey)
+	{	
+	FLOG("CDLObserver::Start- begin");
+	if(!IsActive())
+		{
+		//set key value to -1			
+		FLOG("logging new request");
+		TInt err = iProperty.Attach(KPSUidNSmlDMSyncApp,KFotaDLRefresh);
+		FTRACE( FPrint(_L("CDLObserver::StartL attached to P&S key with error as %d"),err ) );		
+		CNSmlDMSyncDocument* doc = 
+		    ( CNSmlDMSyncDocument* ) iView->AppUi()->Document();
+		if( aResetKey && doc->DMDefinesFotaDLKey())		
+		 {		 
+		 TInt value = -1;
+		 err = iProperty.Set(KPSUidNSmlDMSyncApp,KFotaDLRefresh,value);
+		 FTRACE( FPrint(_L("CDLObserver::StartL updated the value of p&S key with error %d"),err ) );
+		 }
+		iStatus=KRequestPending;
+		iProperty.Subscribe(iStatus);
+		FLOG("CDLObserver::StartL subscribed to p&S ");
+		SetActive();	
+		}		   
+	}
+
+// -----------------------------------------------------------------------------
+// CDLObserver::RunL()
+// -----------------------------------------------------------------------------
+void CDLObserver::RunL()
+	{
+	FLOG("CDLObserver::RunL()- begin");
+	TInt value;	
+	iProperty.Attach(KPSUidNSmlDMSyncApp,KFotaDLRefresh);
+	iProperty.Get(KPSUidNSmlDMSyncApp,KFotaDLRefresh,value);
+	TInt state (EIdle);
+	state = iView->iFotaModel->GetCurrentFwUpdState();
+	FTRACE( FPrint(_L("current state of fota is %d"),state ) );
+	//EFALSE for suspended,failed & completed
+	//Download Ended either successfully or unsuccessfully
+	if( value == EFalse ) 
+		{			
+		FLOG("CDLObserver::RunL()--status value = 0");			
+		if (state == EDownloadProgressingWithResume || 
+				state == EDownloadComplete ||
+				state == EStartingUpdate ||
+				state == EDownloadFailed)
+			{
+			TInt IsDMBusy = EFalse;    //IAD: Making DM Idle 
+			TInt r2=RProperty::Set(KUidSmlSyncApp,KDMIdle,IsDMBusy);	
+			iView->RefreshL(ETrue);				
+			iProperty.Subscribe(iStatus);
+			FLOG("CDLObserver::RunL()--issued request in the loop EFalse");
+			SetActive();
+			}
+		}
+	else if( value == 1 ) //resume case and update the UI
+		{		
+		FLOG("CDLObserver::RunL()--status value = 1");
+		if (state == EDownloadProgressingWithResume || 
+				state == EDownloadProgressing || 
+				state == EStartingDownload )
+			{
+			TInt IsDMBusy = ETrue;    //IAD: Making DM Busy
+			TInt r2=RProperty::Set(KUidSmlSyncApp,KDMIdle,IsDMBusy);		
+			FLOG("CDLObserver::RunL():call to view refresh");
+			iView->RefreshL(EFalse);
+			}
+		iProperty.Subscribe(iStatus);
+		FLOG("CDLObserver::RunL()--issued request in the loop ETRUe");
+		SetActive();
+
+		}
+	else 
+		{			
+		FTRACE( FPrint(_L("CDLObserver::RunL()-- else loop & value is %d"),value ) );
+		if(!IsActive())
+			{
+			iStatus=KRequestPending;
+			value = -1;
+			iProperty.Set(KPSUidNSmlDMSyncApp,KFotaDLRefresh,value);
+			iProperty.Subscribe(iStatus);
+			FLOG("CDLObserver::RunL()--issued request again");
+			SetActive();
+			}				
+		}
+
+	}
+
+// ----------------------------------------------------------------------------------------
+// CDLObserver::DoCancel() 
+// ----------------------------------------------------------------------------------------
+void CDLObserver::DoCancel()
+	{
+	FLOG("CDLObserver::::DoCancel()");
+    if( iStatus == KRequestPending )
+    	{	
+    	iProperty.Cancel();// new fix to be tested thoroughly
+    	TRequestStatus* status = &iStatus;
+    	User::RequestComplete( status, KErrCancel );
+    	}
+	}
+
+// ----------------------------------------------------------------------------------------
+// CDLObserver::~CDLObserver() 
+// ----------------------------------------------------------------------------------------
+CDLObserver::~CDLObserver()
+	{ 
+	FLOG("CDLObserver::~CDLObserver()");  
+    Cancel();
+    if (iProperty.Handle()) iProperty.Close();
+	}
+
+
+// ---------------------------------------------------------------------------
+// CDLObserver::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CDLObserver::RunError( TInt aError )
+    {
+    return aError;
+    }
+
+//  End of File