idlehomescreen/nativeuicontroller/src/ainativerenderer.cpp
changeset 0 f72a12da539e
child 9 f966699dea19
--- /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 <aipropertyextension.h>
+#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<KAiContentTypeMaxLength> 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<KAiContentTypeMaxLength> 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<KAiContentTypeMaxLength> 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 );
+        }
+
+    }
+