--- 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 <aisystemuids.hrh>
-#include "xnodt.h"
-#include "xndomdocument.h"
-#include "xndomattribute.h"
-#include "xndomnode.h"
-#include "xndomlist.h"
-#include "xndomdepthiterator.h"
-#include <activeidle2domaincrkeys.h>
-
-// 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<CXnODT>( 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 <control> tag
- while( node )
- {
- if( !node->Name().Compare( KControl ) )
- {
- break;
- }
- node = iterator->NextL();
- }
-
- if( !node->Name().Compare( KControl ) )
- {
- node = iterator->NextL();
-
- while( node )
- {
- // look for <property> tag...
- if( !node->Name().Compare( KProperty ) )
- {
- // ...with attribute "value"...
- if( !node->AttributeValue( KName ).Compare( KValue ) )
- {
- found = 1;
- CXnDomAttribute* attr = static_cast<CXnDomAttribute*>
- ( 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