--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/Ecom/src/btuipluginman.cpp Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,156 @@
+/*
+* 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: Find and load plugin
+*
+*/
+
+
+#include <aknview.h>
+#include "btuipluginman.h"
+#include "debug.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CBTUIPluginMan* CBTUIPluginMan::NewL( CAknViewAppUi* aAppUi )
+ {
+ CBTUIPluginMan* self = new( ELeave ) CBTUIPluginMan( aAppUi );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CBTUIPluginMan::~CBTUIPluginMan()
+ {
+ TRACE_FUNC_ENTRY
+
+ iPluginInfoArray.ResetAndDestroy();
+ iPluginInfoArray.Close();
+ iPluginArray.Reset();//Do not destroy - Plugins are owned by iAppUi
+
+ TRACE_FUNC_EXIT
+ }
+
+// ---------------------------------------------------------------------------
+// Check if availability of some plug-in
+// ---------------------------------------------------------------------------
+//
+TBool CBTUIPluginMan::IsPluginAvaiable(TBTDeviceClass aDeviceClassInfo)
+ {
+ for( TInt i=0; i<iPluginArray.Count(); i++ )
+ {
+ TBTDeviceClass devClass = iPluginArray[i]->GetCOD();
+ if( devClass.MajorDeviceClass() == aDeviceClassInfo.MajorDeviceClass() &&
+ devClass.MinorDeviceClass() == aDeviceClassInfo.MinorDeviceClass() )
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// Get the setting view from PluginArrary based on the COD
+// ---------------------------------------------------------------------------
+//
+CAknView* CBTUIPluginMan::GetSettingViewL(TBTDevice& aDevice)
+ {
+ for (TInt ii = 0; ii < iPluginArray.Count(); ii++ )
+ {
+ TBTDeviceClass tmpCOD = iPluginArray[ii]->GetCOD();
+ //Currently one device - one view - one plugin,
+ //in future maybe other device properties will decide on getting the view.
+ if(aDevice.iDeviceClass.MajorDeviceClass() == tmpCOD.MajorDeviceClass() &&
+ aDevice.iDeviceClass.MinorDeviceClass() == tmpCOD.MinorDeviceClass())
+ {
+ return (CAknView*)iPluginArray[ii];
+ }
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+CBTUIPluginMan::CBTUIPluginMan( CAknViewAppUi* aAppUi )
+ : iAppUi(aAppUi)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CBTUIPluginMan::ConstructL()
+ {
+ LoadPluginsL();
+ }
+
+// ---------------------------------------------------------------------------
+// Load ECom plug-ins
+// ---------------------------------------------------------------------------
+//
+void CBTUIPluginMan::LoadPluginsL()
+ {
+ TRACE_FUNC_ENTRY
+
+ REComSession::ListImplementationsL( KCBtuiPluginInterfaceUid, iPluginInfoArray );
+ TInt count = iPluginInfoArray.Count();
+ TRACE_INFO( ( _L( "[BTUI]\t CBTUIPluginMan::LoadSettingPluginL() PluginArray count=%d" ), count) )
+
+ iPluginArray.Reset();
+ for ( TUint ii = 0 ; ii < count; ++ii )
+ {
+ CImplementationInformation* impl = iPluginInfoArray[ii];
+ //Only append the plugins which datatype() is for HID devices.
+ if(impl->DataType().Length())
+ {
+ TLex8 lex( impl->DataType() );
+ TUint major = 0, minor = 0;
+ TInt err1 = lex.Val(major, EHex);
+ lex.SkipSpace();
+ TInt err2 = lex.Val(minor, EHex);
+ if( !err1 && !err2)
+ {
+ TRACE_INFO( ( _L( "[BTUI]\t CBTUIPluginMan::LoadSettingPluginL() MajorCOD=%d MinorCOD=%d" ), major, minor) )
+ TBTDeviceClass cod(0x00, major, minor);
+
+ CBtuiPluginInterface* plugin = NULL;
+ TRAPD( ret, plugin = CBtuiPluginInterface::NewL( impl->ImplementationUid() ) );
+ if( !ret )
+ {
+ CleanupStack::PushL(plugin);
+
+ // Transfer the ownership to AppUi
+ iAppUi->AddViewL( (CAknView*)plugin );
+ plugin->SetCOD(cod);
+ iPluginArray.AppendL(plugin);
+ CleanupStack::Pop(plugin);
+ }
+ }
+ }
+ }
+
+ TRACE_FUNC_EXIT
+ }
+