locationcentre/lcservice/src/lclocationappinfo.cpp
changeset 0 522cd55cc3d7
--- /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
+