diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/xSPExtensionManager/src/CxSPAppUiManager.cpp --- /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 +#include +#include +#include +#include +#include + +// From Phonebook2 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// internal +#include +#include "ExtensionManager.hrh" +#include "CxSPViewInfo.h" +#include "CxSPViewIdChanger.h" +#include "MxSPFactory.h" + +// ==================== MEMBER FUNCTIONS ==================== +CxSPAppUiManager::CxSPAppUiManager( CArrayPtrFlat& 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& 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; (iCreateResourceReaderLC( 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; (iCreateResourceReaderLC( 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 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 + ( 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