locationcentre/lcservice/src/lcserviceimpl.cpp
changeset 15 13ae750350c9
parent 0 522cd55cc3d7
child 17 0f22fb80ebba
--- a/locationcentre/lcservice/src/lcserviceimpl.cpp	Tue Feb 02 00:16:03 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,647 +0,0 @@
-/*
-* 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 Centre API interface.
-*
-*/
-
-
-// SYSTEM INCLUDES
-#include <s32mem.h>
-#include <aknsutils.h>
-#include <gulicon.h>
-#include <aknlists.h>
-#include <aknpopup.h>
-#include <avkon.rsg>
-
-// USER INCLUDES
-#include "lcserviceimpl.h"
-#include "lclocationappfilter.h"
-#include "lcappexitobserver.h"
-#include "lcnotification.h"
-#include "lcapplauncher.h"
-#include "lcipcparams.h"
-#include "lcnotificationao.h"
-#include "lciconloader.h"
-#include "lcsyncoperation.h"
-#include "lcpopuplistbox.h"
-#include "lcdebug.h"
-
-// ----- Member funtions for CLcServiceImpl ---------------------------------
-
-// ---------------------------------------------------------------------------
-// CLcServiceImpl::CLcServiceImpl
-// ---------------------------------------------------------------------------
-//
-CLcServiceImpl::CLcServiceImpl()
-    {
-    // C++ Default constructor. No allocations or functions which can Leave
-    // should be called from here.
-    }
-         
-// ---------------------------------------------------------------------------
-// CLcServiceImpl::~CLcServiceImpl
-// ---------------------------------------------------------------------------
-//
-CLcServiceImpl::~CLcServiceImpl()
-    {
-    // C++ Destructor. Free all resources associated with this class.
-    if ( iPopUp )
-        {
-        iPopUp->CancelPopup();
-        }
-    
-    // Delele the Pop-up list    
-    delete iPopUpListBox;
-    
-    // Delete the Selected ID buffer   
-    delete iSelectedAppId;
-                
-    // Delete filter parameters
-    delete iFilter;
-    
-    // Delete the Application information array
-    iAppArray.Reset();
-    iAppArray.Close();
-
-    // Delete the Notification Active object
-    delete iNotificationAO;
-    
-    // Delete the Application launcher
-    delete iAppLauncher;
-    
-    // If there is an outstanding request then complete the same with KErrCancel.
-    if ( iAsyncOperation )
-    	{
-    	iAsyncOperation->CancelGetLocationApplications();
-    	User::RequestComplete( iStatus, KErrCompletion );
-    	
-    	// We can now delete the asynchronous operation
-    	delete iAsyncOperation;
-    	iAsyncOperation = NULL;
-    	} 
-    	    
-    // Close the session handle. The session handle is active throughout the
-    // lifetime of this class
-    iSession.Close();
-    
-    }
-        
-// ---------------------------------------------------------------------------
-// CLcServiceImpl* CLcServiceImpl::NewL
-// ---------------------------------------------------------------------------
-//
-CLcServiceImpl* CLcServiceImpl::NewL()
-    {
-    CLcServiceImpl* self = NewLC();
-    CleanupStack::Pop( self );
-    return self;         
-    }
-
-// ---------------------------------------------------------------------------
-// CLcServiceImpl* CLcServiceImpl::NewLC
-// ---------------------------------------------------------------------------
-//
-CLcServiceImpl* CLcServiceImpl::NewLC()
-    {
-    // Symbian Two phased constructor. Leaves the object on the Clean-up
-    // stack.
-    CLcServiceImpl* self = 
-                new ( ELeave )CLcServiceImpl();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;         
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CLcServiceImpl::ConstructL()
-    {
-    // Second phase of the two phase constructor.
-    
-    // Open a connection to the Location Centre Server
-    // The connection is opened at the class construction and Closed at the
-    // class deletion. This is done inorder to avoid delays during every
-    // operation
-    User::LeaveIfError( iSession.CreateSession());
-    
-    // Create the Location application launcher.
-    iAppLauncher = CLcAppLauncher::NewL();
-    
-    // Create the Notification AO
-    iNotificationAO = CLcNotificationAO::NewL( *this, iSession );
-    }
-                    
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::LaunchLocationCentreL
-// ---------------------------------------------------------------------------
-//
-void CLcServiceImpl::LaunchLocationCentreL( 
-              const TLcLocationAppFilter&             aLocationAppFilter,
-                    CLcLocationAppInfo::TLcLaunchMode aLaunchMode,                        
-                    MLcAppExitObserver*               aChainedAppExitObserver )
-    {
-    DEBUG("+ CLcServiceImpl::LaunchLocationCentreL")
-    // First select a Location based Application from the list
-    TPtrC identifier = SelectLocationApplicationL( aLocationAppFilter );
-    if ( !identifier.Length())
-        {
-        return;
-        }    
-    
-    // Launch the corresponding application.
-    LaunchLocationApplicationL( identifier, aLaunchMode, aChainedAppExitObserver );
-    DEBUG("- CLcServiceImpl::LaunchLocationCentreL")
-    }
-    
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::LaunchLocationCentreL
-// ---------------------------------------------------------------------------
-//
-void CLcServiceImpl::LaunchLocationCentreL(
-      const RPointerArray<CLcService::CLcLaunchParam>& aIncludeAppArray,
-      MLcAppExitObserver*                              aChainedAppExitObserver )
-    {
-    // Form an array of applications identifiers which can be passed to the
-    // selection function
-    RArray<TPtrC>  appArray;
-    CleanupClosePushL( appArray );
-    
-    TInt count = aIncludeAppArray.Count();    
-    for( TInt i = 0; i < count; i++ )
-        {
-        User::LeaveIfError( appArray.Append( aIncludeAppArray[i]->Id()));
-        }
-        
-    // First select a Location based Application from the list
-    TPtrC identifier = SelectLocationApplicationL( appArray, ETrue );    
-    if ( !identifier.Length())
-        {
-        return;
-        }
-        
-    CLcLocationAppInfo::TLcLaunchMode launchmode = CLcLocationAppInfo::EDefaultMode;
-    // Obtain the launch mode for that application            
-    for ( TInt i = 0; i < count; i++ )
-        {
-        if ( !appArray[i].Compare( identifier ))
-            {
-            launchmode = aIncludeAppArray[i]->LaunchMode();
-            break;
-            }
-        }
-        
-    // Launch the corresponding application.
-    LaunchLocationApplicationL( identifier, launchmode, aChainedAppExitObserver ); 
-    
-    // Pop and Destroy the application array        
-    CleanupStack::PopAndDestroy();
-    }
-    
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::LaunchLocationCentreL
-// ---------------------------------------------------------------------------
-//
-void CLcServiceImpl::LaunchLocationCentreL( 
-                    const RArray<TPtrC>&              aExcludeAppArray,
-                    CLcLocationAppInfo::TLcLaunchMode aLaunchMode,
-                    MLcAppExitObserver*               aChainedAppExitObserver )
-    {
-    // First select a Location based Application from the list
-    TPtrC identifier = SelectLocationApplicationL( aExcludeAppArray, EFalse );
-    if ( !identifier.Length())
-        {
-        return;
-        }    
-    
-    // Launch the corresponding application.
-    LaunchLocationApplicationL( identifier, aLaunchMode, aChainedAppExitObserver );    
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::SelectLocationApplicationL
-// ---------------------------------------------------------------------------
-//
-TPtrC CLcServiceImpl::SelectLocationApplicationL(
-                        const TLcLocationAppFilter&     aLocationAppFilter )
-    {
-    // If the pop-up dialog is currently being displayed then cannot proceed with
-    // the request.
-    if ( iPopUp )
-        {
-        User::Leave( KErrInUse );
-        }
-    
-    iPopupOutStanding = ELcPopupWithFiltering;
-    
-    // Delete any existing filter. This condition should never occur. Just a safe
-    // check.
-    delete iFilter;
-    iFilter = NULL;
-    
-    // Copy the filter contents
-    iFilter = new ( ELeave ) TLcLocationAppFilter( aLocationAppFilter );
-      
-    // Obtain the list of applications from the Location Centre Server and
-    // launch the Location Centre pop-up with that list.    
-    CLcLocationAppInfoArray* array = GetLocationApplicationsL( aLocationAppFilter );
-                                  
-    // The ownership of the array is transferred.
-    TPtrC  appId(KNullDesC());
-    TRAPD( error, appId.Set( SelectLocationApplicationL( array )));
-    
-    // Delete the filter before any operation on the result        
-    delete iFilter;
-    iFilter = NULL;
-     
-    // Handle Error 
-    if ( error )
-        {
-        if ( iPopUp )
-            {
-            iPopUp->CancelPopup();            
-            }
-        iPopUp = NULL;
-        
-        delete iPopUpListBox;
-        iPopUpListBox = NULL;
-        
-        User::Leave( error );        
-        }        
-    return appId;        
-    }
-    
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::SelectLocationApplicationL
-// ---------------------------------------------------------------------------
-//
-TPtrC CLcServiceImpl::SelectLocationApplicationL(
-                            const RArray<TPtrC>&      aAppArray,
-                                  TBool               aIncludeFlag )
-    {
-    // If the pop-up dialog is currently being displayed then cannot proceed with
-    // the request.
-    if ( iPopUp )
-        {
-        User::Leave( KErrInUse );
-        }
-     
-    // Reset and Destroy the existing array.
-    iAppArray.Reset();
-    
-    if ( aIncludeFlag )
-        {
-        iPopupOutStanding = ELcPopupWithSpecifiedApps;
-        }
-    else
-        {
-        iPopupOutStanding = ELcPopupWithoutSpecifedApps;
-        }
-        
-    // Create the array with the new elements
-    TInt count = aAppArray.Count();
-    for ( TInt i = 0; i < count; i++ )
-        {
-        User::LeaveIfError( iAppArray.Append( aAppArray[i] ));
-        }
-        
-    // Obtain the list of applications from the Location Centre Server and
-    // launch the Location Centre pop-up with that list.    
-    CLcLocationAppInfoArray* array = 
-                    LcSyncOperation::GetLocationApplicationsL( iSession,
-                                                               aAppArray,
-                                                               aIncludeFlag );
-                                  
-    // The ownership of the array is transferred.
-    TPtrC  appId(KNullDesC());
-    TRAPD( error, appId.Set( SelectLocationApplicationL( array )));
-    
-    // Reset and destroy the array
-    iAppArray.Reset();
-      
-    // Handle Error    
-    if ( error )
-        {
-        if ( iPopUp )
-            {
-            iPopUp->CancelPopup();            
-            }
-        iPopUp = NULL;
-        
-        delete iPopUpListBox;
-        iPopUpListBox = NULL;
-        
-        User::Leave( error );
-        }
-    return appId;         
-    }
-    
-// ---------------------------------------------------------------------------
-// CLcLocationAppInfoArray* CLcServiceImpl::GetLocationApplicationsL
-// ---------------------------------------------------------------------------
-//    
-CLcLocationAppInfoArray* CLcServiceImpl::GetLocationApplicationsL(
-            const TLcLocationAppFilter&         aLocationAppFilter )
-    {
-    return LcSyncOperation::GetLocationApplicationsL( iSession,
-    												  aLocationAppFilter );
-    }
-    
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::GetLocationApplicationsL
-// ---------------------------------------------------------------------------
-//    
-void CLcServiceImpl::GetLocationApplications(
-                            TRequestStatus&             aStatus,
-                      const TLcLocationAppFilter&       aLocationAppFilter,                            
-                            CLcLocationAppInfoArray*&   aAppInfoArray)
-    {
-    TRAPD( error, GetLocationApplicationsL( aStatus,
-    										aLocationAppFilter,
-    										aAppInfoArray ));
-	if ( error )
-		{
-		TRequestStatus* status = &aStatus;
-		User::RequestComplete( status , error );
-		}
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::CancelGetLocationApplications
-// ---------------------------------------------------------------------------
-//     
-void CLcServiceImpl::CancelGetLocationApplications()
-    {
-    // If there is an outstanding request then complete the same with KErrCancel.
-    if ( iAsyncOperation )
-    	{
-    	iAsyncOperation->CancelGetLocationApplications();
-    	User::RequestComplete( iStatus, KErrCancel );
-    	
-    	// We can now delete the asynchronous operation
-    	delete iAsyncOperation;
-    	iAsyncOperation = NULL;
-    	} 
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::LaunchLocationApplicationL
-// ---------------------------------------------------------------------------
-// 
-void CLcServiceImpl::LaunchLocationApplicationL( 
-                const TDesC&                      aAppIdentifier,
-                CLcLocationAppInfo::TLcLaunchMode aLaunchMode,
-                MLcAppExitObserver*               aChainedAppExitObserver )
-    {
-    DEBUG("+ CLcServiceImpl::LaunchLocationApplicationL" )
-    
-    // Obtain the Location Application Information from Location Centre Server.
-    CLcBasicAppInfo* appInfo = 
-    	LcSyncOperation::GetLocationAppInfoL( iSession, aAppIdentifier );
-    CleanupStack::PushL( appInfo );
-   
-    // Resolve the model in which the Application must be launched.
-    if ( aLaunchMode == CLcLocationAppInfo::EDefaultMode )
-    	{
-    	// Since this is a Local copy we can use the same for handling
-    	// Launch mode changes.
-    	aLaunchMode = 
-    		static_cast<CLcLocationAppInfo::TLcLaunchMode>( appInfo->LaunchMode());
-    	}
-    	    	
-	// Now Launch the Location based Application or Content/Service    	
-    iAppLauncher->LaunchLocationApplicationL( 
-			appInfo->ApplicationType(),
-            appInfo->ApplicationData(),
-            ( aLaunchMode == CLcLocationAppInfo::EStandAloneMode ) ? ETrue : EFalse,
-            appInfo->CommandLineParamters(),
-            aChainedAppExitObserver );
-
-	CleanupStack::PopAndDestroy( appInfo );                                          
-	
-	DEBUG("- CLcServiceImpl::LaunchLocationApplicationL" )                                          
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::SetObserverL
-// ---------------------------------------------------------------------------
-// 
-void CLcServiceImpl::SetObserverL( MLcNotification&     aObserver )
-    {
-    if ( iObserver )
-        {
-        User::Leave( KErrAlreadyExists );
-        }
-    
-    iObserver = &aObserver;
-    
-    iNotificationAO->IssueRequest();
-    }
-
-// ---------------------------------------------------------------------------
-// TInt CLcServiceImpl::RemoveObserver
-// ---------------------------------------------------------------------------
-//                                         
-TInt CLcServiceImpl::RemoveObserver()
-    {
-    if ( !iObserver )
-        {
-        return KErrNotFound;
-        }
-    
-    iObserver = NULL;
-    
-    // If there is a popup outstanding then do nothing. If not remove the
-    // notification
-    if ( !iPopUp )
-        {
-        iNotificationAO->CancelRequest();        
-        }
-        
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::LcStatusChangedL
-// ---------------------------------------------------------------------------
-// 
-void CLcServiceImpl::LcStatusChangedL( TInt aErrorCode )
-    {
-    // If we are displaying the pop-up then we need to transfer the changes
-    // to the pop-up first
-    if ( iPopUp )
-        {
-        // Obtain the new list of applications from the Location Centre Server and
-        // update the Location Centre pop-up with that list.    
-        CLcLocationAppInfoArray* array = NULL;
-        TInt error = KErrNone;
-                        
-        switch( iPopupOutStanding )
-            {
-            case ELcPopupWithFiltering:
-                {                
-                // Incase we face any errors in retrival then we can Ignore the
-                // updations
-                TRAP( error, array = GetLocationApplicationsL( *iFilter ));
-                break;
-                }
-            case ELcPopupWithSpecifiedApps:
-            case ELcPopupWithoutSpecifedApps:            
-                {
-                TBool includeflag = EFalse;
-                if ( iPopupOutStanding == ELcPopupWithSpecifiedApps )
-                    {
-                    includeflag = ETrue;
-                    }
-                    
-                // Incase we face any errors in retrival then we can Ignore the
-                // updations
-                TRAP( error, array = LcSyncOperation::GetLocationApplicationsL( 
-                                                        iSession, iAppArray, includeflag ));
-                break;
-                }
-            default:
-                {
-                break;
-                }
-            }
-           
-        if ( !error && array )
-            {
-            // The ownership of the array is transferred to the list box.
-            TRAP_IGNORE( CleanupStack::PushL( array ); 
-                         iPopUpListBox->UpdateListBoxL( array );
-                         CleanupStack::Pop( array );
-                       );
-            }
-        else if ( KErrNotFound == error )
-            {
-            if ( iPopUp )
-                {
-                iPopUp->CancelPopup();            
-                }
-            iPopUp = NULL;
-            
-            delete iPopUpListBox;
-            iPopUpListBox = NULL;            
-            }
-        }
-        
-    // Notify the client regarding the changes to Location Centre Registry
-    if ( iObserver )
-        {
-        iObserver->LcStatusChangedL( aErrorCode );
-        }   
-    }
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::OperationComplete
-// ---------------------------------------------------------------------------
-// 
-void CLcServiceImpl::OperationComplete( TInt aError )
-	{
-	User::RequestComplete( iStatus, aError );
-	
-	// We can now delete the asynchronous operation
-	delete iAsyncOperation;
-	iAsyncOperation = NULL;	
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::GetLocationApplicationsL
-// ---------------------------------------------------------------------------
-// 	
-void CLcServiceImpl::GetLocationApplicationsL( 
-                TRequestStatus&             aStatus,
-          const TLcLocationAppFilter&       aLocationAppFilter,
-                CLcLocationAppInfoArray*&   aAppInfoArray )
-	{
-    aStatus = KRequestPending;
-    
-    // If there is an asynchronous operation then leave with KErrInUse
-    if ( iAsyncOperation )
-    	{
-    	User::Leave( KErrInUse );
-    	}
-    	
-	// Create the Asynchronous Operations class
-	iAsyncOperation = CLcAsyncOperation::NewL( iSession, *this );
-	    	
-    // Set the status to KRequestPending
-    aStatus = KRequestPending;
-    iStatus = &aStatus;
-    
-    // Issue the request to the ASP
-    iAsyncOperation->GetLocationApplicationsL( aLocationAppFilter,
-    										   aAppInfoArray );	
-	}
-
-// ---------------------------------------------------------------------------
-// void CLcServiceImpl::SelectLocationApplicationL
-// ---------------------------------------------------------------------------
-//
-TPtrC CLcServiceImpl::SelectLocationApplicationL( 
-                                CLcLocationAppInfoArray*   aAppInfoArray )
-    {
-    // The App Info arrays ownership is tranferred to the List. So push it
-    // to the Cleanup stack until the ownership is completely transferred.
-    CleanupStack::PushL( aAppInfoArray );
-    
-    iPopUpListBox = new ( ELeave ) CLcPopupListBox( aAppInfoArray );
-    CleanupStack::Pop( aAppInfoArray );
-    
-    // Construct the popup with the list
-    iPopUp = CAknPopupList::NewL( iPopUpListBox, 
-                                  R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
-                                  AknPopupLayouts::EMenuGraphicWindow );  
-    iPopUpListBox->ConstructL( iPopUp );    
-    // iPopUp->SetBorder( AknBorderId::EAknBorderMenuPopup );								                          
-    
-    // Set up notification events
-    iNotificationAO->IssueRequest();
-                             
-    // Display the pop-up and let user selection.                             
-    TInt popupOk = iPopUp->ExecuteLD();
-    iPopUp = NULL;
-    
-    // Only we are observing for notifications. We dont need it anymore
-    // Cancel it
-    if ( !iObserver )
-        {
-        iNotificationAO->CancelRequest();
-        }
-        
-    if ( popupOk )
-        {
-        delete iSelectedAppId;        
-        iSelectedAppId = NULL;
-                
-        iSelectedAppId = iPopUpListBox->AppInfoId().AllocL();
-        
-        delete iPopUpListBox;
-        iPopUpListBox = NULL;
-        
-        return *iSelectedAppId;
-        }
-    else
-        {
-        delete iPopUpListBox;
-        iPopUpListBox = NULL;
-        
-        return TPtrC();
-        }
-    }
-    
-// End of File