diff -r 137ebc85284b -r 1b758917cafc idlehomescreen/xmluicontroller/src/dynamicthememodifier.cpp --- a/idlehomescreen/xmluicontroller/src/dynamicthememodifier.cpp Tue May 25 12:29:32 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,331 +0,0 @@ -/* -* 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: This module contains the implementation of -* CDynamicThemeModifier class member functions. -* -*/ - - - -// INCLUDE FILES - -#include "dynamicthememodifier.h" -#include -#include "xnodt.h" -#include "xndomdocument.h" -#include "xndomattribute.h" -#include "xndomnode.h" -#include "xndomlist.h" -#include "xndomdepthiterator.h" -#include - -// CONSTANTS -#define NEWS_TICKER_GENERAL_SETTINGS_UID 0x10207196 -const TUid KCRUidNewsTicker = {NEWS_TICKER_GENERAL_SETTINGS_UID}; - -/** - * KGSNewsTickerStatus - * CenRep key for "NewsTicker activated" - * Off = 0 - * On = 1 - */ -const TUint32 KGSNewsTickerStatus = 0x00000004; - -/** - * KAINTInTheme - * CenRep key for "NewsTicker implemented in AI2 theme" - * No = 0 - * Yes = 1 - */ -const TUint32 KAiNTInTheme = 0x00000800; -const TInt KThemeArrayGranularity = 4; - -_LIT8( KProperty, "property" ); -_LIT8( KControl, "control" ); -_LIT8( KName, "name" ); -_LIT8( KValue, "value" ); -_LIT8( KBlock, "block" ); -_LIT8( KNone, "none" ); - -using namespace AiXmlUiController; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::CDynamicThemeModifier -// ----------------------------------------------------------------------------- -// -CDynamicThemeModifier::CDynamicThemeModifier() - { - } - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::ConstructL -// ----------------------------------------------------------------------------- -// -void CDynamicThemeModifier::ConstructL() - { - // NT is not shown in theme by default. - // This is overridden later if it really is implemented (some other theme - // Basic activated) - iAiCenRep = CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) ); - User::LeaveIfError( iAiCenRep->Set( KAiNTInTheme, 0 ) ); - - // Check if NT settings are visible in GS - iNTCenRep = CRepository::NewL( KCRUidNewsTicker ); - User::LeaveIfError( iNTCenRep->Get( KGSNewsTickerStatus, iEnabledInCenRep ) ); - - iNTCenRepObserver = CCenRepNotifyHandler::NewL( *this, - *iNTCenRep, - CCenRepNotifyHandler::EIntKey, - KGSNewsTickerStatus ); - iNTCenRepObserver->StartListeningL(); - - LoadThemesL(); - } - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::NewL -// ----------------------------------------------------------------------------- -// -CDynamicThemeModifier* CDynamicThemeModifier::NewL() - { - CDynamicThemeModifier* self = new( ELeave ) CDynamicThemeModifier; - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// Destructor -CDynamicThemeModifier::~CDynamicThemeModifier() - { - if( iThemeArray ) - { - iThemeArray->ResetAndDestroy(); - delete iThemeArray; - } - delete iOdt; - delete iDomDocument; - delete iXnResult; - delete iXnRequestClient; - delete iXnContentAccessClient; - delete iXnClient; - if( iNTCenRepObserver ) - { - iNTCenRepObserver->StopListening(); - delete iNTCenRepObserver; - } - delete iNTCenRep; - delete iAiCenRep; - } - -// --------------------------------------------------------------------------- -// CDynamicThemeModifier::LoadThemesL -// --------------------------------------------------------------------------- -// -void CDynamicThemeModifier::LoadThemesL() - { - const TUid KUidAI2 = TUid::Uid( AI_UID3_AIFW_EXE ); - - iXnClient = CXnClient::NewL( *this ); - // we're only interested in AI2 themes - iXnContentAccessClient = CXnContentAccessClient::NewL( *this, - KUidAI2.iUid ); - iXnRequestClient = CXnRequestClient::NewL( *this, KUidAI2.iUid ); - iXnResult = CXnResult::NewL(); - - CXnODT* odt = CXnODT::NewL(); - CleanupStack::PushL( odt ); - - odt->SetAppUid( KUidAI2.iUid ); - - iThemeArray = new( ELeave ) CArrayPtrFlat( KThemeArrayGranularity ); - - // theme array gets filled up by XnClient after this - // HandleXnClientMessage() is a callback method that we're interested in - TXnServiceCompletedMessage ret = - iXnClient->XnGetListHeaders( *odt, *iThemeArray ); - - if( ret == EXnGetListHeadersSuccess || ret == EXnGetListHeadersEmpty ) - { - iXnClient->GetXnResult( *iXnResult ); - iNumberOfHeaders = iXnResult->iIntValue1; - iXnClient->XnGetNextHeader(); - } - - CleanupStack::PopAndDestroy( odt ); - } - - - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::HandleXnClientMessage -// ----------------------------------------------------------------------------- -// -void CDynamicThemeModifier::HandleXnClientMessage( - TXnServiceCompletedMessage aMessage ) - { - // wait until all themes are fetched before loading settings - if( ( aMessage == EXnGetListHeadersUpdate ) && - ( iThemeArray->Count() == iNumberOfHeaders ) ) - { - TRAP_IGNORE( LoadSettingsFromThemeL() ); - } - - else if( aMessage == EXnGetListHeadersFailed ) - { - if (iXnClient) - { - iXnClient->XnCancelGetListHeaders(); - } - - if ( iThemeArray ) - { - iThemeArray->ResetAndDestroy(); - delete iThemeArray; - iThemeArray = NULL; - } - } - - } - - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::LoadSettingsFromThemeL -// ----------------------------------------------------------------------------- -// -void CDynamicThemeModifier::LoadSettingsFromThemeL() - { - for( TInt i = 0; i < iThemeArray->Count(); i++ ) - { - CXnODT* odt = iThemeArray->At( i ); - - // activated theme found -> load settings - if( odt->Flags() & EXnThemeStatusActive ) - { - delete iDomDocument; - iDomDocument = NULL; - iDomDocument = CXnDomDocument::NewL(); - - TXnServiceCompletedMessage ret = - iXnContentAccessClient->XnLoadSettings( *odt, *iDomDocument ); - if( ret == EXnSettingsLoaded ) - { - delete iOdt; - iOdt = NULL; - iOdt = odt->CloneL(); - odt = NULL; - // update theme to match CenRep value - EnableNewsTickerL( TBool( iEnabledInCenRep ) ); - break; - } - } - } - } - - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::EnableNewsTickerL -// ----------------------------------------------------------------------------- -// -void CDynamicThemeModifier::EnableNewsTickerL( TBool aEnabled ) - { - TInt found = 0; - CXnDomDepthIterator* iterator = - CXnDomDepthIterator::NewL( *iDomDocument->RootNode() ); - CleanupStack::PushL( iterator ); - - CXnDomNode* node = iterator->First(); - - if( !node ) - { - CleanupStack::PopAndDestroy( iterator ); - return; - } - - // find tag - while( node ) - { - if( !node->Name().Compare( KControl ) ) - { - break; - } - node = iterator->NextL(); - } - - if( !node->Name().Compare( KControl ) ) - { - node = iterator->NextL(); - - while( node ) - { - // look for tag... - if( !node->Name().Compare( KProperty ) ) - { - // ...with attribute "value"... - if( !node->AttributeValue( KName ).Compare( KValue ) ) - { - found = 1; - CXnDomAttribute* attr = static_cast - ( node->AttributeList().FindByName( KValue) ); - - // ...update it accordingly... - if( aEnabled ) - { - attr->SetValueL( KBlock ); - } - else - { - attr->SetValueL( KNone ); - } - } - } - node = iterator->NextL(); - } - - // ...and communicate the changes via Content Access API. - for( TInt i = 0; i < iThemeArray->Count(); i++ ) - { - CXnODT* odt = iThemeArray->At( i ); - - // This might return an error if settings were not found from theme. - // However, we don't need to take any actions since appropriate - // theme is left untouched in that case anyway - iXnContentAccessClient->XnUpdateSettings( *odt, *iDomDocument ); - } - - // if found == 1, then NT is implemented in theme - // -> NT settings can be shown in GS - User::LeaveIfError( iAiCenRep->Set( KAiNTInTheme, found ) ); - CleanupStack::PopAndDestroy( iterator ); - } - } - -// ----------------------------------------------------------------------------- -// CDynamicThemeModifier::HandleNotifyInt -// Callback method for observing CenRep changes -// ----------------------------------------------------------------------------- -// -void CDynamicThemeModifier::HandleNotifyInt( TUint32 /*aId*/, TInt aNewValue ) - { - iEnabledInCenRep = TBool( aNewValue ); - TRAP_IGNORE( EnableNewsTickerL( iEnabledInCenRep ) ); - ; - } - -// End of File