--- /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 <gulicon.h> // Gul Icon
+#include <fbs.h> // 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
+