diff -r 000000000000 -r f72a12da539e idlehomescreen/nativeuicontroller/src/ainativerenderer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/nativeuicontroller/src/ainativerenderer.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2005-2007 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: +* +*/ + + +#include +#include "ainativerenderer.h" +#include "ainativeuiplugins.h" + +using namespace AiNativeUiController; + + +CAiNativeRenderer::~CAiNativeRenderer() + { + } + + +TInt CAiNativeRenderer::Publish( MAiPropertyExtension& aPlugin, TInt aContent, + TInt aResource, TInt aIndex ) + { + TRAPD( err, DoMimeTypeCheckL( aPlugin, aContent ) ); + + if( err != KErrNone ) + { + return err; + } + + TRAP( err, DoPublishL( aPlugin, aContent, aResource, aIndex ) ); + return err; + } + + +TInt CAiNativeRenderer::Publish( MAiPropertyExtension& aPlugin, TInt aContent, + const TDesC16& aText, TInt aIndex ) + { + TRAPD( err, DoMimeTypeCheckL( aPlugin, aContent ) ); + + if( err != KErrNone ) + { + return err; + } + + TRAP( err, DoPublishL( aPlugin, aContent, aText, aIndex ) ); + return err; + } + + +TInt CAiNativeRenderer::Publish( MAiPropertyExtension& aPlugin, TInt aContent, + const TDesC8& aBuf, TInt aIndex ) + { + TRAPD( err, DoMimeTypeCheckL( aPlugin, aContent ) ); + + if( err != KErrNone ) + { + return err; + } + + TRAP( err, DoPublishL( aPlugin, aContent, aBuf, aIndex ) ); + return err; + } + + +TInt CAiNativeRenderer::Publish( MAiPropertyExtension& aPlugin, TInt aContent, + RFile& aFile, TInt aIndex ) + { + TRAPD( err, DoMimeTypeCheckL( aPlugin, aContent ) ); + + if( err != KErrNone ) + { + return err; + } + + TRAP( err, DoPublishL( aPlugin, aContent, aFile, aIndex ) ); + return err; + } + + +TInt CAiNativeRenderer::Clean( MAiPropertyExtension& aPlugin, TInt aContent ) + { + TRAPD( err, DoMimeTypeCheckL( aPlugin, aContent ) ); + + if( err != KErrNone ) + { + return err; + } + + TRAP( err, DoCleanL( aPlugin, aContent ) ); + return err; + } + + +void CAiNativeRenderer::DoPublishL + ( MAiPropertyExtension& /*aPlugin*/, TInt /*aContent*/, TInt /*aResource*/, TInt /*aIndex*/ ) + { + // Default implementation, overridden in subclass if needed. + User::Leave( KErrNotFound ); + } + + +void CAiNativeRenderer::DoPublishL + ( MAiPropertyExtension& /*aPlugin*/, TInt /*aContent*/, const TDesC16& /*aText*/, TInt /*aIndex*/ ) + { + // Default implementation, overridden in subclass if needed. + User::Leave( KErrNotFound ); + } + + +void CAiNativeRenderer::DoPublishL + ( MAiPropertyExtension& /*aPlugin*/, TInt /*aContent*/, const TDesC8& /*aBuf*/, TInt /*aIndex*/ ) + { + // Default implementation, overridden in subclass if needed. + User::Leave( KErrNotFound ); + } + + +void CAiNativeRenderer::DoPublishL + ( MAiPropertyExtension& /*aPlugin*/, TInt /*aContent*/, RFile& /*aFile*/, TInt /*aIndex*/ ) + { + // Default implementation, overridden in subclass if needed. + User::Leave( KErrNotFound ); + } + + +void CAiNativeRenderer::DoCleanL + ( MAiPropertyExtension& /*aPlugin*/, TInt /*aContent*/ ) + { + // Default implementation, overridden in subclass if needed. + User::Leave( KErrNotFound ); + } + + +TInt CAiNativeRenderer::GetIntContentId( const TDesC& aCid ) const + { + for( TInt i( 0 ); i < KAiDeviceStatusContentCount; i++ ) + { + const TAiContentItem& item = KAiDeviceStatusContent[i]; + if( ContentCid(item) == aCid ) + { + //match + return item.id; + } + } + + for( TInt i( 0 ); i < KAiScutContentCount; i++ ) + { + const TAiContentItem& item = KAiScutContent[i]; + if( ContentCid(item) == aCid ) + { + //match + return item.id; + } + } + + return KErrNotFound; + } + + +TBool CAiNativeRenderer::MatchMimeType( MAiPropertyExtension& aPlugin, + TInt aContentId, + const TDesC8& aMimeType ) const + { + TUid pluginUid; + TRAPD( err, pluginUid = aPlugin.PublisherInfoL()->iUid ); + if ( err != KErrNone ) + { + return EFalse; + } + // loop through Device Status content items + if ( pluginUid == KDeviceStatusPluginUid ) + { + for( TInt i( 0 ); i < KAiDeviceStatusContentCount; i++ ) + { + const TAiContentItem& item = KAiDeviceStatusContent[i]; + + if( item.id != aContentId ) + { + continue; + } + + TBuf8 mimeType((TText8*) item.type); + + return ( mimeType.Match( aMimeType ) != KErrNotFound ); + } + } + else if ( pluginUid == KShortcutPluginUid ) + { + // if match not found, loop through Shortcut content items + for( TInt i( 0 ); i < KAiScutContentCount; i++ ) + { + const TAiContentItem& item = KAiScutContent[i]; + + if( item.id != aContentId ) + { + continue; + } + + TBuf8 mimeType((TText8*) item.type); + + return ( mimeType.Match( aMimeType ) != KErrNotFound ); + } + } + else if ( pluginUid == KProfilePluginUid ) + { + // if match not found, loop through Profile content items + for( TInt i( 0 ); i < KAiProfileContentCount; i++ ) + { + const TAiContentItem& item = KAiProfileContent[i]; + + if( item.id != aContentId ) + { + continue; + } + + TBuf8 mimeType((TText8*) item.type); + + return ( mimeType.Match( aMimeType ) != KErrNotFound ); + } + } + + return EFalse; + } + + +void CAiNativeRenderer::DoMimeTypeCheckL( MAiPropertyExtension& aPlugin, TInt aContentId ) + { + MAiContentItemIterator* iter = + (MAiContentItemIterator*)aPlugin.GetPropertyL( EAiPublisherContent ); + const TAiContentItem& item = iter->ItemL( aContentId ); + + aContentId = GetIntContentId( ContentCid(item) ); + + if( !MatchMimeType( aPlugin, aContentId, ContentType(item) ) ) + { + User::Leave( KErrNotSupported ); + } + + } +