uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewfactory.cpp
branchRCL_3
changeset 29 9a48e301e94b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewfactory.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2008 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:  Implementation of detailsview plugin control container
+ *
+*/
+// settings
+
+#include    <spsettings.h>
+#include    <spentry.h>
+#include    <spproperty.h>
+#include <e32property.h>
+#include <imconnectionproviderconsts.h>
+
+#include "cvimpstdetailsviewpluginfactory.h"
+#include "cvimpstdetailsviewplugin.h"
+
+#include "uiservicetabtracer.h"
+// meco service uid
+#define KMECOIMPLEMENTATIONUID 0x20012423
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::NewL
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPluginFactory* CVIMPSTDetailsViewPluginFactory::NewL()  
+    {
+    CVIMPSTDetailsViewPluginFactory* self = new ( ELeave ) CVIMPSTDetailsViewPluginFactory();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();//self, do not pass the parameter to pop since this is an M Class..
+    return self;    
+    }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::CVIMPSTDetailsViewPluginFactory
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPluginFactory::CVIMPSTDetailsViewPluginFactory():
+    iServiceId( 0 )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewPluginFactory::ConstructL()
+    {
+	TRACER_AUTO;
+
+    RProperty::Define(KMeCoPropertyUid, KMeCoXSPDetailsServiceIdKey, RProperty::EInt,
+                             ECapabilityReadUserData ,ECapabilityWriteUserData); 
+    
+    ReadServiceIdL();
+    if(iServiceIds.Count() == 0)
+        {
+        User::Leave(KErrArgument);
+        }
+
+    }
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::~CVIMPSTDetailsViewPluginFactory
+// ---------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewPluginFactory::~CVIMPSTDetailsViewPluginFactory()
+    {
+    iServiceIds.Reset();
+    iServiceIds.Close();
+    RProperty::Set(KMeCoPropertyUid, KMeCoXSPDetailsServiceIdKey, 0 );  //reset to zero
+    }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::TabViewCount
+// ---------------------------------------------------------------------------
+//
+TInt CVIMPSTDetailsViewPluginFactory::TabViewCount()
+    {
+	TRACER_AUTO;
+    // read the service id from RProperty
+    RProperty::Get(KMeCoPropertyUid, KMeCoXSPDetailsServiceIdKey, iServiceId ); 
+    TInt returnVal = 0;
+    if( iServiceId <= 0 )
+        {     
+        TRACE("iservice <=0");
+        return iServiceIds.Count();
+        }
+    else
+        {     
+        TRACE("iservice > 0"); 
+        iServiceIds.Reset();
+        iServiceIds.Append( iServiceId );
+        returnVal = 1;
+        }
+    return returnVal;
+    }
+
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::CreateTabViewL
+// ---------------------------------------------------------------------------
+//
+CCCAppViewPluginBase* CVIMPSTDetailsViewPluginFactory::CreateTabViewL( TInt aIndex )
+    {
+	TRACER_AUTO;
+  
+	TRACE("aIndex = %d", aIndex);
+    CCCAppViewPluginBase* viewPluginBase = NULL;    
+    if( aIndex < iServiceIds.Count() && aIndex >= 0 )
+        {
+		TRACE("creating view aIndex = %d", aIndex);
+        viewPluginBase = CVIMPSTDetailsViewPlugin::NewL( iServiceIds[aIndex]);
+        TRACE("view created"); 
+        }
+    else
+        {
+        User::Leave(KErrArgument);
+        }   
+  
+    return viewPluginBase;
+    }
+ 
+// ---------------------------------------------------------------------------
+// CVIMPSTDetailsViewPluginFactory::ReadServiceIdL
+// ---------------------------------------------------------------------------
+// 
+TInt CVIMPSTDetailsViewPluginFactory::ReadServiceIdL()
+    {
+	TRACER_AUTO;
+    CSPSettings* settings = CSPSettings::NewLC();
+    iServiceIds.Reset();
+    ///////////////////////Get Service Id////////////////    
+    RArray<TServiceId> services;
+    CleanupClosePushL( services );
+    settings->FindServiceIdsL( services );
+    const TInt serviceCount = services.Count();
+    for ( TInt i( 0 ); i < serviceCount; i++ )
+        {
+        TInt refContactUid = KErrNotFound;
+        CSPProperty* property = CSPProperty::NewLC();
+        settings->FindPropertyL( services[i],EPropertyContactViewPluginId,*property );    
+        if ( property )
+            {
+            property->GetValue( refContactUid );
+            }
+        CleanupStack::PopAndDestroy( property );
+        if ( (TUid::Uid( refContactUid ) == TUid::Uid( KMECOIMPLEMENTATIONUID ))
+                || (TUid::Uid( refContactUid ) ==  TUid::Uid( 0x20007B6D ) )
+                || (TUid::Uid( refContactUid ) == TUid::Uid( 0x2002B334 )))
+            {
+            iServiceIds.Append( services[i] );
+            }
+        }
+    CleanupStack::PopAndDestroy( &services );
+    CleanupStack::PopAndDestroy( settings );
+    return iServiceIds.Count();
+    }