securitydialogs/SecUi/GSSimSecPlugin/Src/GSSimSecPlugin.cpp
changeset 0 164170e6151a
child 1 d5423fbb4f29
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/securitydialogs/SecUi/GSSimSecPlugin/Src/GSSimSecPlugin.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,806 @@
+/*
+* 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:  View for Device & SIM Security sub-folder
+*
+*/
+
+
+// INCLUDE FILES
+#include <coeaui.h>
+#include <hlplch.h>             // For HlpLauncher
+#include <bautils.h>
+#include <gulicon.h>
+#include <eikfrlbd.h>
+#include <eiktxlbx.h>
+#include <aknradiobuttonsettingpage.h>
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <RSSSettings.h>
+#include <AknQueryDialog.h>
+#include <aknnotedialog.h>
+#include <aknViewAppUi.h>
+#include <featmgr.h>
+#include <StringLoader.h>
+#include <secui.h>
+#include <secuisecuritysettings.h>
+#include <BTSapDomainPSKeys.h>
+#include <e32property.h>
+
+#include <GSSimSecPluginRsc.rsg>
+#include <gsprivatepluginproviderids.h>
+#include <gsmainview.h>
+#include <gsbasecontainer.h>
+
+#include "GSSimSecPlugin.h"
+#include "GSSimSecPluginContainer.h"
+#include "GSSimSecPlugin.hrh"
+
+
+#ifdef RD_REMOTELOCK
+#include    <RemoteLockSettings.h>  
+#endif // RD_REMOTELOCK
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+const TInt KEmptyCugIndex( -100000000 );
+_LIT( KGSSimSecPluginResourceFileName, "z:GSSimSecPluginRsc.rsc" );
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+/**
+* CCugQuery
+* It defines CCugQuery used in closed user group settings
+*/
+class CCugQuery
+    : public CAknNumberQueryDialog
+    {
+    public: // Constructors and destructors
+        /**
+        * C++ constructor.
+        */
+        CCugQuery( TInt& aNumber,const TTone aTone = ENoTone );
+    protected: // From base classes
+        /**
+        * From CCAknNumberQueryDialog Left softkey is allways OK.
+        */
+        void  UpdateLeftSoftKeyL();
+    };
+
+// ============================= LOCAL FUNCTIONS ==============================
+
+// ========================= MEMBER FUNCTIONS =================================
+
+// ---------------------------------------------------------------------------
+// GSSimSecPlugin::NewL()
+// 
+// ---------------------------------------------------------------------------
+CGSSimSecPlugin* CGSSimSecPlugin::NewL( TAny* /*aInitParams*/ )
+    {
+    CGSSimSecPlugin* self = new( ELeave ) CGSSimSecPlugin();
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();    
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// GSSimSecPlugin::CGSSimSecPlugin()
+// 
+// ---------------------------------------------------------------------------
+CGSSimSecPlugin::CGSSimSecPlugin()
+    : iResourceLoader( *iCoeEnv )
+    {    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::ConstructL()
+// 
+// Symbian OS two-phased constructor
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::ConstructL()
+    {
+    FeatureManager::InitializeLibL();
+
+    iModel = CGSSimSecPluginModel::NewL();
+    //PS listener initialization
+    iBtSapListener = CGSPubSubsListener::NewL( 
+                     KPSUidBluetoothSapConnectionState,
+                     KBTSapConnectionState, this );
+
+    iSecurity= CSecuritySettings::NewL();    
+    if(!FeatureManager::FeatureSupported( KFeatureIdFfNoCugSupport ))
+    {    
+    	User::LeaveIfError( iCugSettings.Open() );
+		}
+    // Find the resource file
+    TParse parse;
+    parse.Set( KGSSimSecPluginResourceFileName, 
+               &KDC_RESOURCE_FILES_DIR, NULL );
+    TFileName fileName( parse.FullName() );
+    
+    // Get language of resource file
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+
+    // Open resource file
+    iResourceLoader.OpenL( fileName );
+    
+    BaseConstructL( R_GS_SIM_SECURITY_VIEW );
+
+    // secui resource file
+    TSecUi::InitializeLibL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::~CGSSettListSecurityView()
+// 
+// 
+// ---------------------------------------------------------------------------
+CGSSimSecPlugin::~CGSSimSecPlugin()
+    {
+    FeatureManager::UnInitializeLib();
+    // close resource loader
+    iResourceLoader.Close();
+	if(!FeatureManager::FeatureSupported( KFeatureIdFfNoCugSupport ))
+    { 
+    iCugSettings.Close();
+  	}
+    if ( iSecurity )
+        {
+        delete iSecurity;
+        }
+
+    if ( iModel )
+        {
+        delete iModel;
+        }
+    delete iBtSapListener;
+
+    TSecUi::UnInitializeLib();  
+    }
+
+
+// ---------------------------------------------------------------------------
+// TUid CGSSettSimListSecurityView::Id()
+// 
+// 
+// ---------------------------------------------------------------------------
+TUid CGSSimSecPlugin::Id() const
+    {
+    return KGSSimSecPluginUid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::HandleCommandL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case EGSCmdAppChange:
+        case EAknSoftkeyChange:
+            {           
+            const TInt currentFeatureId = Container()->CurrentFeatureId();
+
+            if ( currentFeatureId != EGSSettIdSatOperations )
+                {
+                HandleListBoxSelectionL();
+                }
+            else
+                {
+                if(aCommand == EGSCmdAppChange)
+                    SetSatWithSettingPageL();
+                else //user pressed MSK, don't show setting page.
+                    SetSatOperationsL();
+                }
+            }
+            break;
+        case EAknSoftkeyBack:
+            iAppUi->ActivateLocalViewL( KGSSecurityPluginUid );  
+            break;
+        case EAknCmdHelp:
+            {
+            if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+                {
+                HlpLauncher::LaunchHelpApplicationL(
+                    iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
+                }
+            }
+            break;
+        default:
+            iAppUi->HandleCommandL( aCommand );
+            break;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::UpdateListBoxL
+// 
+// Update the current item in the listbox.
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::UpdateListBoxL( TInt aItemId )
+    {
+    Container()->UpdateListBoxL( aItemId );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::DoActivateL(...)
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::DoActivateL( const TVwsViewId& aPrevViewId, 
+                                   TUid aCustomMessageId, 
+                                   const TDesC8& aCustomMessage )
+    {
+    CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );    
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSSimSecPlugin::Container
+// 
+// Return handle to container class.
+// ----------------------------------------------------------------------------
+//
+CGSSimSecPluginContainer* CGSSimSecPlugin::Container()
+    {
+    return static_cast<CGSSimSecPluginContainer*>( iContainer );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::NewContainerL()
+// 
+// Creates new iContainer.
+// ---------------------------------------------------------------------------
+//
+void CGSSimSecPlugin::NewContainerL()
+    {
+    iContainer = new( ELeave ) CGSSimSecPluginContainer( iModel );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::HandleListBoxSelectionL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::HandleListBoxSelectionL() 
+    {
+    const TInt currentFeatureId = Container()->CurrentFeatureId();
+    TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ));
+    TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin ));
+    switch ( currentFeatureId )
+        {
+        case EGSSettIdCodeInUse:
+            if(wcdmaSupported || upinSupported)
+                {
+	                if(iSecurity->SwitchPinCodesL())
+	                {
+	                	UpdateListBoxL( currentFeatureId );
+	              	}
+                }       
+            break;
+        case EGSSettIdUpinRequest:
+            if(wcdmaSupported || upinSupported)
+                 {
+                    if(iSecurity->ChangeUPinRequestL())
+                    {            
+                    	UpdateListBoxL( currentFeatureId );
+                    }
+                 }
+            break;
+        case EGSSettIdUpinCode:
+            if(wcdmaSupported || upinSupported)
+              {
+                  iSecurity->ChangeUPinL();
+              }
+            break;
+        case EGSSettIdPinRequest: 
+        		if(iSecurity->ChangePinRequestL())
+            {               
+            	UpdateListBoxL( currentFeatureId );
+            }
+            break;
+        case EGSSettIdPinCode:            
+            iSecurity->ChangePinL();
+            break;
+        case EGSSettIdPin2Code:
+            iSecurity->ChangePin2L();
+            break;
+        case EGSSettIdAutolock:        
+            SetAutolockTimeL( iSecurity->ChangeAutoLockPeriodL( 
+                                         iModel->AutoLockPeriod() ) );
+            break;
+        case EGSSettIdSecurityCode:
+            iSecurity->ChangeSecCodeL();
+            break;
+        case EGSSettIdSimChange:    
+            if(iSecurity->ChangeSimSecurityL())
+            {
+            	UpdateListBoxL( currentFeatureId );
+            }
+            break; 
+            
+#ifdef RD_REMOTELOCK
+        case EGSSettIdRemoteLock:
+            SetRemoteLockStatusL( iModel->AutoLockPeriod() );
+            break;
+            
+#endif                
+        case EGSSettIdClosedUserGroup:
+        	if(!FeatureManager::FeatureSupported( KFeatureIdFfNoCugSupport ))
+    		{        
+	            CugModeL();
+	            UpdateListBoxL( currentFeatureId );
+	          }
+            break;
+        case EGSSettIdSatOperations:
+            SetSatOperationsL();
+            break;
+        default:
+            break;
+        }
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::SetAutolockTimeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::SetAutolockTimeL( TInt aPeriod )
+    { 
+    iModel->SetAutoLockPeriod( aPeriod );
+    UpdateListBoxL( EGSSettIdAutolock );
+    }
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::SetSatOperationsL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::SetSatOperationsL()
+    {
+    TInt i = iModel->SatOperations();
+    
+    if ( i == 0 )
+        {
+        iModel->SetSatOperations( 1 );
+        }
+    else
+        {
+        iModel->SetSatOperations( 0 );
+        }
+    UpdateListBoxL( EGSSettIdSatOperations );
+    }
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::SetSatOperationsL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::SetSatWithSettingPageL()
+    {
+    TInt currentItem = iModel->SatOperations();
+
+    CDesCArrayFlat* items =  iCoeEnv->ReadDesC16ArrayResourceL( R_SAT_ARRAY );
+    CleanupStack::PushL( items );
+
+    CAknRadioButtonSettingPage* page = 
+        new( ELeave ) CAknRadioButtonSettingPage( R_SAT_SETTING_PAGE, 
+                                                  currentItem, items );
+
+    if ( page->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )            
+        {    
+        iModel->SetSatOperations( currentItem );
+        }
+    
+    CleanupStack::PopAndDestroy( items );
+
+    UpdateListBoxL( EGSSettIdSatOperations );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::CugModeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CGSSimSecPlugin::CugModeL()
+    {    
+    TInt cugIndex = 0;
+    TInt currentItem = 0;
+    TInt cugMode = 0;
+    TInt cugDefault;
+    TInt err = KErrNone;
+
+    err = iCugSettings.Get( ESSSettingsDefaultCug, cugDefault );
+    User::LeaveIfError( err );
+
+    
+    if ( iCugSettings.Get( ESSSettingsCug, cugMode ) != KErrNone )
+        {// getting mode was not succesful
+        cugMode = cugDefault;
+        }
+
+    if ( cugMode == cugDefault )
+        {
+        currentItem = EGSCugNetworkDefault;
+        if ( iCugSettings.PreviousCugValue( cugIndex ) != KErrNone )        
+            {
+            cugIndex = 0;
+            }
+        }
+    else
+        {
+        switch ( cugMode )
+            {
+            case ESSSettingsCugSuppress:
+                currentItem = EGSCugOff;
+                if ( iCugSettings.PreviousCugValue( cugIndex ) != KErrNone )
+                    {
+                    cugIndex = 0;
+                    }
+                break;
+            default:
+                currentItem = EGSCugOn;
+                cugIndex = cugMode;
+                break;
+            }
+        }
+
+
+    CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( R_CUG_LBX );
+    CleanupStack::PushL( items );
+
+    CAknRadioButtonSettingPage* page = 
+        new( ELeave ) CAknRadioButtonSettingPage( R_CUG_SETTING_PAGE, 
+                                                  currentItem, items );
+
+    // call the appropriate cug- methods here
+    if ( page->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )    
+        {    
+        
+        switch ( currentItem )
+            {
+            case EGSCugNetworkDefault://cug mode set default, 
+                User::LeaveIfError( iCugSettings.Set( ESSSettingsCug, 
+                                                      cugDefault ) );
+                break;
+            case EGSCugOn: //1, index is queried, if query ok then
+                // set the index and mode
+                if ( CugIndexQueryL( cugIndex, cugDefault )  )
+                    {
+                    if ( iCugSettings.IsValueValidCugIndex( cugIndex ) )
+                        {
+                        User::LeaveIfError( iCugSettings.Set( ESSSettingsCug, 
+                                                              cugIndex ) );
+                        }
+                    else
+                        {
+                        User::LeaveIfError( iCugSettings.Set( ESSSettingsCug, 
+                                                              cugDefault ) );
+                        User::LeaveIfError( iCugSettings.ResetPreviousCugValue() );
+                        }
+                    }
+                break;
+            case EGSCugOff://2, sets cug mode "inactive"
+                User::LeaveIfError( iCugSettings.Set( ESSSettingsCug, 
+                                    ESSSettingsCugSuppress ) );
+                break;
+            default:
+                break;
+            }
+        }
+    CleanupStack::PopAndDestroy( items );
+    return;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::CugIndexQueryL()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt CGSSimSecPlugin::CugIndexQueryL( TInt& aCugIndex, TInt& aCugDefault )
+    {    
+    while ( ETrue )
+        {
+        CCugQuery* dlg = new( ELeave ) CCugQuery( aCugIndex,
+                                       CAknQueryDialog::ENoTone );
+    
+        if ( dlg->ExecuteLD( R_CUG_INDEX ) )
+            {
+            // check content validity (?-32767), 
+            // ui spec concerned only values above limit
+            if( !iCugSettings.IsValueValidCugIndex( aCugIndex )
+                && ( aCugIndex != KEmptyCugIndex )
+                && ( aCugIndex != aCugDefault ) )
+                {
+                CAknNoteDialog* dlg = new ( ELeave ) 
+                    CAknNoteDialog( CAknNoteDialog::EErrorTone, 
+                                    CAknNoteDialog::ELongTimeout );
+                dlg->ExecuteLD( R_CUG_INDEX_ERROR_NOTE );
+                }
+            else //index ok, break
+                {
+                break;
+                }
+            }
+        else // query cancelled
+            {
+            return EFalse;
+            }
+        }
+
+    return ETrue;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCugQuery::CCugQuery()
+// 
+// ---------------------------------------------------------------------------
+//
+CCugQuery::CCugQuery( TInt& aNumber, const TTone aTone )
+    : CAknNumberQueryDialog( aNumber, aTone )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCugQuery::UpdateLeftSoftKeyL()
+// Left softkey is allways visible
+// ---------------------------------------------------------------------------
+//
+void CCugQuery::UpdateLeftSoftKeyL()
+    {
+    MakeLeftSoftkeyVisible( ETrue );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::HandleResourceChangeL( TInt aType )
+// Updates view layout
+//  
+// ---------------------------------------------------------------------------
+//
+void CGSSimSecPlugin::HandleResourceChangeL( TInt aType )
+    {
+    if( aType == KAknsMessageSkinChange ||
+        aType == KEikDynamicLayoutVariantSwitch )
+        {
+        //iContainer->HandleResourceChangeL( aType );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::HandleNotifyPSL
+//
+// Handling PS keys change
+// ---------------------------------------------------------------------------
+//  
+void CGSSimSecPlugin::HandleNotifyPSL( const TUid aUid, const TInt& aKey,
+                                       const TRequestStatus& /* aStatus */ )
+    {
+    if ( aUid == KPSUidBluetoothSapConnectionState && 
+         aKey == KBTSapConnectionState )
+        {
+        Visible();
+        }
+    }
+
+
+// ========================= From CGSPluginInterface ==================
+
+// ----------------------------------------------------------------------------
+// CGSSimSecPlugin::GetCaption
+// 
+// Return application/view caption.
+// ----------------------------------------------------------------------------
+//
+void CGSSimSecPlugin::GetCaptionL( TDes& aCaption ) const
+    {
+    // the resource file is already opened.
+    HBufC* result = StringLoader::LoadL( R_GS_SIM_SECURITY_VIEW_CAPTION );
+    
+    aCaption.Copy( *result );
+    delete result;
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CGSSimSecPlugin::PluginProviderCategory
+// 
+// A means to identify the location of this plug-in in the framework.
+// ----------------------------------------------------------------------------
+//
+TInt CGSSimSecPlugin::PluginProviderCategory() const
+    {
+    //To identify internal plug-ins.
+    return KGSPluginProviderInternal;
+    }
+    
+
+// ----------------------------------------------------------------------------
+// CGSSimSecPlugin::Visible
+// 
+// Provides the visibility status of self to framework.
+// ----------------------------------------------------------------------------
+//    
+TBool CGSSimSecPlugin::Visible() const
+    {
+    TInt btSapConnectionState;
+    TBool visible = ETrue;
+
+    iBtSapListener->Get( btSapConnectionState );
+
+    if ( btSapConnectionState == EBTSapConnected )
+        {
+        visible = EFalse;
+        }
+    
+    return visible;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CGSSimSecPlugin::SetRemoteLockStatusL()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt CGSSimSecPlugin::SetRemoteLockStatusL( TInt aAutoLockPeriod )
+    {
+    #ifdef RD_REMOTELOCK
+    #ifdef _DEBUG
+    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - Enter" ) );
+    #endif // DEBUG
+
+    TInt retValue( KErrNone );
+    TBool remoteLockStatus( EFalse );
+    TBuf<KRLockMaxLockCodeLength> remoteLockCode;
+
+    CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewLC();
+
+    // Get the current remote lock status 
+    if ( remoteLockSettings->GetEnabled( remoteLockStatus ) )
+        {
+        // Show remote lock setting page
+        retValue = iSecurity->ChangeRemoteLockStatusL( remoteLockStatus, remoteLockCode, aAutoLockPeriod );
+
+        if ( retValue == KErrNone )
+            {
+            if ( remoteLockStatus )
+                {
+                // Set remote lock status
+                if ( remoteLockSettings->SetEnabledL( remoteLockCode ) )
+                    {
+                    // Remote lock status was set successfully
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - Remote lock enabled and code set" ) );
+                    #endif // DEBUG
+                    }
+                else
+                    {
+                    // Failed to enabled remote lock 
+                    retValue = KErrGeneral;
+
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - remoteLockSettings->SetEnabledL failed" ) );
+                    #endif // DEBUG
+                    }
+                }
+            else
+                {
+                // Disable remote lock
+                if ( remoteLockSettings->SetDisabled() )
+                    {
+                    // Remote lock disabled
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - Remote lock disabled" ) );
+                    #endif // DEBUG
+                    }
+                else
+                    {
+                    // Failed to disable remote lock
+                    retValue = KErrGeneral;
+
+                    #ifdef _DEBUG
+                    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - remoteLockSettings->SetDisabled failed" ) );
+                    #endif // DEBUG
+                    }
+                }
+            }
+        else
+            {
+            // User interaction (setting page) failed for some reason
+            #ifdef _DEBUG
+            RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - iSecurity->ChangeRemoteLockStatusL failed" ) );
+            #endif // DEBUG
+            }
+        }
+    else
+        {
+        // Failed to retreive the current remote lock status
+        retValue = KErrGeneral;
+
+        #ifdef _DEBUG
+        RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - remoteLockSettings->GetEnabled failed" ) );
+        #endif // DEBUG
+        }
+
+    CleanupStack::PopAndDestroy( remoteLockSettings );
+    remoteLockSettings = NULL;
+
+    UpdateListBoxL( EGSSettIdRemoteLock );
+
+    #ifdef _DEBUG
+    RDebug::Print( _L( "(GS)CGSSettListSimSecurityView::SetRemoteLockStatusL() - Exit" ) );
+    #endif // DEBUG
+	return retValue;
+	#else //!RD_REMOTELOCK 
+    return KErrNotSupported;
+    #endif // RD_REMOTELOCK  
+    }
+    
+    
+// ----------------------------------------------------------------------------
+// CGSSimSecPlugin::DynInitMenuPaneL()
+// 
+// Display the dynamic menu
+// ----------------------------------------------------------------------------
+void CGSSimSecPlugin::DynInitMenuPaneL( TInt aResourceId,
+                                          CEikMenuPane* aMenuPane )
+    {
+
+	// show or hide the 'help' menu item when supported
+    if( aResourceId == R_GS_SIM_SEC_MENU_ITEM_HELP )
+        {
+        User::LeaveIfNull( aMenuPane );    
+        if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse );
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+            }
+        }
+
+    } 
+// End of File