diff -r 000000000000 -r 522cd55cc3d7 locationcentre/lcservice/src/lclocationappinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationcentre/lcservice/src/lclocationappinfo.cpp Tue Feb 02 00:16:03 2010 +0200 @@ -0,0 +1,514 @@ +/* +* 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: Location Application Information structures. +* +*/ + + +// SYSTEM INCLUDES +#include // Gul Icon +#include // Bitmap + +// USER INCLUDES +#include "lclocationappinfo.h" +#include "lcnativeapps.hrh" +#include "lcerrors.h" +#include "lciconloader.h" +#include "lcipcparams.h" + +// CONSTANT DEFINTIONS +// Maximum value that the UID field can take in S60 +const TUint32 KUidMaxValue = 0xFFFFFFFF; + +// ----- Member funtions for CLcLocationAppInfo ------------------ + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo::CLcLocationAppInfo +// --------------------------------------------------------------------------- +// +CLcLocationAppInfo::CLcLocationAppInfo( + const CLcLocationAppInfo& aLCAppInfo ) + { + // C++ Copy constructor. No allocations or functions which can Leave + // should be called from here. + + // Set only those parameters which dont require memory allocation. + iLaunchMode = aLCAppInfo.iLaunchMode; + iSystemCharacteristics = aLCAppInfo.iSystemCharacteristics; + iAppCharacteristics = aLCAppInfo.iAppCharacteristics; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo::CLcLocationAppInfo +// --------------------------------------------------------------------------- +// +CLcLocationAppInfo::CLcLocationAppInfo() + :iLaunchMode( EDefaultMode ) + { + // C++ Default constructor. No allocations or functions which can Leave + // should be called from here. + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo::~CLcLocationAppInfo +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo::~CLcLocationAppInfo() + { + // C++ Destructor. Free all resources associated with this class. + + // Delete the buffer containing the Identifier + delete iId; + + // Delete the buffer containing the name of the Location application + delete iApplicationName; + + // Delete the Application Icon + delete iApplicationIconData; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfo::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo* CLcLocationAppInfo::NewL() + { + CLcLocationAppInfo* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfo::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo* CLcLocationAppInfo::NewLC() + { + // Symbian Two phased constructor. Leaves the object on the Clean-up + // stack. + CLcLocationAppInfo* self = + new ( ELeave )CLcLocationAppInfo(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfo::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo* CLcLocationAppInfo::NewL( + const CLcLocationAppInfo& aLocAppInfo ) + { + CLcLocationAppInfo* self = NewLC( aLocAppInfo ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfo::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo* CLcLocationAppInfo::NewLC( + const CLcLocationAppInfo& aLocAppInfo ) + { + // Symbian Two phased constructor. Leaves the object on the Clean-up + // stack. + CLcLocationAppInfo* self = + new ( ELeave )CLcLocationAppInfo( aLocAppInfo ); + CleanupStack::PushL( self ); + self->ConstructL( aLocAppInfo ); + return self; + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::ConstructL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::ConstructL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::ConstructL( const CLcLocationAppInfo& aLCAppInfo ) + { + // Copy the Identifier from the Argument Location Application App info. + iId = aLCAppInfo.Id().AllocL(); + + // Copy the Name from the Argument Location Application App info. + iApplicationName = aLCAppInfo.Name().AllocL(); + + // Create the Icon related objects. + if ( aLCAppInfo.iApplicationIconData ) + { + iApplicationIconData = aLCAppInfo.iApplicationIconData->Des().Alloc(); + } + iApplicationIconType = aLCAppInfo.iApplicationIconType; + iIconId = aLCAppInfo.iIconId; + } + +// --------------------------------------------------------------------------- +// TUint32 CLcLocationAppInfo::IdL +// --------------------------------------------------------------------------- +// +EXPORT_C TPtrC CLcLocationAppInfo::Id() const + { + // Check whether the UID exists, incase it doesnt exist then return a + // NULL string. + if( !iId ) + { + return TPtrC(); + } + + // Return the UID. + return *iId; + } + +// --------------------------------------------------------------------------- +// TDesC& CLcLocationAppInfo::NameL +// --------------------------------------------------------------------------- +// +EXPORT_C TPtrC CLcLocationAppInfo::Name() const + { + // Check whether the application name exists, incase it doesnt exist then + // return a NULL string. + if( !iApplicationName ) + { + return TPtrC(); + } + // Return the Application Name. + return *iApplicationName; + } + +// --------------------------------------------------------------------------- +// CGulIcon& CLcLocationAppInfo::IconL +// --------------------------------------------------------------------------- +// +EXPORT_C CGulIcon* CLcLocationAppInfo::IconL() const + { + CGulIcon* icon = NULL; + // If there is no Icon file present, then we have to load the default + // Icon for the Application + if ( iApplicationIconData ) + { + switch( iApplicationIconType ) + { + case CLcAppInfo::EIconfromApp: + { + // Since the request is for a Native S60 application, the Identifer + // contains an UID. Obtain it using Lexer + TLex lexer( iApplicationIconData->Des()); + TUint32 uidValue; + User::LeaveIfError( lexer.BoundedVal( uidValue, EHex, KUidMaxValue )); + + // Obtain the Location Icon. + icon = LcIconLoader::LoadApplicationIconL( TUid::Uid( uidValue )); + + break; + } + case CLcAppInfo::EMifFile: + { + icon = LcIconLoader::LoadMifFileIconL( iApplicationIconData->Des(), + iIconId ); + break; + } + default: + { + icon = LcIconLoader::LoadDefaultIconL(); + break; + } + } + } + else + { + icon = LcIconLoader::LoadDefaultIconL(); + } + return icon; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo::TLcLaunchMode +// CLcLocationAppInfo::LocationApplicationIconL +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo::TLcLaunchMode CLcLocationAppInfo::LaunchMode() const + { + return iLaunchMode; + } + +// --------------------------------------------------------------------------- +// TUint32 CLcLocationAppInfo::SystemCharacteristics +// --------------------------------------------------------------------------- +// +EXPORT_C TUint32 CLcLocationAppInfo::SystemCharacteristics() const + { + return iSystemCharacteristics; + } + +// --------------------------------------------------------------------------- +// TUint32 CLcLocationAppInfo::ApplicationCharacteristics +// --------------------------------------------------------------------------- +// +EXPORT_C TUint32 CLcLocationAppInfo::ApplicationCharacteristics() const + { + return iAppCharacteristics; + } + +// --------------------------------------------------------------------------- +// TUint32 CLcLocationAppInfo::SetIdL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetIdL( const TDesC& aId ) + { + // Incase, the UID already exists then Leave with KErrAlreadyExists + if( iId ) + { + User::Leave( KErrAlreadyExists ); + } + + // Copy the Identifier from the Argument Location Application App info. + iId = aId.AllocL(); + + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::SetNameL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetNameL( const TDesC& aName ) + { + // Incase, the application name exists then Leave with KErrAlreadyExists. + if( iApplicationName ) + { + User::Leave( KErrAlreadyExists ); + } + + // Copy the Name from the Argument Location Application App info. + iApplicationName = aName.AllocL(); + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::SetIconL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetIconL( TInt aIconType, + const TDesC& aIconData, + TInt aIconId ) + { + // Incase, the application icon exists then Leave with KErrAlreadyExists. + if( iApplicationIconData ) + { + User::Leave( KErrAlreadyExists ); + } + + if( !aIconData.Length()) + { + User::Leave( KErrArgument ); + } + + // Create the Icon related objects. + iApplicationIconData = aIconData.Alloc(); + iApplicationIconType = aIconType; + iIconId = aIconId; + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::SetLocationApplicationLaunchMode +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetLaunchMode( + CLcLocationAppInfo::TLcLaunchMode aLaunchMode ) + { + iLaunchMode = aLaunchMode; + } + + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::SetSystemCharacteristics +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetSystemCharacteristics( + TUint32 aSysCharacteristics ) + { + iSystemCharacteristics = aSysCharacteristics; + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfo::SetApplicationCharacteristics +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfo::SetApplicationCharacteristics( + TUint32 aAppCharacteristics ) + { + iAppCharacteristics = aAppCharacteristics; + } + +// ----- Member funtions for CLcLocationAppInfoArray ------------- + +// --------------------------------------------------------------------------- +// CLcLocationAppInfoArray::CLcLocationAppInfoArray +// --------------------------------------------------------------------------- +// +CLcLocationAppInfoArray::CLcLocationAppInfoArray() + { + // C++ Default constructor. No allocations or functions which can Leave + // should be called from here. + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfoArray::~CLcLocationAppInfoArray +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfoArray::~CLcLocationAppInfoArray() + { + // C++ Destructor. Free all resources associated with this class. + + // Delete all the the associated Location application information objects. + while ( iAppInfoArray.Count() > 0 ) + { + // Remove the first item + CLcLocationAppInfo* item = iAppInfoArray[0]; + iAppInfoArray.Remove( 0 ); + + // Delete the element + delete item; + item = NULL; + } + iAppInfoArray.Reset(); + iAppInfoArray.Close(); + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfoArray* +// CLcLocationAppInfoArray::NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfoArray* + CLcLocationAppInfoArray::NewL() + { + CLcLocationAppInfoArray* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfoArray* +// CLcLocationAppInfoArray::NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfoArray* + CLcLocationAppInfoArray::NewLC() + { + // Symbian Two phased constructor. Leaves the object on the Clean-up + // stack. + CLcLocationAppInfoArray* self = + new ( ELeave )CLcLocationAppInfoArray(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfoArray::ConstructL +// --------------------------------------------------------------------------- +// +void CLcLocationAppInfoArray::ConstructL() + { + // Second phase of the two phase constructor. + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfoArray::Count +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CLcLocationAppInfoArray::Count() const + { + // Return the number of elements in the Application information array. + return iAppInfoArray.Count(); + } + +// --------------------------------------------------------------------------- +// void CLcLocationAppInfoArray::AppendL +// --------------------------------------------------------------------------- +// +EXPORT_C void CLcLocationAppInfoArray::AppendL( + CLcLocationAppInfo* aLCAppInfo ) + { + // Check if the element passed as an argument is NULL. If its NULL, then + // Leave with KErrArgument + // Not using User::LeaveIfNull because in that case, the leave would happen + // with KErrNoMemory which conveys the wrong behaviour. + if( !aLCAppInfo ) + { + User::Leave( KErrArgument ); + } + + // Append the new element into the array; + iAppInfoArray.AppendL( aLCAppInfo ); + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfoArray::RemoveL +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo* CLcLocationAppInfoArray::Remove( TInt aIndex ) + { + // Check if the element requested is out of array bounds + if( aIndex < 0 || aIndex >= iAppInfoArray.Count()) + { + User::Panic( KLcPanicCategory, ELcInvalidIndex ); + } + + // Since, the remove method is expected to return back the reference + // of the element removed, first store the element at the aIndex + // position and return it back + CLcLocationAppInfo* item = iAppInfoArray[ aIndex ]; + iAppInfoArray.Remove( aIndex ); + return item; + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo* CLcLocationAppInfoArray::Reset +// --------------------------------------------------------------------------- +// +EXPORT_C void CLcLocationAppInfoArray::Reset() + { + // Reset the entire array so that its ok for resuse. + iAppInfoArray.ResetAndDestroy(); + } + +// --------------------------------------------------------------------------- +// CLcLocationAppInfo& CLcLocationAppInfoArray:: +// operator[] +// --------------------------------------------------------------------------- +// +EXPORT_C CLcLocationAppInfo& CLcLocationAppInfoArray:: + operator[]( TInt aIndex ) const + { + // Check if the element requested is out of array bounds + if( aIndex < 0 || aIndex >= iAppInfoArray.Count()) + { + User::Panic( KLcPanicCategory, ELcInvalidIndex ); + } + + // Return only a reference of the object. The ownership is not be + // transferred. + return *(iAppInfoArray[ aIndex ]); + } + +// End of File +