musichomescreen_multiview/musiccontentpublisher/inc/musiccontentpublisher.h
branchRCL_3
changeset 26 3de6c4cf6b67
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/musichomescreen_multiview/musiccontentpublisher/inc/musiccontentpublisher.h	Wed Sep 01 12:32:02 2010 +0100
@@ -0,0 +1,412 @@
+/*
+* Copyright (c) 2008-2008 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:  Manages MCP plugins, and content publishing.
+*
+*/
+
+
+#ifndef C_MUSICCONTENTPUBLISHER_H
+#define C_MUSICCONTENTPUBLISHER_H 
+
+#include <contentharvesterplugin.h>
+#include <mcppluginobserver.h>
+#include <libc/stddef.h>  // For wchar_t
+#include <e32hashtab.h>
+#include <AknsSrvClient.h>
+
+#include "musiccontentmap.h"
+
+class MLiwInterface;
+class CPluginManager;
+class CFbsBitmap;
+class CCoeEnv;
+class TAknsItemID;
+class CMCPHarvesterPublisherObserver;
+
+
+struct TMCPDestinationItem
+    {
+    const TInt id;
+    const wchar_t* type;
+    const char* dataKey;
+    const char* maskKey;
+    };
+
+struct TMCPImageDestinationInfoItem
+    {
+    const TMCPImageDestination id;
+    const TInt sizex;
+    const TInt sizey;
+    };
+
+
+struct TBmpMsk
+    {
+    CFbsBitmap *bitmap;
+    CFbsBitmap *mask;
+    };
+
+
+const TMCPDestinationItem KMCPDestinationInfo[] =
+    {
+     { EMusicWidgetImage1,      L"area1_image1", "area1_image1_data", "area1_image1_data_mask" }
+    ,{ EMusicWidgetText1,       L"area2_text1",  "area2_text1_data", ""}
+    ,{ EMusicWidgetToolbarB1,   L"toolbar_b1", "toolbar_b1_data", "toolbar_b1_data_mask" }
+    ,{ EMusicWidgetToolbarB2,   L"toolbar_b2", "toolbar_b2_data", "toolbar_b2_data_mask" }
+    ,{ EMusicWidgetToolbarB3,   L"toolbar_b3", "toolbar_b3_data", "toolbar_b3_data_mask" }
+    ,{ EMusicWidgetDefaultText, L"default_text",  "default_text_data", "" }
+    
+    ,{ EMusicWidgetTrigger1,    L"area1_image1", "MWTrigger1", "" }
+    ,{ EMusicWidgetTrigger2,    L"default_text",  "MWTrigger2", "" }
+    ,{ EMusicWidgetTB1Trigger,  L"toolbar_b1", "TB1Trigger", "" }
+    ,{ EMusicWidgetTB2Trigger,  L"toolbar_b2", "TB2Trigger", "" }
+    ,{ EMusicWidgetTB3Trigger,  L"toolbar_b3", "TB3Trigger", "" }
+    };
+
+
+const TMCPImageDestinationInfoItem KMCPImageDestinationInfo[] =
+
+    {
+        {EMusicWidgetImage1, 70, 70}
+    ,
+        {EMusicWidgetToolbarB1, 41,41}
+    ,
+        {EMusicWidgetToolbarB2, 41,41}
+    ,
+        {EMusicWidgetToolbarB3, 41,41}
+
+    };
+
+/**
+ *  Music Content Publisher (a Content Harvester plugin)
+ *
+ *  @lib musiccontentpublisher.dll
+ *  @since S60 S60 v5.0
+ */
+class CMusicContentPublisher : public CContentHarvesterPlugin
+                       ,public MMCPPluginObserver
+                       ,public MAknsSkinChangeObserver
+    {
+
+public:
+
+// from base class MMCPPluginObserver
+    /**
+     * from MMCPPluginObserver
+     * Called when an image needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the image is to be placed.
+     * @param aImagePath Source path of the Image.
+     */
+    void PublishImageL(CMCPPlugin* aPlugin,
+            TMCPImageDestination aDestination, const TDesC& aImagePath);
+
+    /**
+     * from MMCPPluginObserver
+     * Called when an image needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the image is to be placed.
+     * @param aBitmapHandle Bitmap handle to the image.
+     * @param aMaskBitmapHandle Mask Bitmap handle for the image.
+     */
+    void PublishImageL(CMCPPlugin* aPlugin, 
+            TMCPImageDestination aDestination,
+            TInt aBitmapHandle,
+            TInt aMaskBitmapHandle = NULL);
+    
+    /**
+     * from MMCPPluginObserver
+     * Called when an image needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the image is to be placed.
+     * @param aID major and minor Skin ID info.
+     * @param aFilename fallback mif/mbm file.
+     * @param aFileBitmapId bitmap id within the fallback file.
+     * @param aFileMaskId mask id within the fallback file.
+     */
+    void PublishImageL(CMCPPlugin* aPlugin, 
+            TMCPImageDestination aDestination,
+            const TAknsItemID& aID,
+            const TDesC& aFilename,
+            const TInt aFileBitmapId,
+            const TInt aFileMaskId );
+
+    /**
+     * from MMCPPluginObserver
+     * Called when a text needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Where the text is to be placed.
+     * @param aText Descriptor containing the text.
+     */
+    void PublishTextL( CMCPPlugin* aPlugin, 
+            TMCPTextDestination aDestination, const TDesC& aText );
+
+    /**
+     * from MMCPPluginObserver
+     * Called when an action needs to be updated.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     * @param aDestination Destination trigger that should launch the action.
+     * @param aTrigerMap LIW Map containint the action that can be interpreted
+     * by the specified action handler plugin.
+     */
+    void PublishActionL( CMCPPlugin* aPlugin, 
+            TMCPTriggerDestination aDestination, 
+            CLiwDefaultMap* aTrigerMap );
+    
+    /**
+     * from MMCPPluginObserver
+     * Called when a plugin becomes active.
+     *
+     * @since S60 5.0
+     * @param aPlugin Where the mesage is coming from.
+     */
+    void BecameActiveL( CMCPPlugin* aPlugin );
+    
+    /**
+     * from MMCPPluginObserver
+     * Called when a plugin becomes active.
+     *
+     * @since S60 5.0
+     * @param aDst The image destination.
+     * @return The size of the image destination.
+     */
+    TSize GetImageDestinationSize(TMCPImageDestination aDst);
+    
+    /**
+     * From MAknsSkinChangeObserver.
+     * Called by the skin server when skin content is changed and the
+     * connected client wants to be informed.
+     *
+     * @since 2.0
+     */
+    void SkinContentChanged();
+
+    /**
+     * From MAknsSkinChangeObserver.
+     * Called by the skin server to indicate that the current skin
+     * configuration has changed.
+     *
+     * @param aReason Reason code.
+     *
+     * @since 2.5
+     */
+    void SkinConfigurationChanged(
+            const TAknsSkinStatusConfigurationChangeReason /*aReason*/){};
+
+    /**
+     * From MAknsSkinChangeObserver.
+     * Called by the skin server to indicate that the available
+     * skin packages have changed.
+     *
+     * @param aReason Reason code.
+     *
+     * @since 2.5
+     */
+    void SkinPackageChanged(const TAknsSkinStatusPackageChangeReason /*aReason*/){};
+
+    void HandlePublisherNotificationL( const TDesC& aContentId, const TDesC8& aTrigger );
+    /**
+     * Two-phased constructor.
+     */
+    static CMusicContentPublisher* NewL( MLiwInterface* aCPSInterface );
+
+
+
+    // from base class CContentHarvesterPlugin
+    /**
+     * From CContentHarvesterPlugin
+     * This is called by the Content Harvester Server to signal an update. 
+     */
+    void UpdateL();
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CMusicContentPublisher();
+    
+    /**
+     * Resets the destinations with default values and removes active plugin.
+     */
+    void ResetL();
+
+private:
+
+    /**
+     * Default constructor.
+     */
+    CMusicContentPublisher( MLiwInterface* aCPSInterface );
+
+    /**
+     * Perform the second phase construction 
+     */
+    void ConstructL();
+    
+    /**
+     * Publish default content
+     */
+    void PublishDefaultL();
+
+    /**
+     * Installs an action, mainly for readability purposes.
+     *
+     * @since S60 5.0
+     * @param aDestination Destination trigger that should launch the action.
+     */
+    void InstallGoToMusicL(TMCPTriggerDestination aDestination);
+    
+    /**
+     * Installs an action, mainly for readability purposes.
+     *
+     * @since S60 5.0
+     * @param aDestination Destination trigger that should launch the action.
+     */
+    void InstallGoToAlbumL(TMCPTriggerDestination aDestination);
+    
+    /**
+     * Installs an rmpty action, mainly for readability purposes.
+     *
+     * @since S60 5.0
+     * @param aDestination Destination trigger that should launch the action.
+     */
+    void InstallEmptyActionL(TMCPTriggerDestination aDestination);
+   
+    /**
+     * Resets the Bitmap cache.
+     *
+     * @since S60 5.0
+     */
+    void ResetBitmapCache();
+    
+    TUint RegisterPublisherL( 
+        const TDesC& aPublisherId, 
+        const TDesC& aContentId,
+        const TDesC& aContentType );
+    
+    TUint ExtractItemId( const CLiwGenericParamList& aInParamList );
+   
+    /**
+     * Get a heap descriptor from the resource file
+     *
+     * @since S60 5.0
+     */
+    void GetLocalizedStringL(RResourceFile& aResourceFile, HBufC*& aRetBuf,
+            TInt aResourceId);
+
+    void PublishDeferred();
+    static TInt DoPublish(TAny * aMusicContentPublisher);
+    void DoPublishAllL();
+    void DoPublishModifiedL();
+    void DoPublishDeleteAllL();
+    void DoPublishCmdL(const TDesC8& aCmd, const TDesC8& aKey, const CLiwMap * aValue);
+
+    
+	/**
+    * Callback function for CPeriodic.
+    * Defer the creation of MCP plugin to allow the rest of homescreen plugins to be loaded and updated.
+    * This is a temporary solution which shall be replaced with HarvesterServer in Starterlist. 
+	* HarvesterServer shall then do the time consuming initialization of MPX Collection and Playback 
+	* and Harvester servers instead.
+    */
+
+    static TInt UpdateCallback(TAny* aContentPublisher);
+    
+	void DoUpdate();
+
+private: // data
+
+    /**
+     * Instance of CPS interface used for update with CPS.
+     * Not own
+     */
+    MLiwInterface* iCPSInterface;
+
+    /**
+     * Creates the plugins and manages the plugins table.
+     * Own.
+     */
+    CPluginManager* iPluginManager;
+    
+    /**
+     * Pointer to the active plugin.
+     * Not own.
+     */    
+    CMCPPlugin* iActivePlugin;
+    
+    /**
+     * mapping for the destination translation.
+     */    
+    struct TDestinationItem {
+    	  explicit TDestinationItem(const TMCPDestinationItem& aItem);
+        TPtrC  iType;
+        TPtrC8 iDataKey;
+        TPtrC8 iMaskKey;
+    };
+    RHashMap<TInt, TDestinationItem>    iDestinationMap;
+    
+    /**
+     * mapping for the destination  image info translation.
+     */    
+    RHashMap<TInt, TSize> iImageDestinationSizeMap;
+    
+    /**
+     * bitmap cache map.
+     */    
+    RHashMap<TInt, TBmpMsk> iBitmapCache;
+    
+    /**
+     * The published data
+     */
+    RMusicContentMap iPublishingDataMap;
+    RMusicContentMap iPublishingActionMap;
+    
+    /**
+    * Deferred callback to DoPublishL
+    */
+    CAsyncCallBack * iDeferredPublish;
+    
+    /**
+    * Skin server session.
+    */
+    RAknsSrvSession iAknsSrvSession;
+    
+    /**
+    * Buffers for the localized strings
+    */
+    HBufC* iNowPlayingBuffer;
+    HBufC* iLastPlayedBuffer;
+    HBufC* iGoToMusicBuffer;
+
+    CMCPHarvesterPublisherObserver* iHPObserver;
+    TBool iWidgetForeground;
+
+    HBufC* iInstanceId;
+    
+	// timer to start creating mcpplugin
+    CPeriodic* iUpdateIdle;    
+   
+    };
+
+#endif // C_MUSICCONTENTPUBLISHER_H
+
+//  End of File