diff -r 000000000000 -r b26acd06ea60 sdkcreationmw/sdkruntimes/GuiLauncher/src/EcmtGuiSettingDataHandler.cpp --- /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 +#include +#include +#include + +#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& aEnumeratedTextArray, + CArrayPtr& 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; iValue()->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 & aEnumeratedTextArray, + CArrayPtr & 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& 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; + }