--- 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());
- }