remotestoragefw/gsplugin/src/rsfwgsremotedrivesettingscontainer.cpp
changeset 0 3ad9d5175a89
child 1 1c07d7ba3e3d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/gsplugin/src/rsfwgsremotedrivesettingscontainer.cpp	Thu Dec 17 09:07:59 2009 +0200
@@ -0,0 +1,757 @@
+/*
+* 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:  Rsfw GS plugin Settins list container
+*
+*/
+
+
+// INCLUDE FILES
+#include    <akntitle.h>
+#include    <barsread.h>
+#include    <StringLoader.h>
+#include    <AknQueryDialog.h>
+#include    <aknnotewrappers.h>
+#include 	<rsfwgspluginrsc.rsg>
+#include    <uri16.h>
+
+#include   	"rsfwgslocalviewids.h"
+#include 	"rsfwgsplugin.h"
+#include 	"rsfwgsremotedrivesettingscontainer.h"
+#include 	"rsfwgspluginsettinglist.h"
+#include  	"rsfwgssettingsdata.h"
+#include	"rsfwmountman.h"
+#include	"rsfwmountentry.h"
+#include    "rsfwmountutils.h"
+#include	"rsfwcommon.h"
+#include    "mdebug.h"
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::CRsfwGsPluginDriveSettingsContainer()
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPluginDriveSettingsContainer::CRsfwGsPluginDriveSettingsContainer(CAknView* aView) : iView(aView)
+    {
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::ConstructL(const TRect& aRect)
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::ConstructL( const TRect& aRect, 
+													CRsfwMountMan* aMountMan)
+    {
+    #ifdef _DEBUG
+    RDebug::Print( _L( "[CRsfwGsPluginDriveSettingsContainer] ConstructL()" ) );
+	#endif
+	
+	iMountMan = aMountMan;
+
+    CEikStatusPane* sp = static_cast<CAknAppUi*> 
+        ( iEikonEnv->EikAppUi() )->StatusPane();
+    CAknTitlePane* title = static_cast<CAknTitlePane*> 
+        ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+    // Set the proper title of this list
+    TResourceReader rReader;
+    iCoeEnv->CreateResourceReaderLC( rReader, R_GS_RSFW_REMOTE_DRIVE_SETTINGS_VIEW_TITLE );
+    title->SetFromResourceL( rReader );
+    CleanupStack::PopAndDestroy(); //rReader
+
+    CreateWindowL(); // Makes the control a window-owning control
+
+    // construct the data object the settings list will use
+    iData = CRsfwGsSettingsData::NewL();
+    // construct control and set parent
+    iSettingList = CRsfwGsPluginSettingsList::NewL(*iData);
+    iSettingList->SetContainerWindowL(*this);
+
+    // CreateResourceReaderLC will allocate a buffer to be used by
+    // the TResourceReader. This buffer is pushed onto the cleanup
+    // stack - not the TResourceReader itself
+    iEikonEnv->CreateResourceReaderLC(rReader, R_SETTINGS);
+    iSettingList->ConstructFromResourceL(rReader);
+
+    // Clean up the buffer allocated above, NOT the reader itself.
+    // Cannot use expected item overload of PopAndDestroy() as buffer 
+    // is inaccessible. 
+    CleanupStack::PopAndDestroy();
+    iSettingList->ActivateL();
+    
+    iCoeEnv->AddForegroundObserverL( *this );
+
+    SetRect( aRect );
+    ActivateL();
+    
+       
+    #ifdef _DEBUG        
+    RDebug::Print( _L( "[CRsfwGsPluginDriveSettingsContainer] Construct done" ) );
+	#endif
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::~CRsfwGsPluginDriveSettingsContainer()
+// ---------------------------------------------------------------------------
+//
+CRsfwGsPluginDriveSettingsContainer::~CRsfwGsPluginDriveSettingsContainer()
+    {    
+    iCoeEnv->RemoveForegroundObserver( *this );
+    if (iData)
+        delete iData;
+    if(iSettingList)  // if setting list has been created
+        {
+        delete iSettingList;
+        iSettingList = NULL;
+        }
+
+   // Ecom session is used to make sure that user gives address
+    // that corresponds to some installed access plugin
+    // (currently via mountils::isaddressvalid)
+    // this closes the session (if not in use anymore)
+    REComSession::FinalClose();  
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SizeChanged()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::SizeChanged()
+    {
+	iSettingList->SetRect(Rect());
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::CountComponentControls() const
+// ---------------------------------------------------------------------------
+//
+TInt CRsfwGsPluginDriveSettingsContainer::CountComponentControls() const
+    {
+    return 1;
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::ComponentControl( TInt aIndex ) const
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CRsfwGsPluginDriveSettingsContainer::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iSettingList;
+        default:
+            return NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::EditCurrentItemL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::EditCurrentItemL()
+    {
+    iSettingList->EditCurrentItemL();    
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::OfferKeyEventL()
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CRsfwGsPluginDriveSettingsContainer::OfferKeyEventL( 
+    const TKeyEvent& aKeyEvent, 
+    TEventCode aType )
+    {
+    if (iSettingList)
+        return iSettingList->OfferKeyEventL(aKeyEvent, aType);
+    else
+        return EKeyWasNotConsumed;
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::Draw(const TRect& aRect) const
+    {
+    CWindowGc& gc = SystemGc();
+    gc.Clear(aRect);
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleListBoxEventL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent)
+    {
+    // if the Select Key has been pressed
+    if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) ||
+    (aListBoxEvent == MEikListBoxObserver::EEventItemClicked))
+        {
+        iSettingList->EditCurrentItemL();
+        }
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL(TDesC& aRemoteDriveName)
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL(const TDesC& aRemoteDriveName)
+    {
+    DEBUGSTRING(("CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL enter"));
+    const CRsfwMountEntry* mountEntry = NULL;
+    
+    // read the source setting
+    DEBUGSTRING(("read the source setting"));
+    mountEntry = iMountMan->MountEntryL(aRemoteDriveName); 
+    User::LeaveIfNull((TAny *)mountEntry);
+    
+    // compulsory fields
+    DEBUGSTRING(("compulsory fields"));
+    iData->Reset();
+    iData->iSettingName = *(mountEntry->Item(EMountEntryItemName));
+    iData->iURL =*(mountEntry->Item(EMountEntryItemUri));
+   	const HBufC* drive = (mountEntry->Item(EMountEntryItemDrive));
+    if (drive && drive->Length())
+        {
+        iData->iDriveLetter =(*drive)[0];
+        }
+    // optional fields
+    DEBUGSTRING(("optional fields"));
+    if (mountEntry->Item(EMountEntryItemUserName))
+    {
+        DEBUGSTRING(("setting user id"));
+    	iData->iUserID = *(mountEntry->Item(EMountEntryItemUserName));
+    }
+    
+    if (mountEntry->Item(EMountEntryItemPassword)) 
+    {
+        DEBUGSTRING(("setting passwd"));
+    	iData->iPassword = *(mountEntry->Item(EMountEntryItemPassword));
+    }
+    
+    if (mountEntry->Item(EMountEntryItemIap))  
+    {
+        DEBUGSTRING16(("setting access pointDes to %S", (mountEntry->Item(EMountEntryItemIap))));
+    	iData->iAccessPointDes = *(mountEntry->Item(EMountEntryItemIap));
+    	// if the access point name returned from CenRep was '?', set it to "None" in UI
+    	if (iData->iAccessPointDes == KIapAskUser) 
+    	{
+    		iData->iAccessPointName = KNullDesC;
+    	}
+    	else 
+    	{
+    		// try to resolve access point id into name
+    		TLex lex(iData->iAccessPointDes);
+    		TInt ap, err;
+    		err = lex.Val(ap);
+    		if (!err) 
+    		{
+    			iSettingList->GetAccessPointNameL(ap, iData->iAccessPointName);	
+    			DEBUGSTRING(("setting access point"));
+    			iData->iAccessPoint = ap;
+    		}	
+    		else
+    		{
+    			DEBUGSTRING(("setting access point name"));
+    			iData->iAccessPointName = KNullDesC;
+    		}
+    	}
+    }
+       
+    DEBUGSTRING(("iData constructed"));   
+    iSettingList->LoadSettingsL();
+    SetTitlePaneTextL(iData->iSettingName);
+    iSettingList->ResetItemIndex();
+    DEBUGSTRING(("CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveForEditingL exit"));
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveNewDefaultL(TDesC& aRemoteDriveName);
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::PrepareRemoteDriveNewDefaultL(TDesC& aRemoteDriveName)
+    {
+    iData->Reset();
+    iData->iSettingName = aRemoteDriveName;
+    iSettingList->LoadSettingsL();
+    iSettingList->ResetItemIndex();
+    iSettingList->DrawDeferred();
+    SetTitlePaneTextL(iData->iSettingName);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SetTitlePaneTextL( const TDesC& aTitleText ) const
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::SetTitlePaneTextL( const TDesC& aTitleText ) const
+    {
+    CAknTitlePane* title = static_cast< CAknTitlePane* >
+        ( iEikonEnv->AppUiFactory()->StatusPane()->ControlL(
+                                        TUid::Uid( EEikStatusPaneUidTitle ) ) );
+    if ( !title )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    title->SetTextL( aTitleText );
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::AreCompulsoryItemsFilled()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::AreCompulsoryItemsFilled()
+    {
+    TUriParser uriParser;
+    uriParser.Parse(iData->iURL);
+    HBufC* host = HBufC::NewL(KMaxURLLength);
+    TPtr hostPtr = host->Des();
+    hostPtr = uriParser.Extract(EUriHost);
+
+    if ( ((iData->iSettingName)!=KNullDesC) && (hostPtr!=KNullDesC))
+        {
+        delete host;
+        return ETrue;
+        }
+    delete host;
+    return EFalse;   
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DisplayDeleteOrDontSaveDialog()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::DisplayDeleteOrDontSaveDialogL()
+    {
+    
+    HBufC* myDisplayMessage = NULL;
+    myDisplayMessage = StringLoader::LoadLC(R_STR_REMOTE_DRIVE_CONF_COMPULSORY);
+    CAknQueryDialog* query = CAknQueryDialog::NewL
+                                        (CAknQueryDialog::EConfirmationTone);
+    TBool answer = query->ExecuteLD( R_CONFIRMATION_QUERY, *myDisplayMessage );
+    CleanupStack::PopAndDestroy(myDisplayMessage);        
+    return answer;
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DeleteremoteDriveIfExistL()
+// ---------------------------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::DeleteRemoteDriveIfExistL()
+    {
+    iMountMan->DeleteMountEntryL(iData->iDriveLetter);
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsExitProcessingOKL()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsExitProcessingOKL()
+    {
+    if (AreCompulsoryItemsFilled())
+        {
+        if (!(RsfwMountUtils::IsFriendlyNameValid(iData->iSettingName))) 
+            {
+            HBufC* myDisplayMessage = NULL;
+            myDisplayMessage = StringLoader::LoadLC(R_STR_RSFW_ERROR_ILLEGAL_CHARACTERS);
+            CAknErrorNote* errorNote = new CAknErrorNote(EFalse);
+            errorNote->ExecuteLD(*myDisplayMessage);
+            CleanupStack::PopAndDestroy(myDisplayMessage);
+            iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemDriveName-1);
+            return EFalse;            
+            }
+        
+        // Uri must contain some scheme, like http:// or upnp://    
+        if (!IsDriveAddressValidL(iData->iURL)) 
+            {
+            HBufC* myDisplayMessage = NULL;
+            myDisplayMessage = StringLoader::LoadLC(R_STR_RSFW_ERROR_ILLEGAL_ADDRESS);
+            CAknNoteDialog* noteDlg = new ( ELeave ) CAknNoteDialog( );
+            noteDlg->SetTextL( *myDisplayMessage );
+        	noteDlg->ExecuteLD( R_RSFW_INFORMATION_NOTE );	
+            CleanupStack::PopAndDestroy(myDisplayMessage);
+            iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemURL-1);
+            return EFalse;           
+            }   
+            
+        // settings seem to be ok    
+        return SaveOrCreateAndSaveRemoteDriveL(ETrue);        
+        }
+    else 
+        {
+        if (DisplayDeleteOrDontSaveDialogL())
+            {
+            DeleteRemoteDriveIfExistL();
+            }
+        else
+            {
+            // set focus on the address field as that is the first (and only)
+            // unfilled compulsary setting field
+             iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemURL-1);
+             return EFalse;
+            }        
+        }
+    
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SaveSettingsL
+// Attempts to save settings
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::SaveSettingsL()
+    {
+    if (AreCompulsoryItemsFilled())
+        {
+        if (!(RsfwMountUtils::IsFriendlyNameValid(iData->iSettingName))) 
+            {
+            return;            
+            }
+        // Uri must contain some scheme, like http:// or upnp://    
+        if (!IsDriveAddressValidL(iData->iURL)) 
+            {
+            return;
+            }   
+        // settings seem to be ok    
+        SaveOrCreateAndSaveRemoteDriveL(EFalse);
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::SaveOrCreateAndSaveremoteDriveL()
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::SaveOrCreateAndSaveRemoteDriveL(TBool aShowDialog)
+    {
+   // try to get mountentry with this drive letter
+   const CRsfwMountEntry* existingMountEntry = iMountMan->MountEntryL(iData->iDriveLetter);
+ 
+   // to keep names unique check if the setting with this name is already exist
+   // ask user to change name
+   TBool isConflict;
+   if (existingMountEntry) 
+        {
+        isConflict = IsRemoteDriveNameConflictL(iData->iSettingName, *(existingMountEntry->Item(EMountEntryItemDrive)));
+        }
+   else 
+        {
+        TBuf<5> bogusDrive;
+        bogusDrive.Append(_L("C:\\"));
+        isConflict = IsRemoteDriveNameConflictL(iData->iSettingName, bogusDrive);
+        }
+    
+    if (isConflict)
+        {
+        if (aShowDialog)
+            {
+            HBufC* myFormatMessage = NULL;	
+            if ( iData->iSettingName.Length() )
+                {
+                myFormatMessage = StringLoader::LoadLC( R_STR_REMOTE_DRIVE_NAME_ALREADY_EXIST, iData->iSettingName);
+                }
+            else
+                {
+                myFormatMessage = StringLoader::LoadLC( R_STR_REMOTE_DRIVE_NAME_ALREADY_EXIST );
+                }
+     		
+            CAknErrorNote* note = new CAknErrorNote(EFalse);
+            note->SetTimeout( CAknNoteDialog::ELongTimeout  );
+            note->ExecuteLD( *myFormatMessage );
+            CleanupStack::PopAndDestroy(myFormatMessage);
+            // set focus to drive
+            iSettingList->ListBox()->SetCurrentItemIndex(ESettingItemDriveName-1); 		    
+            }
+        return EFalse;       	               
+        }    
+   	else if (!existingMountEntry || DataChanged(existingMountEntry)) 
+        {  	
+         
+       CRsfwMountEntry* newMountEntry = CRsfwMountEntry::NewLC();
+        if (existingMountEntry)
+            {
+        	// the same drive letter must be set as it is the key
+        	newMountEntry->SetItemL(EMountEntryItemDrive, *(existingMountEntry->Item(EMountEntryItemDrive)));
+            }
+	
+ 	    newMountEntry->SetItemL(EMountEntryItemName, iData->iSettingName);
+ 	    newMountEntry->SetItemL(EMountEntryItemUri, iData->iURL);
+ 	    if ((iData->iUserID)!=KNullDesC)
+   			{
+      	  	newMountEntry->SetItemL(EMountEntryItemUserName, iData->iUserID);	
+        	}
+        
+     	if ((iData->iPassword)!=KNullDesC)
+    	    {
+      		newMountEntry->SetItemL(EMountEntryItemPassword, iData->iPassword);	
+       		}    
+	    if ((iData->iAccessPointDes)!=KNullDesC) 
+    	    {
+	        newMountEntry->SetItemL(EMountEntryItemIap, iData->iAccessPointDes);
+   		    }
+   		    else
+   		    {
+   		    newMountEntry->SetItemL(EMountEntryItemIap, KIapAskUser);	
+   		    }
+        
+        newMountEntry->SetItemL(EMountEntryItemInactivityTimeout, iData->iInActivityTimeout);
+        
+        // depending on whether this is new mount created or existing mount edited
+        // choose proper method from MountMan API
+        // pop here from the stack since ownership is passed to the mountman
+        CleanupStack::Pop(newMountEntry);
+        
+        if (!existingMountEntry)
+            {
+           	iMountMan->AddMountEntryL(newMountEntry);
+            }
+        else 
+            {
+            iMountMan->EditMountEntryL(newMountEntry);
+            }
+        }
+    return ETrue;   
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::DataChanged
+// ---------------------------------------------------------------------------
+//    
+TBool CRsfwGsPluginDriveSettingsContainer::DataChanged(const CRsfwMountEntry* aCurrentData)
+{
+    if (!aCurrentData) 
+        {
+        return ETrue;
+        }
+
+	// compulsary settings
+	if (iData->iSettingName != *(aCurrentData->Item(EMountEntryItemName))) 
+	{
+		return ETrue;
+	}
+	if (iData->iURL != *(aCurrentData->Item(EMountEntryItemUri))) 
+	{
+		return ETrue;
+	}
+	
+	// optional settings
+	if (!aCurrentData->Item(EMountEntryItemUserName)) 
+	{
+		if (iData->iUserID != KNullDesC) 
+		{
+			return ETrue;
+		}
+	}
+	else 
+	{
+		if (iData->iUserID != *(aCurrentData->Item(EMountEntryItemUserName)))
+		{
+		return ETrue;
+		}	
+	}
+	
+	if (!aCurrentData->Item(EMountEntryItemPassword)) 
+	{
+		if (iData->iPassword != KNullDesC) 
+		{
+			return ETrue;
+		}
+	}
+	else 
+	{
+		if (iData->iPassword != *(aCurrentData->Item(EMountEntryItemPassword)))
+		{
+			return ETrue;
+		}	
+	}
+
+	if (!aCurrentData->Item(EMountEntryItemIap)) 
+	{
+		if (iData->iAccessPointDes != KNullDesC) 
+		{
+			return ETrue;
+		}
+	}
+	else 
+	{
+		if (iData->iAccessPointDes != *(aCurrentData->Item(EMountEntryItemIap)))
+		{
+			return ETrue;
+		}	
+	}
+
+
+	return EFalse;
+}
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsRemoteDriveNameExistL(TDesC& aremoteDriveName)
+// 
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsRemoteDriveNameConflictL(
+                                               TDesC& aRemoteDriveName,
+                                               const TDesC& aDriveLetter)
+    {
+    TBool ret(EFalse);
+    CDesCArray* remoteDriveList = NULL;
+
+    TRAPD(err, remoteDriveList = LoadRemoteDriveNamesL());
+    if(err!=KErrNone)    
+        {
+        return EFalse;
+        }
+    CleanupStack::PushL(remoteDriveList);
+
+    TInt remoteDriveListCount = remoteDriveList->Count();
+    for (TInt i = 0; i< remoteDriveListCount; i++)
+        {
+        if (!((remoteDriveList->MdcaPoint(i)).CompareF(aRemoteDriveName))) // if equal
+            { 
+              // check whether the drive letter is the same or not
+              const CRsfwMountEntry* existingDrive = 
+                    iMountMan->MountEntryL(aRemoteDriveName);
+              if ((existingDrive->Item(EMountEntryItemDrive))->Compare(aDriveLetter) == 0 ) 
+                {
+                ret = EFalse;    
+                }
+              else 
+                {
+                ret = ETrue;
+                }
+              break;
+            }
+        }
+    CleanupStack::PopAndDestroy(remoteDriveList);
+    return ret;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::IsDriveAddressValidL
+// ---------------------------------------------------------------------------
+//
+TBool CRsfwGsPluginDriveSettingsContainer::IsDriveAddressValidL(const TDesC& aDriveAddress)
+    {
+    HBufC8* urlBuffer = HBufC8::NewL(KMaxURLLength);
+    TPtr8 bufPtr = urlBuffer->Des();
+    bufPtr.Append(aDriveAddress);
+    TBool isAddressValid = RsfwMountUtils::IsDriveAddressValid(*urlBuffer);
+    delete urlBuffer;
+    return isAddressValid;
+    }
+    
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::LoadRemoteDriveNamesL
+// ---------------------------------------------------------------------------
+//
+CDesCArray* CRsfwGsPluginDriveSettingsContainer::LoadRemoteDriveNamesL()
+    {
+    CDesCArray* myArray = new (ELeave) CDesC16ArraySeg(4);
+    iMountMan->GetMountNamesL(myArray);
+    return myArray;
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleResourceChange()
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::HandleResourceChange( TInt aType )
+    {
+    if ( aType == KAknsMessageSkinChange ||
+         aType == KEikDynamicLayoutVariantSwitch )
+        {
+        if (aType != KAknsMessageSkinChange) 
+            {
+            TRect mainPaneRect;
+            AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+                                           mainPaneRect);
+            SetRect( mainPaneRect );
+            }
+            
+        DrawDeferred();    
+        CRsfwGsPlugin* tempView = static_cast<CRsfwGsPlugin*> (iView);  
+        tempView->HandleResourceChangeManual(aType);
+        }
+    CCoeControl::HandleResourceChange( aType );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::HandleResourceChangeManual()
+// ---------------------------------------------------------------------------    
+void CRsfwGsPluginDriveSettingsContainer::HandleResourceChangeManual(TInt aType)
+    {
+    if (aType !=  KAknsMessageSkinChange) 
+        {    
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+                                       mainPaneRect);
+        SetRect( mainPaneRect );  
+        } 
+    
+    DrawDeferred();   	
+	iSettingList->HandleResourceChange(aType);
+    }
+
+// ---------------------------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::FocusChanged
+// Set focus on the selected listbox. For animated skins feature.
+// ---------------------------------------------------------------------------
+void CRsfwGsPluginDriveSettingsContainer::FocusChanged(TDrawNow /*aDrawNow*/)
+    {
+    if(iSettingList)
+        {
+        iSettingList->SetFocus( IsFocused() );
+        }
+    }
+
+// ---------------------------------------------------------
+// CRsfwGsPluginDriveSettingsContainer::GetHelpContext
+// This function is called when Help application is launched
+// ---------------------------------------------------------
+//
+void CRsfwGsPluginDriveSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KGSRsfwPluginUID;
+   // aContext.iContext = KRSFW_HLP_EDIT_SET;
+    }   
+    
+    
+ TDes& CRsfwGsPluginDriveSettingsContainer::GetCurrentRemoteDriveName()
+    {
+    return iData->iSettingName;    
+    }   
+    
+ 
+// from  MCoeForegroundObserver
+ 
+void CRsfwGsPluginDriveSettingsContainer::HandleGainingForeground() 
+    {
+    
+    }  
+    
+    
+void CRsfwGsPluginDriveSettingsContainer::HandleLosingForeground() 
+    {
+    
+    }   
+    
+
+// End of File