locationsystemui/locationsysui/locsysuiview/src/locsettingsuipluginloader.cpp
branchRCL_3
changeset 44 2b4ea9893b66
parent 42 02ba3f1733c6
child 45 6b6920c56e2f
--- a/locationsystemui/locationsysui/locsysuiview/src/locsettingsuipluginloader.cpp	Thu Aug 19 10:20:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Manages the E-Comm Plugin handling for the Settings UI.
-*
-*/
-
-
-// System Include
-#include <ecom/implementationinformation.h>
-#include <aknViewAppUi.h>
-	
-// User Include
-#include "locsettingsuipluginloader.h"
-#include "locationsettings.h"
-#include "locsettingsui.h"
-#include "locsettingsuiparams.h"
-#include "locsettingsuiecomnotifier.h"
-
-
-// Global Constants
-
-//Forward declaration. Function for sorted ordering of settings ui plug-ins
-static TInt SettingsDescOrdering( const CLocationSettings& aSettings1, 
-		  					   	  const CLocationSettings& aSettings2 );
-		  					   	  
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CLocSettingsUiPluginLoader::CLocSettingsUiPluginLoader
-// Overloaded Constructor
-//
-// ---------------------------------------------------------------------------
-//
-CLocSettingsUiPluginLoader::CLocSettingsUiPluginLoader( CAknViewAppUi&	aAppUi )
-	:CActive( EPriorityStandard ),
-	iAppUi( aAppUi )
-	{
-	// Add self to the Active scheduler
-	CActiveScheduler::Add( this );			
-	}
-
-// ---------------------------------------------------------------------------
-// CLocSettingsUiPluginLoader::~CLocSettingsUiPluginLoader
-// Destructor
-//
-// ---------------------------------------------------------------------------
-//
-CLocSettingsUiPluginLoader::~CLocSettingsUiPluginLoader()
-	{
-	Cancel();
-	}	
-					 
-// ---------------------------------------------------------------------------
-// CLocSettingsUiPluginLoader* CLocSettingsUiPluginLoader::NewL
-// Creates an instance of the Settings UI Plug-in Loader
-//
-// @param  aAppUi				    	App Ui Reference
-// @return CLocSettingsUiPluginLoader*	Reference to the instantiated class 
-// ---------------------------------------------------------------------------  
-//
-CLocSettingsUiPluginLoader* CLocSettingsUiPluginLoader::NewL( 
-                                                CAknViewAppUi&	aAppUi )
-	{
-    CLocSettingsUiPluginLoader* self = 
-                CLocSettingsUiPluginLoader::NewLC( aAppUi );
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-// ---------------------------------------------------------------------------
-// CLocSettingsUiPluginLoader* CLocSettingsUiPluginLoader::NewLC
-// Creates an instance of the Settings UI Plug-in Loader
-//
-// @param  aObserver				Observer to the CLocSettingsUiPluginLoader class
-// @param  aAppUi					App Ui Reference
-// @return CLocSettingsUiPluginLoader*	Reference to the instantiated class 
-// ---------------------------------------------------------------------------  
-//
-CLocSettingsUiPluginLoader* CLocSettingsUiPluginLoader::NewLC( 
-								                CAknViewAppUi&	aAppUi )
-	{
-    CLocSettingsUiPluginLoader* self = new(ELeave) CLocSettingsUiPluginLoader( aAppUi );
-	CleanupStack::PushL(self);
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// void CLocSettingsUiPluginLoader::CreateAvailableSettingsUisL  
-// Creates all the settings UI currently available in the system. The 
-// user if this interface should ensure that he passes an empty
-// Settings Array structure.
-// 
-// @param aDescArray 		 Array of Settings UI.
-// --------------------------------------------------------------------------- 
-//
-void CLocSettingsUiPluginLoader::CreateAvailableSettingsUisL( 
-                                RPointerArray<CLocationSettings>&   aSettingsArray )
-	{
-	// List all the available implementations for KSettingsUiInterfaceUID
-	RImplInfoPtrArray	impInfoArray;
-	
-	REComSession::ListImplementationsL( KSettingsUiInterfaceUID,
-										impInfoArray );
-	for ( TInt impInfoArrayIterator = 0; 
-		 	   impInfoArrayIterator < impInfoArray.Count();
-		 	   impInfoArrayIterator ++ )
-		{
-		// Obtain the Implementation UID
-		CImplementationInformation* info = impInfoArray[impInfoArrayIterator];
-        TUid implUid = info->ImplementationUid();
-        
-        // Create the Location Settings UI class which inturn creates the
-        // sub-settings plug-in
-             			
-        CLocationSettings* settings = NULL;
-        TRAPD( error, settings = CLocationSettings::NewL( implUid, iAppUi ););
-        if( !error )
-            {
-            // Insert them in order. The order is specified by the SettingsDescOrdering
-    		// function			
-    		error = aSettingsArray.InsertInOrder( settings,
-    											  SettingsDescOrdering );
-    		if ( error )
-    			{
-    			// Issue with creating the Settings UI component. Delete it
-    			delete settings;   			
-    			}
-            }
-		}
-    // Destroy the implementation info array obtained from ECom Session
-	impInfoArray.ResetAndDestroy();	
-	}
-
-// ---------------------------------------------------------------------------
-// void CLocSettingsUiPluginLoader::CreateSettingsUiL
-// Creates the Settings UI and the corresponding description entry. This
-// Location Settings object. The created object is appended to the existing
-// list and a reference to it returned.
-// 
-// @param aImplementationUid The Implementation UID of the plug-in that
-//                           has to be created
-// @param aSettingsArray	 Array of Settings UIs
-// @return CLocationSettings& Reference to the created object. The ownership is not
-//                            by the return value.
-// ---------------------------------------------------------------------------
-//
-CLocationSettings& CLocSettingsUiPluginLoader::CreateSettingsUiL( 
-                    TUid                                 aImplementationUid,
-                    RPointerArray<CLocationSettings>&    aSettingsArray )
-    {
-    // Create the plug in
-    
-	// The Function does not check for the existence of the plug-in
-	// in the implementation array.
-	
-    // The function is not trapped. If there is a leave then the function would
-    // leave with the error code generated. The calling function has to take 
-    // care of the non-existence of the plug-in
-	
-	CLocationSettings* settings = CLocationSettings::NewLC( aImplementationUid,
-	                                                        iAppUi );
-    			                                                    
-	// Insert them in order. The order is specified by the SettingsDescOrdering
-	// function			
-	User::LeaveIfError(  aSettingsArray.InsertInOrder( settings,
-											           SettingsDescOrdering ));
-	CleanupStack::Pop( settings );
-		
-    // Return the reference to the Settings UI
-    return *settings;			
-    }
-						        
-// ---------------------------------------------------------------------------
-// void CLocSettingsUiPluginLoader::UpdateAvailableSettingsUisL
-// Updates the Settings UI list and the description structures. The new
-// additions are appened in-order. The interface does not
-// delete any instances if they are not in the current implementation 
-// list
-// 
-// @param aSettingsArray     Array of Settings UIs.
-// @param aInitParams		 Opaque Initialization parameters that are 
-// 							 passed onto the Settings UI. The PluginLoader 
-// 							 does not understand these parameters
-// ---------------------------------------------------------------------------
-//
-void CLocSettingsUiPluginLoader::UpdateAvailableSettingsUisL( 
-						RPointerArray<CLocationSettings>&    aSettingsArray )
-	{
-		// List all the available implementations for KSettingsUiInterfaceUID
-	RImplInfoPtrArray	impInfoArray;
-	
-	REComSession::ListImplementationsL( KSettingsUiInterfaceUID,
-										impInfoArray );
-
-	for ( TInt impInfoArrayIterator = 0; 
-		 	   impInfoArrayIterator < impInfoArray.Count();
-		 	   impInfoArrayIterator ++ )
-		{
-		// Obtain the Implementation UID
-		CImplementationInformation* info = impInfoArray[impInfoArrayIterator];
-        TUid implUid = info->ImplementationUid();
-        
-        // Search if the plug-in already exists.
-        TInt index = KErrNotFound;
-        // Iterate through the Settings UI array
-		for ( TInt count = 0; count < aSettingsArray.Count(); count++ )
-		{
-		CLocationSettings* currentItem = aSettingsArray[count];
-		// If the Settings object for the Implementation UID already
-		// exisits then dont do anything
-		if ( implUid == currentItem->ImplementationUid())
-			{
-			index = count;
-			break;
-			}
-		}
-        
-        // If the index value is not set Create the plug in
-        if ( KErrNotFound == index )
-        	{
-            // Create the Location Settings UI class which inturn creates the
-            // sub-settings plug-in
-             			
-            CLocationSettings* settings = NULL;
-            TRAPD( error, settings = CLocationSettings::NewL( implUid, iAppUi ););
-            if( !error )
-                {
-                // Insert them in order. The order is specified by the SettingsDescOrdering
-    		    // function			
-    	        error = aSettingsArray.InsertInOrder( settings,
-    												  SettingsDescOrdering );
-    		    if ( error )
-    			    {
-    			    // Issue with creating the Settings UI component. Delete it
-    			    delete settings;   			
-    			    }
-                }	
-        	}
-		}
-	
-	impInfoArray.ResetAndDestroy();	
-	}
-
-// --------------------------------------------------------------------------- 
-// Inherited from CActive 
-// ---------------------------------------------------------------------------
-//
-void CLocSettingsUiPluginLoader::RunL()
-	{
-	if ( iStatus.Int() != KErrCancel )
-		{
-		// Restart the Notification request inorder to listen for future 
-		// notifications
-		StartEComNotifyL();
-		// Notify the state change to the observer
-		if( iNotifier )
-		    {
-		    iNotifier->EComSessionStateChanged( iStatus.Int());
-		    }		
-		}
-	}
-
-// --------------------------------------------------------------------------- 
-// Inherited from CActive 
-// ---------------------------------------------------------------------------
-//
-void CLocSettingsUiPluginLoader::DoCancel()
-	{
-	if ( iSession )
-		{
-		iSession->CancelNotifyOnChange( iStatus );
-		iSession->Close();
-		iSession = NULL;
-		}		
-	}
-
-// --------------------------------------------------------------------------- 
-// Inherited from CActive 
-// ---------------------------------------------------------------------------
-//
-TInt CLocSettingsUiPluginLoader::RunError( TInt /* aError */)
-	{
-	return KErrNone;
-	}
-
-// --------------------------------------------------------------------------- 
-// Initiates a notify request on the ECom Session
-//
-// @param aSettingsNotifer  Notifier for communication of changes in the 
-//                          Ecom loading and unloading for sub-settings
-//                          plug-ins 
-// ---------------------------------------------------------------------------
-//
-void CLocSettingsUiPluginLoader::StartEComNotifyL( 
-                    MLocSettingsUiEcomNotifer*   aNotifier )
-	{
-	// Set the notifier if its valid
-	if( aNotifier )
-	    {
-	    iNotifier = aNotifier;
-	    }
-	
-	// If the notifier is present then initaite a request    
-    // Open the ECom Session handle if its not been opened
-    if( !iSession )
-        {
-        iSession = &( REComSession::OpenL());
-        }
-	
-	// Issue a new request	
-	if ( !IsActive())
-		{
-		// Set the notifier 
-		iSession->NotifyOnChange( iStatus );	
-		
-		SetActive();
-		}
-	}
-        
-// ---------------------------------------------------------------------------
-//
-// Stop the outstanding EComNotification
-// ---------------------------------------------------------------------------
-//
-void CLocSettingsUiPluginLoader::StopEComNotify()
-    {
-    // Cancel any outstanding request
-    Cancel();
-    }
-        	
-// ---------------------------------------------------------------------------
-// static TInt SettingsDescOrdering
-// Ordering function for inserting the elements into the List box array.
-// The ordering is done first based on the priority. 
-//
-// @param CLocationSettings& First Settings Element
-// @param CLocationSettings& Second Settings Element
-// @return 1. zero, if the two objects are equal.
-//
-//		   2. a negative value, if the first object is less than the second.
-//
-// 		   3. a positive value, if the first object is greater than the second.
-// 
-// ---------------------------------------------------------------------------	
-TInt SettingsDescOrdering( const CLocationSettings& aSettings1, 
-		  				   const CLocationSettings& aSettings2 )
-    {
-    CLocationSettings* settings1 = const_cast< CLocationSettings*>(&aSettings1);
-    CLocationSettings* settings2 = const_cast< CLocationSettings*>(&aSettings2);
-    return ( settings1->Priority() - settings2->Priority());
-	}