sdkcreationmw/sdkruntimes/GuiLauncher/src/EcmtGuiSettingDataHandler.cpp
changeset 0 b26acd06ea60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sdkcreationmw/sdkruntimes/GuiLauncher/src/EcmtGuiSettingDataHandler.cpp	Mon Mar 08 12:09:11 2010 +0530
@@ -0,0 +1,346 @@
+/*
+* Copyright (c) 2007 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:  Provides all neccessary data for CEcmtGuiSettingList.
+*
+*/
+
+
+#include <features.hrh>
+#include <commdb.h>
+#include <aknsettingitemlist.h>
+#include <f32file.h> 
+
+#include "EcmtGuiSettingDataHandler.h"
+#include "EcmtClientServerCommon.h"
+
+_LIT8( KLinebreak8, "\n" );	
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CEcmtGuiSettingDataHandler::~CEcmtGuiSettingDataHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//    
+CEcmtGuiSettingDataHandler::CEcmtGuiSettingDataHandler()
+    {
+    iSelectedCommsDbId = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CEcmtGuiSettingDataHandler* CEcmtGuiSettingDataHandler::NewL()
+    {
+    CEcmtGuiSettingDataHandler* self = new (ELeave) CEcmtGuiSettingDataHandler;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CEcmtGuiSettingDataHandler::ConstructL()
+    {    
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the number of supported connectivities. Possible ones are WLAN, 
+// USB, and Bluetooth.
+// ---------------------------------------------------------------------------
+//   
+TInt CEcmtGuiSettingDataHandler::NumberOfSupportedFeaturesL(  
+                                        CFeatureDiscovery* aFeatTest )
+    {
+    CFeatureDiscovery* featTest = NULL;
+    
+    if( aFeatTest == NULL )
+        featTest = CFeatureDiscovery::NewL();
+    else
+        featTest = aFeatTest;
+        
+    TInt count(0);
+    if( featTest->IsSupported( KFeatureIdBt ) ) ++count;
+    if( featTest->IsSupported( KFeatureIdUsb ) ) ++count;
+    if( featTest->IsSupported( KFeatureIdProtocolWlan ) ) ++count;
+    
+    if( aFeatTest == NULL )
+        delete featTest;
+    
+    return count;
+    }
+
+// ---------------------------------------------------------------------------
+// Gets data for CAknSettingItemList.
+// ---------------------------------------------------------------------------
+//   
+TInt CEcmtGuiSettingDataHandler::GetDataL(
+                CArrayPtr<CAknEnumeratedText>& aEnumeratedTextArray, 
+                CArrayPtr<HBufC>& aPoppedUpTextArray )
+    {
+    CFeatureDiscovery* featTest = CFeatureDiscovery::NewLC();  
+        
+    TInt count = NumberOfSupportedFeaturesL( featTest );
+    
+    // If there is no support for BT,USB, or WLAN, return
+    if( count == 0 )
+        {
+        CleanupStack::PopAndDestroy( featTest );
+        return KErrNotFound;    
+        }
+        
+    //Add feature titles to given arrays based on feature supports
+    if( featTest->IsSupported( KFeatureIdBt ) )    
+    	AddTextL( aEnumeratedTextArray, aPoppedUpTextArray, KEcmtBluetooth8(), 0 );
+    if( featTest->IsSupported( KFeatureIdProtocolWlan ) )    	
+    	AddTextL( aEnumeratedTextArray, aPoppedUpTextArray, KEcmtWlan8(), 1 );    	
+    if( featTest->IsSupported( KFeatureIdUsb ) )
+    	AddTextL( aEnumeratedTextArray, aPoppedUpTextArray, KEcmtUsb8(), 2 );
+    
+    // Now we have to check do we have default bearer stored, if so modify 
+    // it to be the selected one
+    HBufC* defaultBearer = DefaultBearerL();
+    
+    if( defaultBearer )
+        {        
+        for( TInt i=0; i<aEnumeratedTextArray.Count(); ++i )
+            {            
+            CAknEnumeratedText* text = aEnumeratedTextArray.At(i);
+            TPtrC value = text->Value()->Des();
+            if( defaultBearer->Compare( value ) == KErrNone )
+                {
+                text->SetEnumerationValue(0);                  
+                }
+            else
+                text->SetEnumerationValue(1);
+            }
+        delete defaultBearer;
+        }
+    
+    CleanupStack::PopAndDestroy( featTest );
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Adds item to the setting item arrays.
+// ---------------------------------------------------------------------------
+//
+void CEcmtGuiSettingDataHandler::AddTextL( 
+                        CArrayPtr <CAknEnumeratedText>& aEnumeratedTextArray, 
+                        CArrayPtr <HBufC>& aPoppedUpTextArray,
+                        const TDesC8& aText,
+                        TInt aIndex )
+    {   	
+    CAknEnumeratedText* enumeratedText = NULL;    
+    //Convert from 8bit to 16bit
+    HBufC* enumerated16 = HBufC::NewLC( aText.Length() );
+    enumerated16->Des().Copy( aText );    
+    //Ownership of numerated16 is given to enumeratedText
+    enumeratedText = new (ELeave) CAknEnumeratedText( aIndex, enumerated16); 
+    aEnumeratedTextArray.AppendL(enumeratedText);     
+    CleanupStack::Pop( enumerated16 );
+    
+    HBufC* popped16 = enumerated16->AllocLC();
+    //Ownership of popped16 is given to aPoppedUpTextArray
+    aPoppedUpTextArray.AppendL(popped16);
+    CleanupStack::Pop( popped16 );
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves the default bearer from file c:\Data\EcmtBearer.dat. 
+// Allocates title from heap.
+// ---------------------------------------------------------------------------
+//
+HBufC* CEcmtGuiSettingDataHandler::DefaultBearerL() const
+	{	        	
+    RFs fsSession;
+    User::LeaveIfError( fsSession.Connect() ); 
+    CleanupClosePushL( fsSession );
+    
+    RFile file;
+    
+    TInt err=file.Open( fsSession, 
+                        KEcmtDefBearerFileName, 
+                        EFileStreamText|EFileRead|EFileShareAny );
+                        
+    if( err != KErrNone )
+    	{
+    	CleanupStack::PopAndDestroy();
+    	return NULL;
+    	}
+    	
+    CleanupClosePushL( file );
+    TBuf8<20> bearerData;      
+    file.Read(0, bearerData);
+    
+    CleanupStack::PopAndDestroy( 2 ); // fsSession and file
+    
+    TInt length = bearerData.Length();    
+    if( length < 1 )
+        return NULL;
+        
+    //Remove iapId for WLAN bearer, if existing
+    TInt offset = bearerData.Find( KLinebreak8() );
+    
+    HBufC* buffer = NULL;
+    if( offset != KErrNotFound )
+        {
+        //WLAN is the default
+        TInt newLength = length-( length-offset );
+        buffer = HBufC::NewL( newLength );
+        buffer->Des().Copy( bearerData.Left( newLength ) );
+        }
+    else
+        {
+        //USB or bluetooth is the default
+        buffer = HBufC::NewL( length );
+        buffer->Des().Copy( bearerData );
+        }        
+      
+    return buffer;
+	}
+
+// ---------------------------------------------------------------------------
+// Getter for WLAN internet accesspoints. Gets WLAN IAP titles and database
+// record IDs from Symbian comms database.
+// ---------------------------------------------------------------------------
+//
+TInt CEcmtGuiSettingDataHandler::WlanIAPIDsL( CDesCArray& aIAP, 
+                                                RArray<TUint32>& aId )
+    {
+    CCommsDatabase* commDB = CCommsDatabase::NewL( EDatabaseTypeIAP );
+    CleanupStack::PushL( commDB );
+
+    // Initialize the view
+    CCommsDbTableView* commDBView = commDB->OpenTableLC( TPtrC( IAP ) );  
+    
+    User::LeaveIfError(commDBView->GotoFirstRecord());
+      
+    // Iterate thru all the records and add only WLAN bearers to the list 
+    do {
+        HBufC* bearerType = 
+                commDBView->ReadLongTextLC( TPtrC(IAP_BEARER_TYPE) );
+     
+        if( bearerType->Des().Compare( TPtrC(LAN_BEARER) ) == KErrNone )
+            {
+            // Title of the IAP
+            HBufC* iapName = 
+                    commDBView->ReadLongTextLC( TPtrC(COMMDB_NAME) );
+            
+            // Record ID of the IAP
+            TUint32 id(0);
+            commDBView->ReadUintL( TPtrC(COMMDB_ID), id );  
+            aId.Append( id );   
+            aIAP.AppendL( *iapName );  
+           
+            CleanupStack::PopAndDestroy( iapName );   
+            }             
+        CleanupStack::PopAndDestroy( bearerType );
+        }
+    while(KErrNone == commDBView->GotoNextRecord());
+    
+    // Pop and destroy the IAP View
+    CleanupStack::PopAndDestroy(commDBView);
+
+    // Pop and destroy the database
+    CleanupStack::PopAndDestroy(commDB);
+    
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// Setter for iSelectedCommsDbId. This commsDb recordID is stored to file 
+// in SaveSelectionL, if user has selected WLAN.
+// ---------------------------------------------------------------------------
+//
+void CEcmtGuiSettingDataHandler::
+                SetSelectedWLANIAPCommsDbId( TUint32 aSelectedCommsDbId )
+    {
+    iSelectedCommsDbId = aSelectedCommsDbId;
+    }
+
+// ---------------------------------------------------------------------------
+// Saves user selection to the file c:\Data\EcmtBearer.dat. It saves the 
+// title of connection and WLAN accespoint database record id, if WLAN is 
+// selected.
+// ---------------------------------------------------------------------------
+//    
+TInt CEcmtGuiSettingDataHandler::SaveSelectionL( const TDesC& aSelection )
+    {
+    //Get selected item, modify it to 8-bit
+    HBufC8* selItem = HBufC8::NewLC( aSelection.Length() );
+    selItem->Des().Copy( aSelection );
+    
+    RFs fsSession;
+    User::LeaveIfError( fsSession.Connect() ); 
+    CleanupClosePushL( fsSession );
+
+    RFile file;
+    TInt err=file.Replace( fsSession, KEcmtDefBearerFileName, 
+                                        EFileStreamText|
+                                        EFileWrite|
+                                        EFileShareAny );
+    if( err != KErrNone )
+    	{    	
+    	CleanupStack::PopAndDestroy( 2 ); // selItem, fsSession
+       	return err;
+    	}
+    CleanupClosePushL( file );
+    
+    if( selItem->Des().Compare( KEcmtBluetooth8() ) == KErrNone )
+        {
+        //Bluetooth bearer
+    	file.Write( KEcmtBluetooth8() );
+    	}
+    else if( selItem->Des().Compare( KEcmtWlan8() ) == KErrNone )
+    	{
+    	//WLAN bearer
+    	file.Write( KEcmtWlan8() );
+    	//Separate bearer name with line break
+        file.Write( KLinebreak8() );
+      
+        _LIT8( KFormat, "%d" );
+        TBuf8<5> intString;
+        intString.Format( KFormat, iSelectedCommsDbId );
+        file.Write( intString );             
+    	}
+   	else if( selItem->Des().Compare( KEcmtUsb8() ) == KErrNone )
+       	{
+       	//USB bearer
+       	file.Write( KEcmtUsb8() );
+       	}
+    else
+        {
+        // Not supported bearer
+        CleanupStack::PopAndDestroy( 3 );
+        return KErrNotSupported;
+        }
+         
+    CleanupStack::PopAndDestroy( 3 );
+    
+    return KErrNone;
+    }