phonebookui/Phonebook2/xSPExtensionManager/src/CxSPAppUiManager.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPAppUiManager.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 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: 
+*       Composite AppUi extension.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CxSPAppUiManager.h"
+
+// System includes
+#include <coemain.h>
+#include <barsread.h>
+#include <aknsconstants.hrh>
+#include <AknsUtils.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+
+// From Phonebook2
+#include <CPbk2ViewGraph.h>
+#include <MPbk2StartupMonitor.h>
+#include <Pbk2ViewId.hrh>
+#include <Pbk2ViewInfo.hrh>
+#include <CPbk2IconInfoContainer.h>
+#include <CPbk2IconInfo.h>
+#include <TPbk2IconId.h>
+#include <Pbk2UID.h>
+#include <MPbk2ApplicationServices2.h>
+#include <MPbk2ApplicationServices.h>
+#include <CPbk2ServiceManager.h>
+#include <MPbk2AppUi.h>
+
+// internal
+#include <ExtensionManagerRes.rsg>
+#include "ExtensionManager.hrh"
+#include "CxSPViewInfo.h"
+#include "CxSPViewIdChanger.h"
+#include "MxSPFactory.h"
+
+// ==================== MEMBER FUNCTIONS ====================
+CxSPAppUiManager::CxSPAppUiManager( CArrayPtrFlat<MxSPFactory>& aFactories,
+                                    CxSPViewIdChanger& aViewIdChanger ) :
+    iFactories(aFactories),
+    iViewIdChanger(aViewIdChanger)
+    {
+    }
+
+CxSPAppUiManager::~CxSPAppUiManager()
+    {
+    }
+
+void CxSPAppUiManager::DoRelease()
+    {
+    delete this;
+    }
+
+void CxSPAppUiManager::ConstructL()
+    {      
+    iViewIdChanger.GetViewCount( iTabViews, iOtherViews );
+    }
+
+CxSPAppUiManager* CxSPAppUiManager::NewL( CArrayPtrFlat<MxSPFactory>& aFactories,
+                                          CxSPViewIdChanger& aViewIdChanger )
+    {
+    CxSPAppUiManager* self = new (ELeave) CxSPAppUiManager( aFactories, aViewIdChanger );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);                                                            
+    return self;
+    }
+
+void CxSPAppUiManager::ExtensionStartupL(MPbk2StartupMonitor& aStartupMonitor)
+    {
+    aStartupMonitor.HandleStartupComplete();
+    }
+
+void CxSPAppUiManager::ApplyExtensionViewGraphChangesL
+        (CPbk2ViewGraph& aViewGraph)
+    {
+    if( iTabViews < 0 ) //sanity check
+        {
+        return;
+        }
+
+    TInt currentId = EExtensionManagerTabViewStartId;
+    TUint currentOrdering = EExtensionManagerTabOrderingStart;
+    TResourceReader reader; 
+    for( TInt i=0; (i<iTabViews) && (currentId <= EExtensionManagerTabViewMaxId); i++)  
+        {
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, 
+                                               R_EXTENSION_MANAGER_BASIC_VIEWGRAPH );
+            
+        CPbk2ViewNode* node = CPbk2ViewNode::NewL(
+                TUid::Uid(currentId), 
+                TUid::Uid(EPbk2ExitViewId), 
+                EFalse, 
+                EPbk2MainTabGroup, 
+                (TPbk2TabGroupOrdering)currentOrdering,
+                0,  // No tabs
+                reader);
+        
+        CleanupStack::PushL( node );
+        aViewGraph.AddViewNodeL( node );
+        CleanupStack::Pop( node );
+        currentId++;
+        currentOrdering++;
+        CleanupStack::PopAndDestroy(); //reader     
+        }
+        
+    currentId = EExtensionManagerViewStartId;
+    for( TInt i=0; (i<iOtherViews) && (currentId <= EExtensionManagerViewMaxId); i++)  
+        {
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, 
+                                               R_EXTENSION_MANAGER_BASIC_VIEWGRAPH );
+            
+        CPbk2ViewNode* node = CPbk2ViewNode::NewL(
+                TUid::Uid(currentId), 
+                TUid::Uid(EPbk2ExitViewId), 
+                EFalse, 
+                (TPbk2TabGroupId)0, 
+                (TPbk2TabGroupOrdering)0,
+                0,
+                reader);
+        
+        CleanupStack::PushL( node );
+        aViewGraph.AddViewNodeL( node );
+        currentId++;
+        CleanupStack::Pop( node );
+        CleanupStack::PopAndDestroy(); //reader 
+        }
+    }
+
+
+
+void CxSPAppUiManager::ApplyDynamicPluginTabGroupContainerChangesL(
+        const CPbk2ViewNode& aNode, 
+        CAknTabGroup& aAknTabGroup,
+        CPbk2IconInfoContainer& aTabIcons,
+        TInt /*aViewCount*/ )
+    {
+
+    // First, load all view infos that contain the icons
+    RPointerArray<CxSPViewInfo> infoArray;
+    CleanupClosePushL( infoArray );
+    const TInt count = iFactories.Count();
+    for( TInt i = 0; i < count; i++ )
+        {     
+        iViewIdChanger.GetTabViewInfoL( iFactories[i]->Id(), infoArray );
+        }
+    
+    // pre-set default skin & color values
+    TAknsItemID skin;
+    skin.Set( EAknsMajorGeneric, EAknsMinorQgnGrafTab22 );
+    TAknsItemID color;
+    color.Set( EAknsMajorNone, EAknsMinorNone );
+    
+    // is the aNode from this extension
+    // loop through tab view nodes
+    for( TInt currentId = EExtensionManagerTabViewStartId; 
+         currentId <= EExtensionManagerTabViewMaxId; currentId++ )
+        {
+        if (aNode.ViewId().iUid == currentId)
+            {           
+            for( TInt i = 0; i < infoArray.Count(); i++ )
+                {
+                CxSPViewInfo* info = infoArray[i];
+                if( info->NewViewId() == currentId )
+                    {
+                    TBool isMonochrome = ETrue;
+                    CPbk2IconInfo* iconInfo (NULL);
+                    CFbsBitmap* bitmap = NULL;
+                    CFbsBitmap* mask = NULL;
+                    TPbk2IconId iconInfoId( TUid::Uid(KPbk2UID3), currentId );
+                    //info->Name() denotes the ServiceName of the Service in SpSettings                    
+                    //PBK2 ServiceManager has the brandicons of all the services installed
+                    //to the device.
+                    //So iterate thro the PBK2ServiceManager, to find the service which matches
+                    //the info->Name()
+                    //If matches use this icon else use the default icon for the tabs
+                    //get the XSP ServiceName 
+                            
+                    // CPbk2ServiceManager stores all the brandinfo
+                    // related to the services configured to the phone
+                    // use this to show uniform icon throughout PhoneBook
+                    MPbk2ApplicationServices2* servicesExtension = 
+                        reinterpret_cast<MPbk2ApplicationServices2*>
+                            ( Phonebook2::Pbk2AppUi()->ApplicationServices().
+                                MPbk2ApplicationServicesExtension(
+                                    KMPbk2ApplicationServicesExtension2Uid ) );
+                    CPbk2ServiceManager& servMan = servicesExtension->ServiceManager();
+                    const CPbk2ServiceManager::RServicesArray& services = servMan.Services();    
+                    for ( TInt i = 0; i < services.Count(); i++ )
+                        {
+                        const CPbk2ServiceManager::TService& service = services[i];
+                        //Found the appropriate service info
+                        if ( service.iName == info->Name() )
+                            {
+                            if ( service.iBitmap && service.iMask )
+                                {
+                                
+                                // Check if the bitmap is monochrome here
+								// before compression happen  
+								if ( !service.iBitmap->IsMonochrome())
+                                	{
+                                	isMonochrome = EFalse;
+                                	}
+									
+                                TSize size( 25, 25 ); //default size used in PB
+                                
+                                AknIconUtils::SetSize(
+                                        service.iBitmap,
+                                        size );
+                                AknIconUtils::SetSize(
+                                        service.iMask,
+                                        size );                               
+                                
+                                bitmap = new (ELeave) CFbsBitmap;
+                                CleanupStack::PushL( bitmap );
+                                bitmap->Duplicate( service.iBitmap->Handle() );
+                                
+                                mask = new (ELeave) CFbsBitmap;
+                                CleanupStack::PushL( mask );
+                                mask->Duplicate( service.iMask->Handle() );
+                                
+                                iconInfo = CPbk2IconInfo::NewLC(
+                                        iconInfoId,
+                                        bitmap,
+                                        mask,                                                     
+                                        size );
+                                }
+                            break;
+                            }
+                        }            
+                    
+                    if ( !iconInfo )
+                        {
+                        //load default icons using mif file
+                        //Branded icon was not found
+                        iconInfo = CPbk2IconInfo::NewLC(
+                            iconInfoId,
+                            (TInt)info->TabIconId(),
+                            (TInt)info->TabMaskId(),
+                            info->TabIconFile(), 
+                            skin, color, 0, 0 );
+                        
+                        AknsUtils::CreateIconLC( AknsUtils::SkinInstance(),  
+                                                 skin, 
+                                                 bitmap, 
+                                                 mask,
+                                                 info->TabIconFile(), 
+                                                 info->TabIconId(), 
+                                                 info->TabMaskId() );
+                                                 
+                        AknIconUtils::ExcludeFromCache( bitmap ); 
+                        AknIconUtils::ExcludeFromCache( mask );    
+                        }
+                    
+                    aTabIcons.AppendIconL( iconInfo );
+                    aAknTabGroup.AddTabL( currentId, bitmap, mask );
+                    
+                    // Set color mode only for colored icon, 
+					// not for monochrome icon
+                    if ( !isMonochrome )
+                    	{
+                    	aAknTabGroup.SetTabMultiColorMode( currentId, ETrue );
+                    	}
+
+					//The POP is synchroze the number of items pushed
+					//the order of the item might change. Please have a glance on the items pushed
+                    CleanupStack::Pop( 3 ); // iconInfo,bitmap,mask
+                    break;
+                    }
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy(); // infoArray 
+    }
+
+// End of File