diff -r 65a3ef1d5bd0 -r f742655b05bf commsconfig/cscapplicationui/src/cscservicecontainer.cpp --- a/commsconfig/cscapplicationui/src/cscservicecontainer.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,972 +0,0 @@ -/* -* Copyright (c) 2007-2010 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: CSC Application´s Service View´s Container -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "mcscservicecontainerobserver.h" -#include "csclogger.h" -#include "cscdialog.h" -#include "cscconstants.h" -#include "cscapplication.h" -#include "cscnoteutilities.h" -#include "cscengcchhandler.h" -#include "cscservicecontainer.h" -#include "cscengservicehandler.h" -#include "cscengbrandinghandler.h" -#include "cscengservicepluginhandler.h" -#include "cscenguiextensionpluginhandler.h" - -const TUint KServiceListItemTextMaxLength = 64; -const TUint KMaxUiExetnsionNameLength = 64; - -// Format of the list item string. -_LIT( KServiceListItemTextFormat, "%d\t%S\t" ); - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCServiceContainer::CCSCServiceContainer( - MCSCServiceContainerObserver& aContainerObserver, - CCSCEngServicePluginHandler& aServicePluginHandler, - CCSCEngUiExtensionPluginHandler& aUiExtensionPluginHandler, - CCSCEngServiceHandler& aServiceHandler, - CCSCEngBrandingHandler& aBrandingHandler, - CCSCEngCCHHandler& aCCHHandler ): - iContainerObserver( aContainerObserver ), - iServicePluginHandler( aServicePluginHandler ), - iUiExtensionPluginHandler( aUiExtensionPluginHandler ), - iServiceHandler( aServiceHandler ), - iBrandingHandler( aBrandingHandler ), - iCCHHandler( aCCHHandler ) - { - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::ConstructL( const TRect& aRect ) - { - CSCDEBUG( "CCSCServiceContainer::ConstructL - begin" ); - - CreateWindowL(); - iDialog = CCSCDialog::NewL(); - - iListBox = new (ELeave) CAknDouble2LargeStyleListBox; - iListBox->SetContainerWindowL( *this ); - iListBox->ConstructL( this, EAknGenericListBoxFlags ); - iListBox->HideSecondRow( ETrue ); - iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); - - HBufC* emptyTxt = StringLoader::LoadLC( R_QTN_CSC_NO_SERVICES_INSTALLED ); - iListBox->View()->SetListEmptyTextL( *emptyTxt ); - CleanupStack::PopAndDestroy( emptyTxt ); - - iListBox->CreateScrollBarFrameL( ETrue ); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - - CTextListBoxModel* model = iListBox->Model(); - MDesCArray* textArray = model->ItemTextArray(); - iListBoxItems = static_cast( textArray ); - - iEikMenuBar = new ( ELeave ) CEikMenuBar(); - iEikMenuBar->ConstructL( this, NULL, R_CSC_SERVICEVIEW_MENUBAR ); - - SetRect( aRect ); - - UpdateServiceViewL(); - - ActivateL(); - - CSCDEBUG( "CCSCServiceContainer::ConstructL - end" ); - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCServiceContainer* CCSCServiceContainer::NewL( - const TRect& aRect, - MCSCServiceContainerObserver& aContainerObserver, - CCSCEngServicePluginHandler& aServicePluginHandler, - CCSCEngUiExtensionPluginHandler& aUiExtensionPluginHandler, - CCSCEngServiceHandler& aServiceHandler, - CCSCEngBrandingHandler& aBrandingHandler, - CCSCEngCCHHandler& aCCHHandler ) - { - CCSCServiceContainer* self = - new ( ELeave ) CCSCServiceContainer( - aContainerObserver, - aServicePluginHandler, - aUiExtensionPluginHandler, - aServiceHandler, - aBrandingHandler, - aCCHHandler ); - - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCServiceContainer::~CCSCServiceContainer() - { - CSCDEBUG( "CCSCServiceContainer::~CCSCServiceContainer - begin" ); - - delete iDialog; - delete iArray; - delete iListBox; - delete iEikMenuBar; - - iListBoxItemArray.Reset(); - iListBoxItemArray.Close(); - - CSCDEBUG( "CCSCServiceContainer::~CCSCServiceContainer - end" ); - } - - -// --------------------------------------------------------------------------- -// Updates services to listbox. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::UpdateServiceViewL() - { - CSCDEBUG( "CCSCServiceContainer::UpdateServiceViewL - begin" ); - - TInt currentItemIndex = CurrentItemIndex(); - - // Reset listbox items and item array - iListBoxItems->Reset(); - iListBoxItemArray.Reset(); - - // Find and add Ui Extension Plug-ins - iUiExtensionCount = iUiExtensionPluginHandler.PluginCount(); - - // Create icon array or cleanup iconarray if it already exists - CArrayPtr* iconArray = - iListBox->ItemDrawer()->ColumnData()->IconArray(); - - if ( !iconArray ) - { - iconArray = new( ELeave ) CAknIconArray( 1 ); - // Set icon array for ListBox. - iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); - } - else - { - iconArray->ResetAndDestroy(); - } - - // move add new service plugin to top - RArray uiPlugins; - CleanupClosePushL( uiPlugins ); - - for( TInt i = 0; i < iUiExtensionCount; i++ ) - { - TUiExtensionPluginInfo uiExtension = - iUiExtensionPluginHandler.ItemFromPluginInfoArray( i ); - - if ( KAccountCreationPluginUID == uiExtension.iPluginsUid ) - { - uiPlugins.InsertL( uiExtension, 0 ); - } - else - { - uiPlugins.AppendL( uiExtension ); - } - } - - iListBoxItemHeight = iListBox->ItemHeight(); - - TInt iconSize( 0 ); - if ( iListBoxItemHeight == KItemHeightPortrait ) - { - iconSize = iListBoxItemHeight - KIconSizeCorrectionPortrait; - } - else - { - iconSize = iListBoxItemHeight - KIconSizeCorrectionLandscape; - } - - for ( TUint i( 0 ) ; i < iUiExtensionCount ; i++ ) - { - TUiExtensionPluginInfo uiExtension = uiPlugins[i]; - - if ( 0 == uiExtension.iPlace ) - { - TBuf extensionName; - extensionName.Copy( uiExtension.iUiExtensionName ); - - // To keep track which kind of listbox items we have - TListBoxItem listBoxItem; - listBoxItem.iItemType = TListBoxItem::EUiExtension; - listBoxItem.iPluginUid = uiExtension.iPluginsUid; - - iListBoxItemArray.Append( listBoxItem ); - - // Set icon for ui extension - SetIconL( listBoxItem, iconArray, iconSize ); - - TBuf listBoxItemText; - - listBoxItemText.Format( - KServiceListItemTextFormat, - iconArray->Count() - 1, - &extensionName ); - - iListBoxItems->AppendL( listBoxItemText ); - } - } - - CleanupStack::PopAndDestroy( &uiPlugins ); - - // Get services - RArray serviceIds; - CleanupClosePushL( serviceIds ); - - TRAPD( err, iServiceHandler.GetAllServiceIdsL( serviceIds ) ); - - for ( TInt i(0) ; i < serviceIds.Count() && !err ; i++ ) - { - // Check service validity from cch before adding to listbox - if ( iCCHHandler.IsServiceValidL( serviceIds[ i ] ) ) - { - TBuf listBoxItemText; - HBufC* serviceString = NULL; - - serviceString = StringLoader::LoadLC( - R_QTN_CSC_SERVICE_LISTBOX_ITEM, - iServiceHandler.ServiceNameL( serviceIds[ i ] ) ); - - // To keep track which kind of listbox items we have - TListBoxItem listBoxItem; - listBoxItem.iServiceId = serviceIds[ i ]; - - // Set icon for service - SetIconL( listBoxItem, iconArray, iconSize ); - - listBoxItemText.Format( - KServiceListItemTextFormat, - iconArray->Count() - 1, - serviceString ); - - iListBoxItems->AppendL( listBoxItemText ); - - TInt32 servicePluginId( 0 ); - TInt err2( KErrNone ); - - // Find service plug-in id if service has one - TRAP( - err2, servicePluginId = - iServiceHandler.ServiceSetupPluginIdL( serviceIds[ i ] ) ); - - if ( !err2 && servicePluginId ) - { - listBoxItem.iItemType = TListBoxItem::EServicePlugin; - listBoxItem.iPluginUid.iUid = servicePluginId; - } - else if ( KErrNotFound == err2 ) - { - listBoxItem.iItemType = TListBoxItem::EGeneralService; - } - - iListBoxItemArray.Append( listBoxItem ); - - CleanupStack::PopAndDestroy( serviceString ); - } - } - - CleanupStack::PopAndDestroy( &serviceIds ); - - UpdateListboxL(); - - if( iListBoxItemArray.Count() > 0 ) - { - if ( 0 <= currentItemIndex && - ( iListBoxItemArray.Count() > currentItemIndex ) ) - { - iListBox->SetCurrentItemIndexAndDraw( currentItemIndex ); - } - else - { - iListBox->SetCurrentItemIndexAndDraw( 0 ); - } - } - - CSCDEBUG( "CCSCServiceContainer::UpdateSerUpdateServiceViewL - end" ); - } - - -// --------------------------------------------------------------------------- -// Update listbox. Handle item addition and drawing. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::UpdateListboxL() - { - CSCDEBUG( "CCSCServiceContainer::UpdateListboxL - begin" ); - - iListBox->HandleItemAdditionL(); - - CSCDEBUG( "CCSCServiceContainer::UpdateListboxL - end" ); - } - -// --------------------------------------------------------------------------- -// Returns current item index of listbox. -// --------------------------------------------------------------------------- -// -TInt CCSCServiceContainer::CurrentItemIndex() const - { - CSCDEBUG2( - "CCSCServiceContainer::CurrentItemIndex:%d",iListBox->CurrentItemIndex()); - - return iListBox->CurrentItemIndex(); - } - - -// --------------------------------------------------------------------------- -// Returns currently selected list box item. -// --------------------------------------------------------------------------- -// -TListBoxItem CCSCServiceContainer::ListBoxItem() - { - return iListBoxItemArray[ CurrentItemIndex() ]; - } - -// --------------------------------------------------------------------------- -// Returns reference to listbox. -// --------------------------------------------------------------------------- -// -CAknDouble2LargeStyleListBox& CCSCServiceContainer::ListBox() - { - return *iListBox; - } - -// --------------------------------------------------------------------------- -// Returns pen down point. -// --------------------------------------------------------------------------- -// -TPoint CCSCServiceContainer::PenDownPoint() - { - return iPenDownPoint; - } - -// --------------------------------------------------------------------------- -// Returns service count. -// --------------------------------------------------------------------------- -// -TInt CCSCServiceContainer::ServiceCount() - { - TUint serviceCount( 0 ); - - for ( TInt i ( 0 ) ; i < iListBoxItemArray.Count() ; i++ ) - { - //Add count if list box item type is general service or service plugin - if ( - TListBoxItem::EGeneralService == iListBoxItemArray[i].iItemType || - TListBoxItem::EServicePlugin == iListBoxItemArray[i].iItemType ) - { - serviceCount++; - } - } - - return serviceCount; - } - -// --------------------------------------------------------------------------- -// Set current item index. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::SetCurrentIndex( TInt aIndex ) - { - CSCDEBUG2( "CCSCServiceContainer::SetCurrentIndex: aIndex=%d", aIndex ); - - if( ( aIndex < iListBoxItemArray.Count() ) && ( aIndex >= 0 ) ) - { - iListBox->SetCurrentItemIndex( aIndex ); - } - else - { - iListBox->SetCurrentItemIndex( 0 ); - } - } - - -// --------------------------------------------------------------------------- -// Deletes service. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::DeleteServiceL() - { - CSCDEBUG( "CCSCServiceContainer::DeleteServiceL - begin" ); - - if ( iListBoxItemArray.Count() ) - { - TListBoxItem item = ListBoxItem(); - - // Show confirmation query for service deletion - if ( CCSCNoteUtilities::ShowCommonQueryL( - CCSCNoteUtilities::ECSCDeleteServiceQuery, - iServiceHandler.ServiceNameL( item.iServiceId ) ) ) - { - TBool disabled = iCCHHandler.IsServiceDisabled( item.iServiceId ); - - // if enabled -> show unable to delete note - if ( !disabled ) - { - CCSCNoteUtilities::ShowInformationNoteL( - CCSCNoteUtilities::ECSCUnableToDeleteNote, - iServiceHandler.ServiceNameL( item.iServiceId ) ); - return; - } - - // First check if there is a service plugin UID. - TInt count = iServicePluginHandler.PluginCount( - CCSCEngServicePluginHandler::EInitialized ); - TBool setupPlugin( EFalse ); - for ( TInt i = 0; i < count && !setupPlugin; i++ ) - { - TServicePluginInfo pluginInfo = - iServicePluginHandler.ItemFromPluginInfoArray( i ); - if ( pluginInfo.iPluginsUid == item.iPluginUid ) - { - CSCDEBUG2( " DeleteServiceL - plugin UID match found: %d", - item.iPluginUid ); - setupPlugin = ETrue; - } - } - - if ( setupPlugin ) - { - HandleServicePluginRemovationL( item.iPluginUid ); - } - else - { - TRAPD( err, LaunchCleanupPluginL( item.iServiceId ) ); - if ( KErrNone != err ) - { - iServiceHandler.DeleteServiceL( item.iServiceId ); - } - } - } - } - - CSCDEBUG( "CCSCServiceContainer::DeleteServiceL - end" ); - } - -// --------------------------------------------------------------------------- -// Handles service plugin removation. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::HandleServicePluginRemovationL( const TUid& aUid ) - { - CSCDEBUG( - "CCSCServiceContainer::HandleServicePluginRemovationL - begin" ); - - TUint serviceId( 0 ); - ResolveServiceIdL( aUid, serviceId ); - if ( !serviceId ) - { - User::Leave( KErrNotFound ); - } - - TBool disabled = iCCHHandler.IsServiceDisabled( serviceId ); - - // If service is not disabled, try to disable it - if ( !disabled ) - { - iDialog->LaunchWaitNoteL( R_QTN_CSC_REMOVING_SERVICE ); - User::LeaveIfError( iCCHHandler.DisableService( serviceId ) ); - return; - } - - // Remove service plugin - TInt error( KErrNone ); - TRAP( error, iServicePluginHandler.DoRemovationL( aUid, EFalse ) ); - - // If error, remove remainging setting by cleanupplugin - if ( error ) - { - error = KErrNone; - TRAP( error, LaunchCleanupPluginL( serviceId ) ); - - if ( error ) - { - iServiceHandler.DeleteServiceL( serviceId ); - } - } - } - - -// --------------------------------------------------------------------------- -// Updates container data because of layout change. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::HandleResourceChange( TInt aType ) - { - CSCDEBUG( "CCSCServiceContainer::HandleResourceChange - begin" ); - - if( aType == KAknsMessageSkinChange || - aType == KEikDynamicLayoutVariantSwitch ) - { - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, - mainPaneRect ); - SetRect( mainPaneRect ); - DrawNow(); - iListBox->DrawNow(); - - // Get handler to status pane. - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - if ( statusPane ) - { - statusPane->DrawNow(); - } - } - - CCoeControl::HandleResourceChange( aType ); - - CSCDEBUG( "CCSCServiceContainer::HandleResourceChange - end" ); - } - - -// --------------------------------------------------------------------------- -// Sets listbox observer. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::SetListBoxObserver( - MEikListBoxObserver* aObserver ) - { - iListBox->SetListBoxObserver( aObserver ); - } - - -// --------------------------------------------------------------------------- -// Hides dialog wait note. -// --------------------------------------------------------------------------- -// - void CCSCServiceContainer::HideDialogWaitNote() - { - iDialog->DestroyWaitNote(); - } - - -// --------------------------------------------------------------------------- -// Launches cleanup plugin to remove settings. -// --------------------------------------------------------------------------- -// - void CCSCServiceContainer::LaunchCleanupPluginL( TUint aServiceId ) const - { - CSCDEBUG( "CCSCServiceContainer::LaunchCleanupPluginL - begin" ); - - RImplInfoPtrArray implInfoArray; - CleanupStack::PushL( TCleanupItem( - ResetAndDestroy, &implInfoArray ) ); - - REComSession::ListImplementationsL( - KCSCSettingsCleanupPluginInterfaceUid, - implInfoArray ); - - for ( TInt i( 0 ) ; i < implInfoArray.Count() ; i++ ) - { - CCSCEngSettingsCleanupPluginInterface* plugin = - CCSCEngSettingsCleanupPluginInterface::NewL( - implInfoArray[ i ]->ImplementationUid() ); - - CleanupStack::PushL( plugin ); - - if ( CCSCEngSettingsCleanupPluginInterface::ESipVoIPCleanupPlugin - == plugin->PluginType() ) - { - plugin->RemoveSettingsL( aServiceId ); - } - - CleanupStack::PopAndDestroy( plugin ); - } - - CleanupStack::PopAndDestroy( &implInfoArray ); - REComSession::FinalClose(); - - CSCDEBUG( "CCSCServiceContainer::LaunchCleanupPluginL - end" ); - } - - - // --------------------------------------------------------------------------- - // Resolve service id from service plugi uid. - // --------------------------------------------------------------------------- - // - void CCSCServiceContainer::ResolveServiceIdL( - const TUid& aUid, TUint& aServiceId ) - { - RArray serviceIds; - CleanupClosePushL( serviceIds ); - iServiceHandler.GetAllServiceIdsL( serviceIds ); - - TInt serviceCount( serviceIds.Count() ); - - if ( serviceCount ) - { - for ( TInt i = 0 ; i < serviceCount ; i++ ) - { - TInt32 serviceSetupPluginId( KErrNotFound ); - TRAPD( err, serviceSetupPluginId = - iServiceHandler.ServiceSetupPluginIdL( serviceIds[ i ] ) ); - - if ( KErrNone == err && - serviceSetupPluginId == aUid.iUid ) - { - aServiceId = serviceIds[ i ]; - break; - } - } - } - else - { - User::Leave( KErrNotFound ); - } - - CleanupStack::PopAndDestroy( &serviceIds ); - } - -// --------------------------------------------------------------------------- -// From class CoeControl -// Offer key events for controls. -// --------------------------------------------------------------------------- -// -TKeyResponse CCSCServiceContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, TEventCode aType ) - { - CSCDEBUG2( - "CCSCServiceContainer::OfferKeyEventL: aKeyEvent: %d", - aKeyEvent.iScanCode ); - - TKeyResponse result( EKeyWasNotConsumed ); - - if ( iEikMenuBar->ItemSpecificCommandsEnabled() && - EKeyBackspace == aKeyEvent.iCode && - ( TListBoxItem::EUiExtension != ListBoxItem().iItemType ) ) - { - DeleteServiceL(); - result = EKeyWasConsumed; - } - else - { - result = iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - - iContainerObserver.UpdateCbaL(); - - return result; - } - - -// --------------------------------------------------------------------------- -// From class CoeControl -// Returns component controls. -// --------------------------------------------------------------------------- -// -CCoeControl* CCSCServiceContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iListBox; - default: - return NULL; - } - } - - -// --------------------------------------------------------------------------- -// From class CoeControl -// Handle pointer event. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::HandlePointerEventL( - const TPointerEvent& aPointerEvent ) - { - iPenDownPoint = aPointerEvent.iPosition; - CCoeControl::HandlePointerEventL( aPointerEvent ); - } - - -// --------------------------------------------------------------------------- -// From class MCSCEngCCHObserver -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::ServiceStatusChanged( - TUint /*aServiceId*/, - TCCHSubserviceType /*aType*/, - const TCchServiceStatus& /*aServiceStatus*/ ) - { - // not used - } - - -// --------------------------------------------------------------------------- -// From class CoeControl -// Handles controls size changes. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::SizeChanged() - { - if ( iListBox ) - { - iListBox->SetRect( Rect() ); - - // Update view if portrait/landscape change happened - if ( iListBoxItemHeight != iListBox->ItemHeight() ) - { - TRAP_IGNORE( UpdateServiceViewL() ); - } - } - } - - -// --------------------------------------------------------------------------- -// From class CoeControl -// Handles focus changes. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::FocusChanged( TDrawNow aDrawNow ) - { - CCoeControl::FocusChanged( aDrawNow ); - - if( iListBox ) - { - iListBox->SetFocus( IsFocused() ); - } - } - - -// --------------------------------------------------------------------------- -// From class CoeControl -// Counts components controls. -// --------------------------------------------------------------------------- -// -TInt CCSCServiceContainer::CountComponentControls() const - { - return 1; // only iListBox - } - - -// ----------------------------------------------------------------------------- -// From class CoeControl -// For getting help context -// ----------------------------------------------------------------------------- -// -void CCSCServiceContainer::GetHelpContext( - TCoeHelpContext& aContext ) const - { - aContext.iMajor = KCscHelpUid; - aContext.iContext = KVOIP_HLP_CSC; - } - - -// --------------------------------------------------------------------------- -// Sets icons for lisbox items. -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::SetIconL( const TListBoxItem& aListBoxItem, - CArrayPtr* aIconArray, TInt aIconSize ) - { - CSCDEBUG( "CCSCServiceContainer::SetIconL - begin" ); - - if ( NULL == aIconArray ) - { - return; - } - - TFileName iconsFileName = TParsePtrC( PathInfo::RomRootPath() ).Drive(); - iconsFileName.Append( KDC_APP_BITMAP_DIR ); - iconsFileName.Append( KCSCAifFile ); - - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); - - if ( TListBoxItem::EUiExtension == aListBoxItem.iItemType ) - { - // specific icon for accountcreationplugin - if ( KAccountCreationPluginUID == aListBoxItem.iPluginUid ) - { - aIconArray->AppendL( AknsUtils::CreateGulIconL( - skinInstance, - KAknsIIDDefault, - iconsFileName, - EMbmCscQgn_prop_voip_new_service, - EMbmCscQgn_prop_voip_new_service ) ); - } - // specific icon for advanced settings plugin (sip voip settings) - else if ( KAdvancedSettingsPluginUID == aListBoxItem.iPluginUid ) - { - aIconArray->AppendL( AknsUtils::CreateGulIconL( - skinInstance, - KAknsIIDDefault, - iconsFileName, - EMbmCscQgn_prop_set_voip_advanced, - EMbmCscQgn_prop_set_voip_advanced ) ); - } - else // generic icon - { - aIconArray->AppendL( AknsUtils::CreateGulIconL( - skinInstance, - KAknsIIDDefault, - iconsFileName, - EMbmCscQgn_prop_set_service, - EMbmCscQgn_prop_set_service ) ); - } - } - // Service in question, try to get branded icon. If fails use default icon - else - { - CSCDEBUG( "CCSCServiceContainer::SetIconL - branded icon" ); - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - - // Get service brand id and branded icon(s). - TRAPD( err, - TBuf16 brandId16 ( KNullDesC ); - iServiceHandler.BrandIdL( - aListBoxItem.iServiceId, - brandId16 ); - - TBuf8 brandId8 ( KNullDesC8 ); - brandId8.Copy( brandId16 ); - iBrandingHandler.GetServiceBrandIconL( brandId8, bitmap, - mask, aIconSize ); ); - // Use default icons if error. - if ( KErrNone != err ) - { - aIconArray->AppendL( AknsUtils::CreateGulIconL( - skinInstance, - KAknsIIDDefault, - iconsFileName, - EMbmCscQgn_prop_set_service, - EMbmCscQgn_prop_set_service ) ); - } - // Use branded icons if KErrNone. - else - { - if ( bitmap ) - { - CSCDEBUG( "CCSCServiceContainer::SetIconL - branded icon" ); - CleanupStack::PushL( bitmap ); - CleanupStack::PushL( mask ); - - CFbsBitmap* newBitmap = new (ELeave) CFbsBitmap; - if ( KErrNone == newBitmap->Duplicate( bitmap->Handle() ) ) - { - CleanupStack::PushL( newBitmap ); - //ownership transferred (newBitmap) - - //Create new mask - CFbsBitmap* newMask = new (ELeave) CFbsBitmap; - if( KErrNone == newMask->Duplicate( mask->Handle() ) ) - { - CSCDEBUG( "CCSCServiceContainer::SetIconsL - branded newMASK" ); - - CleanupStack::PushL ( newMask ); - CGulIcon* icon = CGulIcon::NewL( - AknIconUtils::CreateIconL( newBitmap ), - AknIconUtils::CreateIconL( newMask ) ); - - CleanupStack::Pop( newMask ); - CleanupStack::Pop( newBitmap ); - - CleanupStack::PushL( icon ); - aIconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - CSCDEBUG( "CCSCServiceContainer::SetIconsL - branded newMASK done" ); - } - else - { - CSCDEBUG( "CCSCServiceContainer::SetIconsL - Error creating mask duplicate" ); - CleanupStack::PopAndDestroy( newBitmap ); - delete newMask; - newMask = NULL; - } - } - else - { - delete newBitmap; - newBitmap = NULL; - - aIconArray->AppendL( AknsUtils::CreateGulIconL( - skinInstance, - KAknsIIDDefault, - iconsFileName, - EMbmCscQgn_prop_set_service, - EMbmCscQgn_prop_set_service ) ); - } - - CleanupStack::PopAndDestroy( mask ); - CleanupStack::PopAndDestroy( bitmap ); - } - } - } - - CSCDEBUG( "CCSCServiceContainer::SetIconsL - end" ); - } - - -// --------------------------------------------------------------------------- -// CCSCServiceContainer::ResetAndDestroy -// --------------------------------------------------------------------------- -// -void CCSCServiceContainer::ResetAndDestroy( TAny* aArray ) - { - CSCDEBUG( "CCSCServiceContainer::ResetAndDestroy - end" ); - - if ( aArray ) - { - RImplInfoPtrArray* array = - reinterpret_cast( aArray ); - array->ResetAndDestroy(); - } - - CSCDEBUG( "CCSCServiceContainer::ResetAndDestroy - end" ); - } -