diff src/aci2/bmi/mmimmsom.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/bmi/mmimmsom.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,1452 @@
+
+/*******************************************************************************
+
+					TI (Shanghai)
+
+********************************************************************************                                                                              
+
+ This software product is the property of TI (Shanghai) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.                                 
+                                                                              
+********************************************************************************
+
+ $Project name:	TISHMMS Project                                                    
+ $Project code:	BMI (6349)                                                           
+ $Module:		MMS
+ $File:		    MmiMMSom.h
+ $Revision:		1.0                                                       
+                                                                              
+ $Author:		Yan Bin(bin-yan@ti.com)                                                         
+ $Date:		    28/08/03                                                     
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+ 
+    This module provides definitions of the types and
+    constants which are shared across the MMS
+    application modules.
+   
+********************************************************************************
+ $History: MmiMMSom.c
+
+    xreddymn Aug-20-2005 MMI-SPR-32709
+    Added support for previewing objects before inserting into MMS
+
+       xrashmic 08 Feb, 2005 MMI-SPR-27853
+       Added more parameters to the information_dialog function
+
+    xreddymn Jan-31-2005 MMI-SPR-28483: Support for MIDI objects
+
+    xrashmic 28 Jan, 2004 MMI-SPR-28166
+    Added support for saving Plugin Images
+
+    xrashmic 7 Dec, 2004 MMI-SPR-23965
+    Description: Not able to extract the objects in EMS message
+    Solution: Extract and store the objects in the Object Manager
+
+        xrashmic 29 Nov, 2004 MMI-SPR-26161
+        Description: The downloaded object through wap was not visible to the MMI
+        Solution: The downloaded wap object is available in the object manager 
+        and can be used by the MMS
+
+    Bug Id 1 & 9 : 		12 Aug, 2004 - xpradipg  
+    Description:"No Media" displayed instead of Options screen 
+    Solution: Added the BMI information window instead of writing directly onto the display
+
+	Bug Id 25 : 		13 Aug, 2004 - xrashmic
+	Description: Changed the Insert note to Insert, Preview is not yet implemented, 
+	therefore commented for time being
+
+	28/08/03			Original TI(Shanghai) BMI version.	
+	   
+ $End
+
+*******************************************************************************/
+#define MMI_MMSOM_C
+
+#define ENTITY_MFW
+
+/* includes */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif
+#include "prim.h"
+
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#include "mfw_edt.h"
+#include "mfw_tim.h"
+#include "mfw_phb.h"
+#include "ksd.h"
+#include "psa.h"
+#include "mfw_sms.h"
+#include "mfw_smsi.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_lng.h"
+#include "mfw_sat.h"
+#include "mfw_kbd.h"
+#include "mfw_nm.h"
+
+#include "psa_util.h"
+
+#include "dspl.h"
+// #include "unicode_types.h"
+
+#include "MmiMain.h"
+#include "MmiDummy.h"
+//#include "MmiLists.h"
+#include "MmiMmi.h"
+#include "mmiCall.h"//GW 29/11/01 for 'callNumber'
+
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+//#include "MmiEditor.h"
+#include "MmiBookShared.h" // MZ 
+#include "mmimmsmenu.h"
+#include "mmimmsom.h"
+#include "mmiwindow.h"
+#include "mfw_ffs.h"
+
+#include "cus_aci.h"
+
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+#include "aci_cmh.h"	//GW 29/11/01 added for types in aci_fd.h
+#include "aci_fd.h"		//GW 29/11/01 added for types in 'cmh.h'
+#include "cmh.h" 		//GW 29/11/01 added for types in 'cmh_phb.h'
+#include "cmh_phb.h"	//GW 29/11/01 added for cmhPHB_getAdrStr
+
+#include "mmiColours.h"
+
+
+
+// ronaldc 8-5
+
+#include "mg4def.h"
+#include "evtdefs.h"
+#include "mg4stu.h"
+#include "Mg4Dal.h"
+#include "mg4devif.h"
+#include "dalevt.h"
+#include "evif.h"
+#include "mg4str.h"
+#include "mmif.h"
+#include "mg4mem.h"
+
+
+MfwWin* getWinData( MfwHnd win);
+
+/*********************************************************************
+
+				 DYNAMIC MENU WINDOW. DECLARATION
+
+**********************************************************************/
+
+
+
+static MfwMnuAttr MmsOm_menuAttrib =
+{
+    &melody_menuArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
+    -1,                                 /* use default font         */
+    NULL,                               /* with these items         */
+    0,                                   /* number of items     */
+	COLOUR_LIST_XX, TxtNull, MNUATTRSPARE
+};
+
+extern ESTATUS DisplayImageByObjId(MDword id, MBool bFullScreen);
+
+static int MMSom_OPTexeInsert(MfwMnu* m, MfwMnuItem* i);
+static int MMSom_OPTexePreview(MfwMnu* m, MfwMnuItem* i);
+static int MMSom_OPTexeDelete(MfwMnu* m, MfwMnuItem* i);
+USHORT MMSom_OPTexePreview_Available( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi );
+
+static MfwMnuItem MMSom_OPTItems [] =
+{
+    {0,0,0,(char *)TxtMMSInsert,0,(MenuFunc)MMSom_OPTexeInsert,item_flag_none},
+    {0,0,0,(char *)TxtDelete,0,(MenuFunc)MMSom_OPTexeDelete,item_flag_none},
+    {0,0,0,(char *)TxtMMSPreview,0,(MenuFunc)MMSom_OPTexePreview,MMSom_OPTexePreview_Available},
+};
+
+static MfwMnuAttr MMSom_OPTAttrib =
+{
+    &SmsRead_R_OPTArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
+    -1,                                 /* use default font         */
+    MMSom_OPTItems,                      /* with these items         */
+    sizeof(MMSom_OPTItems)/sizeof(MfwMnuItem), /* number of items     */
+    COLOUR_LIST_SMS,	TxtNull, MNUATTRSPARE
+
+};
+static ListMenuData *menu_list_data=NULL;
+
+#if 1
+
+static int currentObjectNumber = 0;
+
+/***********************************************************************************************************************
+
+
+***********************************************************************************************************************/
+
+#pragma DATA_SECTION (g_ObjectBuffer, ".MMSFSBUF0");
+
+UCS2 g_ObjectFilename[] = {'j','p','g','0',0};
+UCS2 g_AMRFilename[] = {'a','m','r','0',0};
+
+unsigned char g_ObjectBuffer[30 * 1024];//liuyu do not need in mass production
+//xrashmic 7 Dec, 2004 MMI-SPR-23965
+extern EV_S_EXTRACTABLE_IN_MESSAGE apExtractableInMessage;
+extern PP_S_OBJECT_DATA  *appObj;
+extern int attachmentInEMS;
+UCS2 filename[14];
+ESTATUS M4_StoreExtractedObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type);
+//xrashmic 08 Feb, 2005 MMI-SPR-27853
+extern T_MFW_HND information_dialog(USHORT TxtId1, USHORT TxtId2,char* Txt1, char* Txt2, USHORT SoftKeyTxtId1, USHORT SoftKeyTxtId2, int timer, T_MFW_EVENT keyEvents, T_VOID_FUNC callback);
+
+/*!	\brief	Notify the menu system that the action has failed
+ */
+void M4_ActionError(ESTATUS aEStatus)
+{
+	if(aEStatus==EObjectAlreadyExists)
+	{
+		TRACE_EVENT("EObjectAlreadyExists!!!");
+	}else
+		TRACE_EVENT_P1("MMS action error: %d",(int )aEStatus);
+}
+
+/*!	\brief	Notify the menu system that the action has been completed successfully.
+ *
+ */
+void M4_ActionComplete()
+{
+	TRACE_EVENT("MMS action complete");
+}
+
+void M4_ObjectAttribFreeFunc (void *aObjectAtrrib)
+{
+	M4_S_OBJECT_ATTRIB *objectAttrib = aObjectAtrrib;
+	TRACE_FUNCTION("M4_ObjectAttribFreeFunc");
+
+	FREE_MEMORY((void*)objectAttrib, sizeof(*objectAttrib));
+}
+
+void M4_ObjectItemFreeFunc ( void *aObjectItem)
+{
+	M4_S_OBJECT_ITEM *objectItem = aObjectItem;
+	TRACE_FUNCTION("M4_ObjectItemFreeFunc");
+
+	FREE_MEMORY((void*)objectItem, sizeof(*objectItem));
+}
+ESTATUS M4_StorePicEventHandler(EVENT_ID aeId, EVENT_TYPE aeType, 
+                           MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle)
+{
+	TRACE_FUNCTION("M4_StorePicObjectEventHandlerFunc");
+	switch (aeId)
+	{
+	case EMG4_FileOpDone :
+		currentObjectNumber++;
+		TRACE_EVENT("mms:case EMG4_FileOpDone begin");
+		M4_StoreNextPicObject(EvtHandle);
+		break;
+	default:
+		TRACE_EVENT("mms:default EMG4_FileOpDone begin");
+		FREE_MEMORY((void*)EvtHandle, sizeof(*EvtHandle));
+	}
+
+	return ENoError;
+}
+
+ESTATUS M4_StoreSndEventHandler(EVENT_ID aeId, EVENT_TYPE aeType, 
+                           MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle)
+{
+	TRACE_FUNCTION("M4_StoreSndObjectEventHandlerFunc");
+	switch (aeId)
+	{
+	case EMG4_FileOpDone :
+		currentObjectNumber++;
+		TRACE_EVENT("mms:case EMG4_FileOpDone begin");
+		M4_StoreNextSndObject(EvtHandle);
+		break;
+	default:
+		TRACE_EVENT("mms:default EMG4_FileOpDone begin");
+		FREE_MEMORY((void*)EvtHandle, sizeof(*EvtHandle));
+	}
+
+	return ENoError;
+}
+
+void M4_StoreNextSndObject(EVT_HANDLE aEvtHandler)
+{
+	TRACE_FUNCTION("M4_StoreNextSndObject");
+	if (currentObjectNumber < MAX_MMS_MEDIA)
+	{
+		ESTATUS estatus;
+		M4_S_OBJECT_ITEM *objectItem = NULL;
+		M4_S_OBJECT_ATTRIB *objectAttrib = NULL;
+
+		objectItem   = (M4_S_OBJECT_ITEM*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ITEM));
+		objectAttrib  = (M4_S_OBJECT_ATTRIB*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ATTRIB));
+		
+		{
+			struct stat_s  stat;
+			char filename[]="/amr0";
+                     signed char Ffs_ret;
+			
+			filename[4]='0'+currentObjectNumber;
+			g_AMRFilename[3]='0'+currentObjectNumber;
+			
+			Ffs_ret = ffs_stat(filename, &stat); 
+            
+                     if (Ffs_ret != 0)//empty file id found 
+                     { 
+                         //xmzhou_trace_string("M4_StoreNextSndObject file not found");
+                         return;
+                     }
+                     
+			TRACE_EVENT_P1("read jpg size: %d", stat.size);
+			ffs_fread(filename, (void *) g_ObjectBuffer,stat.size);
+			
+			objectItem->objectSize			= stat.size;
+			objectItem->pData			= (MByte *)g_ObjectBuffer;
+			objectItem->memHdr.freeFunc	= M4_ObjectItemFreeFunc;
+
+			objectAttrib->drmInfo				= EDrmNotSet;
+			objectAttrib->memHdr.freeFunc		= M4_ObjectAttribFreeFunc;
+			objectAttrib->objectFile.fileNameLen= 10;
+			objectAttrib->objectFile.pFileName  = (UCS2 *)g_AMRFilename;
+			objectAttrib->objectId				= 100 + currentObjectNumber;
+			objectAttrib->objectSize			= stat.size;
+			objectAttrib->type					= EMtMimeAmr;
+		}
+
+			
+		TRACE_EVENT("MMS: OM_StoreObjectAsync begin");
+		estatus = OM_StoreObjectAsync(aEvtHandler,objectItem,objectAttrib);
+		TRACE_EVENT_P1("MMS: OM_StoreObjectAsync end:%d",estatus);
+		if (estatus != ENoError)
+		{
+			M4_ActionError(estatus);
+			FREE_MEMORY((void*)aEvtHandler, sizeof(*aEvtHandler));
+		}
+	}
+	else
+	{
+		FREE_MEMORY((void*)aEvtHandler, sizeof(*aEvtHandler));
+		M4_ActionComplete();
+	}
+
+}
+
+void M4_StoreNextPicObject(EVT_HANDLE aEvtHandler)
+{
+	TRACE_FUNCTION("M4_StoreNextPicObject");
+	if (currentObjectNumber < MAX_MMS_MEDIA)
+	{
+		ESTATUS estatus;
+		M4_S_OBJECT_ITEM *objectItem = NULL;
+		M4_S_OBJECT_ATTRIB *objectAttrib = NULL;
+
+		objectItem   = (M4_S_OBJECT_ITEM*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ITEM));
+		objectAttrib  = (M4_S_OBJECT_ATTRIB*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ATTRIB));
+		
+		{
+			struct stat_s  stat;
+			char filename[]="/jpg0";
+                     signed char Ffs_ret;
+			
+			filename[4]='0'+currentObjectNumber;
+			g_ObjectFilename[3]='0'+currentObjectNumber;
+			
+			Ffs_ret = ffs_stat(filename, &stat); 
+            
+                     if (Ffs_ret != 0)//empty file id found 
+                     { 
+                         //xmzhou_trace_string("M4_StoreNextPicObject file not found");
+                         return;
+                     }
+                     
+			TRACE_EVENT_P1("read jpg size: %d", stat.size);
+			ffs_fread(filename, (void *) g_ObjectBuffer,stat.size);
+			
+			objectItem->objectSize			= stat.size;
+			objectItem->pData			= (MByte *)g_ObjectBuffer;
+			objectItem->memHdr.freeFunc	= M4_ObjectItemFreeFunc;
+
+			objectAttrib->drmInfo				= EDrmNotSet;
+			objectAttrib->memHdr.freeFunc		= M4_ObjectAttribFreeFunc;
+			objectAttrib->objectFile.fileNameLen= 10;
+			objectAttrib->objectFile.pFileName  = (UCS2 *)g_ObjectFilename;
+			objectAttrib->objectId				= 100+currentObjectNumber;
+			objectAttrib->objectSize			= stat.size;
+			objectAttrib->type					= EMtMimeJpeg;;
+		}
+
+			
+		TRACE_EVENT("MMS: OM_StoreObjectAsync begin");
+		estatus = OM_StoreObjectAsync(aEvtHandler,objectItem,objectAttrib);
+		TRACE_EVENT_P1("MMS: OM_StoreObjectAsync end:%d",estatus);
+		if (estatus != ENoError)
+		{
+			M4_ActionError(estatus);
+			FREE_MEMORY((void*)aEvtHandler, sizeof(*aEvtHandler));
+		}
+	}
+	else
+	{
+		FREE_MEMORY((void*)aEvtHandler, sizeof(*aEvtHandler));
+		M4_ActionComplete();
+	}
+
+}
+
+
+// insert objects into OM.
+void M4_InsertPicObjectIntoOM()
+{
+
+	EVT_HANDLE evtHandler=NULL;
+	TRACE_FUNCTION("M4_InsertPicObjectIntoOM");
+
+       evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));
+
+	memset(evtHandler,0x00,sizeof(EVT_STRUCT));
+	evtHandler->handler         = M4_StorePicEventHandler;
+
+	currentObjectNumber = 0;
+
+	M4_StoreNextPicObject(evtHandler);
+}
+void M4_InsertSndObjectIntoOM()
+{
+	EVT_HANDLE evtHandler=NULL;
+	TRACE_FUNCTION("M4_InsertSndObjectIntoOM");
+
+	   evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));
+
+	memset(evtHandler,0x00,sizeof(EVT_STRUCT));
+	evtHandler->handler 		= M4_StoreSndEventHandler;
+
+	currentObjectNumber = 0;
+
+	M4_StoreNextSndObject(evtHandler);
+}
+
+// insert Object into current message
+
+void M4_InsertObjectIntoMessage(M4_OBJECT_ID aObjectID)
+{
+	ESTATUS eResult=0;
+	TRACE_FUNCTION("M4_InsertObjectIntoMessage");
+	eResult=DAL_PostMessage(EMG4_InsertObject,EMG4_Type_NotUsed,aObjectID,0);
+	TRACE_EVENT_P2("MMS: M4_InsertObjectIntoMessage:%d, obj:%d", eResult,aObjectID);
+}
+
+/*
+delete obejct from OM.
+*/
+ESTATUS M4_DeleteObjectEventHandlerFunc(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle)
+{
+	TRACE_FUNCTION("M4_DeleteObjectEventHandlerFunc");
+	switch (aeId)
+	{
+	case EMG4_FileOpDone :
+		M4_ActionComplete();
+		break;
+	}
+	FREE_MEMORY((void*)evtHandle, sizeof(*evtHandle));
+	return ENoError;
+}
+
+
+void M4_DeleteObjectFromOM(M4_OBJECT_ID aObjectID)
+{
+	EVT_HANDLE evtHandler;
+	ESTATUS eResult=0;
+
+	/* Create the event handler */
+    evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));	
+	if (evtHandler == NULL)
+	{
+		M4_ActionError(EOutOfMemory);
+		return;
+	}
+
+	memset(evtHandler,0x00,sizeof(EVT_STRUCT));						/* Reset the structure */		
+	evtHandler->handler = M4_DeleteObjectEventHandlerFunc;
+	
+	eResult=OM_DeleteObjectAsync(evtHandler,aObjectID);
+	TRACE_EVENT_P1("MMS: OM_DeleteObjectAsync:%d", eResult);	
+}
+
+
+/*
+List obejct from OM.
+*/
+
+static M4_S_OBJECT_LIST*		g_pObjectList	= NULL;
+static UBYTE          				g_current_select=0;  /*indicate the current object*/
+
+void M4_ListObjects(UINT32 ObjType)
+{
+	MDword conditions = 0;
+	ESTATUS eResult=0;
+	TRACE_FUNCTION("M4_ListObjects");
+
+    if (ObjType == MMS_INSERT_SOUND)
+    {
+        conditions = OM_MT_SOUND_NO_DRM;
+    }
+    else if (ObjType == MMS_INSERT_PICTURE)
+    {
+        conditions = OM_MT_IMAGE_NO_DRM;
+    }    
+    else if (ObjType == EMS_INSERT_SOUND)
+    {
+        conditions = OM_MT_EMS_PREDEF_SOUND;
+    }
+    else if (ObjType == EMS_INSERT_PICTURE)
+    {
+        conditions = OM_MT_EMS_PREDEF_ANIM;
+    }
+//xrashmic 7 Dec, 2004 MMI-SPR-23965
+// Separate lists for the user defined Image and Picture objects
+    else if (ObjType == EMS_INSERT_PICTURE_USR)
+    {
+        conditions = OM_MT_EMS_IMAGE;
+    }
+    else if (ObjType == EMS_INSERT_SOUND_USR)
+    {
+        conditions = OM_MT_EMS_SOUND;
+    }
+    
+    else
+    {
+        //xmzhou_trace_string("M4_ListObjects() error ObjType");
+        return;
+    }
+	
+	//conditions = OM_MT_SOUND_NO_DRM;
+	eResult=OM_ListObjectsByParam(conditions,&g_pObjectList);
+	if(eResult==EObjectNotFound)
+	{
+		TRACE_EVENT("MMS: OM_ListObjectsByParam:not found");	
+	}else
+	{	TRACE_EVENT_P1("MMS: OM_ListObjectsByParam:%d", eResult);	
+	}
+	M4_ActionComplete();	/* Post back to the menu system to say that we have finished the action */
+}
+void M4_FreeListObjectsMemory()
+{
+	TRACE_FUNCTION("M4_FreeListObjectsMemory");
+	if (g_pObjectList)
+	{
+		g_pObjectList->memHdr.freeFunc(g_pObjectList);
+		g_pObjectList = NULL;
+	}
+}
+
+//int ConvertUcs2To8BitString(pUcs2String, uLength, p8BitString)
+
+#endif
+
+#define MMS_OM_LIST_BEGIN
+
+
+/*******************************************************************************
+
+ $Function:     MMSomList_cb
+
+ $Description:  Callback function for the melody list.
+
+ $Returns:    none
+
+ $Arguments:  Parent - parent window.
+        ListData - Menu item list
+*******************************************************************************/
+
+void MMSomList_cb(T_MFW_HND * Parent, ListMenuData * ListData)
+{
+
+	if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR)
+	|| (ListData->Reason EQ LISTS_REASON_HANGUP))	// sbh - added hangup key
+	{
+		listsDestroy(ListData->win);
+		MMI_DestoryWindow(Parent);
+	}
+	else if(ListData->Reason EQ LISTS_REASON_SELECT)
+	{
+		g_current_select=ListData->CursorPosition;
+		MMSom_OPT_start(ListData->win,0);
+	}else if(ListData->Reason EQ LISTS_REASON_SCROLL)
+	{
+		TRACE_FUNCTION ("MMSom_OPTexePreview()");
+		DisplayImageByObjId(g_pObjectList->pList[ListData->CursorPosition].objectId,EFalse);
+
+	}
+}
+
+
+//    Bug Id 1 & 9 : 		12 Aug, 2004 - xpradipg  
+/*******************************************************************************
+
+ $Function:     No_Media_info_cb
+
+ $Description:  Callback function for the information dialogue when media list is empty
+
+ $Returns:    none
+
+ $Arguments:   
+*******************************************************************************/
+static void No_Media_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	switch(reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+		case INFO_KCD_CLEAR:
+		case INFO_TIMEOUT:
+			TRACE_EVENT_P1("the value of win in No_media_info_cb is %x",*((int*)win));
+			MMI_DestoryWindow(win);
+		    	break;
+		default:
+	    	break;
+    }
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_exec_cb
+
+ $Description:	Exec callback function of the MMS Create window 
+ 
+ $Returns:		none
+
+ $Arguments:	win - window handler
+ 				event - mfw event
+ 				parameter - optional data.
+ 
+*******************************************************************************/
+char g_ObjectTitle[MAX_MMS_MEDIA][32];
+
+void MMSom_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+    /* callback handler for events sent to to trigger execution */
+{
+	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
+	int i;
+        T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION ("MMSom_exec_cb()");
+
+	switch (event)
+	{
+	case MWM_CREATE:
+		/* initialization of administrative data */
+		TRACE_EVENT("MWM_CREATE");
+
+		//yanbin:  call magic4 function to create object list
+		M4_ListObjects((UINT32)parameter);
+		
+		if(g_pObjectList==NULL)
+		{
+			TRACE_EVENT("!!!no media object");
+			TRACE_EVENT ("Insert objects into OM");
+			
+			if ((UINT32)parameter == MMS_INSERT_SOUND)
+			{
+				M4_InsertSndObjectIntoOM();
+			}
+			else if ((UINT32)parameter == MMS_INSERT_PICTURE)
+			{
+				M4_InsertPicObjectIntoOM();
+			}
+			else
+			{ 
+				//xmzhou_trace_string("MMSom_exec_cb error obj type");
+			}
+			
+			// xreddymn Aug-09-2004, Why is winShow being called in a Window Callback ?
+			//winShow(win);
+			break;
+		}
+		
+		TRACE_EVENT_P1("M4_ListObjects total:%d",g_pObjectList->numItems);
+		
+		menu_list_data =(ListMenuData *) ALLOC_MEMORY(sizeof(ListMenuData));
+        if (menu_list_data == NULL)
+            {
+//                xmzhou_trace_string("menu_list_data == NULL error");
+                return;
+            }
+		menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( g_pObjectList->numItems * sizeof(T_MFW_MNU_ITEM) );
+        
+        if (menu_list_data->List  == NULL)
+            {
+//                xmzhou_trace_string("menu_list_data->List == NULL error");
+                return;
+            }
+		
+		for (i = 0; i < g_pObjectList->numItems ; i++)
+		{
+			char tempbuf[64];
+			mnuInitDataItem(&menu_list_data->List[i]);
+			menu_list_data->List[i].flagFunc = item_flag_none;
+			ConvertUcs2To8BitString(g_pObjectList->pList[i].objectFile.pFileName, 
+									g_pObjectList->pList[i].objectFile.fileNameLen, (MByte*) tempbuf);
+			sprintf(g_ObjectTitle[i],"%d:%s-(%d B)",i,tempbuf, g_pObjectList->pList[i].objectSize);
+//			data->menu_list_data->List[i].str  = "pic1";
+			menu_list_data->List[i].str  = g_ObjectTitle[i];
+		}
+
+		menu_list_data->ListLength =g_pObjectList->numItems;
+		menu_list_data->ListPosition = 1;
+		menu_list_data->CursorPosition = 1;
+		menu_list_data->SnapshotSize = g_pObjectList->numItems;
+		menu_list_data->Font = 0;
+		menu_list_data->LeftSoftKey = TxtSoftSelect;
+		menu_list_data->RightSoftKey = TxtSoftBack;
+		menu_list_data->KeyEvents = KEY_ALL;
+		menu_list_data->Reason = 0;
+		menu_list_data->Strings = TRUE;
+		menu_list_data->Attr   = &MmsOm_menuAttrib;
+		menu_list_data->autoDestroy    = FALSE;
+		listDisplayListMenu(win,menu_list_data,(ListCbFunc)MMSomList_cb,0);
+		
+		/* put the (new) dialog window on top of the window stack */
+		// xreddymn Aug-09-2004, Why is winShow being called in a Window Callback ?
+		//winShow(win);
+		break;
+		
+	case MWM_ONDRAW:
+		TRACE_EVENT("MWM_ONDRAW");
+		//xpradipg 12 Aug, 2004 : Bug Id 1 & 9
+		//"No Media" displayed instead of Options screen 
+		//check for any object present in the object buffer before displaying the error screen.
+		//since MWM_ONDRAW is called for every draw. Add the BMI information dialog screen.
+		if(g_pObjectList ==NULL)
+		{
+		
+			dlg_initDisplayData_TextStr( &display_info,  TxtNull, TxtSoftBack, "No Media",  TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)No_Media_info_cb, FOREVER, KEY_HUP| KEY_RIGHT);
+	   		info_dialog (win, &display_info);
+		}
+		break;
+	case MWM_DESTORY:
+	     	if(menu_list_data)
+	     	{
+	     		if(menu_list_data->List)
+	     		{
+	     			FREE_MEMORY((void*)(menu_list_data->List),g_pObjectList->numItems* sizeof(T_MFW_MNU_ITEM ));
+	     		}
+		 	FREE_MEMORY((void*)(menu_list_data),sizeof(ListMenuData));
+	     	}
+		M4_FreeListObjectsMemory();
+		break;
+	default:
+	    break;
+	}
+}
+
+
+/**/
+T_MFW_HND l_omwin=NULL;
+/*******************************************************************************
+
+ $Function:    	MMSom_start
+
+ $Description:	Start the creation of the main window for Create MMS
+ 
+ $Returns:		mfw window handler 
+
+ $Arguments:	parent_window - Parent window handler
+ 				menuAttr	  - Menu attributes.
+ 
+*******************************************************************************/
+T_MFW_HND MMSom_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
+{
+
+	TRACE_FUNCTION ("MMSom_start()");
+	l_omwin= MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSom_exec_cb,(void*)menuAttr, 0, 0, 0);
+	return l_omwin;
+}
+
+
+#define MMS_OM_OPTION_BEGIN
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPT_exec_cb
+
+ $Description:	Exec callback function for the Option window
+ 
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				value - unique id
+ 				parameter - optional data.
+ 			
+*******************************************************************************/
+
+void MMSom_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+    /* callback handler for events sent to to trigger execution */
+{
+	TRACE_FUNCTION ("MMSom_OPT_exec_cb()");
+	switch (event)
+	{
+	case MWM_CREATE:
+		
+		TRACE_EVENT("Event:MWM_CREATE");
+		/* initialization of administrative data */
+		//		data->parent_data = parent_data;		
+		winShow(win);
+		break;
+	case MWM_ONDRAW:
+		dspl_ClearAll();
+		displaySoftKeys(TxtSoftOK,TxtSoftBack);
+		break;
+	case MWM_DESTORY:
+		break;
+	default:
+	    return;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPT_start
+
+ $Description:	Start the creation of the main window for Create MMS
+ 
+ $Returns:		mfw window handler 
+
+ $Arguments:	parent_window - Parent window handler
+ 				menuAttr	  - Menu attributes.
+ 
+*******************************************************************************/
+T_MFW_HND MMSom_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
+{
+
+	TRACE_FUNCTION ("SmsRead_R_start()");
+	return MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSom_OPT_exec_cb, (void*)menuAttr,0,&MMSom_OPTAttrib, 0);
+}
+
+
+
+static int MMSom_OPTexeInsert(MfwMnu* m, MfwMnuItem* i)
+{
+    T_MFW_HND    win  = mfwParent(mfw_header());
+
+       TRACE_EVENT_P1("MMSom_OPTexeInsert():%d",g_current_select);
+	//data->current_select
+	DAL_PostMessage(EMG4_Edit,EMG4_Type_NotUsed,0,NULL);
+       M4_InsertObjectIntoMessage(g_pObjectList->pList[g_current_select].objectId);
+	MMI_DestoryWindow(win);
+}
+
+//xreddymn Aug-19-2005 MMI-SPR-32709: Preview of Objects
+
+extern MDword DeviceMelodyId;
+extern BOOL g_M4_display_active;
+
+BOOL g_M4_object_preview = FALSE;
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPTexePreview_Available
+
+ $Description:	Decides whether to display "Preview" or not for the selected
+                object
+ 
+ $Returns:		0 = Do not display the "Preview" option
+                1 = Display the "preview" option
+
+ $Arguments:	m = MfwMnuTag, passed by MFW
+ 				ma = MfwMnuAttrTag, passed by MFW
+ 				mi = MfwMnuItemTag, passed by MFW
+ 
+*******************************************************************************/
+
+USHORT MMSom_OPTexePreview_Available( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
+{
+	switch(g_pObjectList->pList[g_current_select].type)
+	{
+		case EMtEmsPredefMelody:
+		case EMtEmsMelody:
+		case EMtMimeAmr:
+		case EMtMimeMidi:
+//		case EMtMimeSMidi:
+//		case EAudioWav:
+//		case EMtSMAF:
+				return 0;
+		case EMtMimeBmp:
+		case EMtMimePng:
+		case EMtMimeGif:
+		case EMtMimeJpeg:
+		case EMtMimeWbmp:
+				return 0;
+		default:
+				return 1;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPTexePreview_kbd_cb
+
+ $Description:	Key handler for object preview
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	e = Event
+ 				k = structure containing key code
+ 
+*******************************************************************************/
+
+static int MMSom_OPTexePreview_kbd_cb (MfwEvt e, MfwKbd *k)
+{
+    T_MFW_HND    win  = mfwParent(mfw_header());
+
+    if (e & KEY_LONG)
+    {
+        switch (k->code)
+        {
+    	case KCD_HUP:
+    	case KCD_RIGHT:
+            MMI_DestoryWindow(win);
+            break;
+    	default:
+            return MFW_EVENT_CONSUMED;
+        }
+    }
+    else
+    {
+        switch (k->code)
+        {
+    	case KCD_HUP:
+    	case KCD_RIGHT:
+            MMI_DestoryWindow(win);
+            break;
+    	default:
+            return MFW_EVENT_CONSUMED;
+        }
+    }
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPTexePreview_cb
+
+ $Description:	Window handler for object preview
+ 
+ $Returns:		None
+
+ $Arguments:	win = Handle to the window
+ 				event = Window event
+ 
+*******************************************************************************/
+
+void MMSom_OPTexePreview_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+    /* callback handler for events sent to to trigger execution */
+{
+	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
+	int i;
+    T_DISPLAY_DATA display_info;
+    MRect apClientRect;
+
+	switch (event)
+	{
+		case MWM_CREATE:
+			break;
+
+		case MWM_ONDRAW:
+			dspl_Enable(0);
+			g_M4_object_preview = TRUE;
+			g_M4_display_active = TRUE;
+			DeviceGetClientRect(&apClientRect);
+			dspl_SetBgdColour(COL_White);
+			dspl_Clear(apClientRect.topLeft.uX, apClientRect.topLeft.uY, apClientRect.bottomRight.uX, apClientRect.bottomRight.uY);
+			DisplayImageByObjId(g_pObjectList->pList[g_current_select].objectId,EFalse);
+			displaySoftKeys(TxtNull,TxtSoftBack);
+			g_M4_display_active = FALSE;
+			g_M4_object_preview = FALSE;
+			dspl_Enable(1);
+			break;
+
+		case MWM_DESTORY:
+			break;
+
+		default:
+		    break;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPTexePreview_Start
+
+ $Description:	Opens the object preview window
+ 
+ $Returns:		Handle to the object preview window
+
+ $Arguments:	parent_window = Handle to the parent window
+ 				menuAttr = Menu Attributes (Optional)
+ 
+*******************************************************************************/
+
+T_MFW_HND MMSom_OPTexePreview_Start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
+{
+	T_MFW_HND win;
+	win= MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSom_OPTexePreview_cb,(void*)menuAttr, (MfwCb)MMSom_OPTexePreview_kbd_cb, 0, 0);
+	return win;
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_preview_dialog_cb
+
+ $Description:	Handles dialog events for preview window for sound objects
+ 
+ $Returns:		None
+
+ $Arguments:	win = Handle to the window
+ 				identifier = (Not used in this function)
+ 				reason = Dialog event
+ 
+*******************************************************************************/
+
+static void MMSom_preview_dialog_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	switch(reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+		case INFO_KCD_CLEAR:
+		case INFO_TIMEOUT:
+			MMI_DestoryWindow(win);
+			DeviceCancelMelody(DeviceMelodyId);
+	    	break;
+		default:
+	    	break;
+    }
+}
+
+/*******************************************************************************
+
+ $Function:    	MMSom_OPTexePreview
+
+ $Description:	Called when "preview" is selected in the menu
+ 
+ $Returns:		None
+
+ $Arguments:	win = Handle to the window
+ 				identifier = (Not used in this function)
+ 				reason = Dialog event
+ 
+*******************************************************************************/
+
+static int MMSom_OPTexePreview(MfwMnu* m, MfwMnuItem* i)
+{
+	M4_S_OBJECT_ITEM *appObjectItem;
+	T_MFW_HND    win  = mfwParent(mfw_header());
+
+	TRACE_FUNCTION ("MMSom_OPTexePreview()");
+	
+	switch(g_pObjectList->pList[g_current_select].type)
+	{
+		case EMtEmsPredefMelody:
+		case EMtEmsMelody:
+		case EMtMimeAmr:
+		case EMtMimeMidi:
+//		case EMtMimeSMidi:
+//		case EAudioWav:
+//		case EMtSMAF:
+			{
+				T_DISPLAY_DATA display_info;
+				OM_RetrieveObject(&appObjectItem, g_pObjectList->pList[g_current_select].objectId);
+				DevicePlayMelody(g_pObjectList->pList[g_current_select].type, appObjectItem->pData, appObjectItem->objectSize, NULL);
+				dlg_initDisplayData_TextStr( &display_info,  TxtNull, TxtSoftBack, "Playing ...",  TxtNull, COLOUR_STATUS);
+				dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSom_preview_dialog_cb, FOREVER, KEY_HUP | KEY_RIGHT);
+		   		info_dialog (win, &display_info);
+		   	}
+			break;
+
+		case EMtMimeBmp:
+		case EMtMimePng:
+		case EMtMimeGif:
+		case EMtMimeJpeg:
+		case EMtMimeWbmp:
+			MMSom_OPTexePreview_Start(win, NULL);
+			break;
+
+		default:
+			break;
+	}
+}
+
+//xreddymn Aug-19-2005 MMI-SPR-32709: Preview of Objects, changes end
+
+static void MMSom_Delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+
+	T_MFW_HND l_parent=NULL;
+	TRACE_FUNCTION("MMSom_Delete_cb");
+
+	switch (reason)
+	{
+	case INFO_KCD_LEFT:
+		//yanbin: Call magic4 function to delete current object
+		M4_DeleteObjectFromOM(g_pObjectList->pList[g_current_select].objectId);
+		l_parent=MMI_ParentWindow(win);
+		MMI_DestoryWindow(win);
+		TRACE_EVENT_P2("l_omwin:%x,l_parent:%x ", l_omwin, l_parent);
+//		MMI_DestoryWindow(l_omwin);
+		break;
+	case INFO_KCD_HUP:
+	case INFO_KCD_RIGHT:
+	case INFO_KCD_CLEAR:
+		//return back
+		MMI_DestoryWindow(win);
+		break;
+	default:
+		break;
+	}
+}
+static int MMSom_OPTexeDelete(MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND    win  = mfwParent(mfw_header());
+	T_DISPLAY_DATA display_info;
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSom_Delete_cb, FOREVER, KEY_LEFT|KEY_RIGHT|KEY_CLEAR|KEY_HUP);
+	info_dialog (win, &display_info);
+}
+
+#undef MMI_MMSOM_C
+
+ /*******************************************************************************
+
+ $Function:     M4_StoreExtarctedObjectEventHandler
+
+ $Description:  Event handler for M4_StoreDownloadedObject 
+                      xrashmic 7 Dec, 2004 MMI-SPR-21621
+ $Returns:    ESTATUS
+
+ $Arguments:  
+*******************************************************************************/
+
+ESTATUS M4_StoreDownloadObjEventHandler(EVENT_ID aeId, EVENT_TYPE aeType, 
+                           MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle)
+{
+    switch (aeId)
+    {
+        case EMG4_FileOpDone :
+            break;
+        default:
+            FREE_MEMORY((void*)EvtHandle, sizeof(*EvtHandle));
+    }
+
+    return ENoError;
+}
+
+ /*******************************************************************************
+
+ $Function:     M4_StorePluginObjEventHandler
+
+ $Description:  Event handler for M4_StorePluginObject 
+                      xrashmic 28 Jan, 2005 MMI-SPR-28166
+ $Returns:    ESTATUS
+
+ $Arguments:  
+*******************************************************************************/
+
+ESTATUS M4_StorePluginObjEventHandler(EVENT_ID aeId, EVENT_TYPE aeType, 
+                           MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle)
+{
+    switch (aeId)
+    {
+        case EMG4_FileOpDone :
+	            //xrashmic 28 Jan, 2005 MMI-SPR-28166
+                    information_dialog(TxtSaved, TxtNull, NULL, NULL, TxtNull, TxtSoftBack, THREE_SECS, KEY_RIGHT|KEY_HUP, NULL);
+            break;
+        default:
+            FREE_MEMORY((void*)EvtHandle, sizeof(*EvtHandle));
+    }
+
+    return ENoError;
+    }
+
+ /*******************************************************************************
+
+ $Function:     M4_StoreExtarctedObjectEventHandler
+
+ $Description:  Event handler for M4_StoreExtarctedObject 
+                      xrashmic 7 Dec, 2004 MMI-SPR-23965
+ $Returns:    ESTATUS
+
+ $Arguments:  
+*******************************************************************************/
+
+ESTATUS M4_StoreExtractedObjectEventHandler(EVENT_ID aeId, EVENT_TYPE aeType, 
+                           MESSAGE_PARAM ampParam, EVT_HANDLE EvtHandle)
+{
+    ESTATUS status;
+    switch (aeId)
+    {
+        case EMG4_FileOpDone :
+                attachmentInEMS++;
+                if(appObj)
+                    appObj->oms.freeFunc(appObj);
+                if(attachmentInEMS<apExtractableInMessage.NumOfAttachments)
+                {
+                    EV_ReadExtractableItem(&apExtractableInMessage.pAttachmentsInMessage[attachmentInEMS],&appObj);
+                    status = M4_StoreExtractedObject((char *)appObj->objData.pByteData, appObj->lObjectDataSize, appObj->contentType);
+                 }
+                else 
+                {
+                    apExtractableInMessage.omh.freeFunc(&apExtractableInMessage);
+                    //xrashmic 08 Feb, 2005 MMI-SPR-27853
+                    //Added more parameters to the information_dialog function
+                    information_dialog(TxtAllObjects, TxtExtracted, NULL,NULL, TxtNull, TxtSoftBack, FOREVER, KEY_RIGHT|KEY_HUP, NULL);
+                }   
+            break;
+         case EOutOfMemory:   
+                    //xrashmic 08 Feb, 2005 MMI-SPR-27853
+                    //Added more parameters to the information_dialog function
+                   information_dialog(TxtError, TxtExtracting, NULL,NULL, TxtNull, TxtSoftBack, FOREVER, KEY_RIGHT|KEY_HUP, NULL);
+            break;         
+        default:
+            FREE_MEMORY((void*)EvtHandle, sizeof(*EvtHandle));
+    }
+
+    return ENoError;
+}
+
+ /*******************************************************************************
+
+ $Function:     M4_StoreIntoObjectManager
+
+ $Description:  Stores objects into Object manager.
+                      xrashmic 7 Dec, 2004 MMI-SPR-23965, MMI-SPR-26161
+ $Returns:    ESTATUS
+
+ $Arguments:  objbuffer - The object data
+                     size - The object size
+                     evtHandler - contains the call back function for the events
+                     obj_Type - The type of the object
+                     objectId - Object Id
+*******************************************************************************/
+
+ESTATUS M4_StoreIntoObjectManager(char *objbuffer, int size,EVT_HANDLE evtHandler, M4_E_OBJECT_TYPE obj_Type,M4_OBJECT_ID objectId)
+{
+    ESTATUS estatus;
+    M4_S_OBJECT_ITEM *objectItem = NULL;
+    M4_S_OBJECT_ATTRIB *objectAttrib = NULL;
+    TRACE_FUNCTION("M4_StoreIntoObjectManager");
+
+    objectItem   = (M4_S_OBJECT_ITEM*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ITEM));
+    objectAttrib  = (M4_S_OBJECT_ATTRIB*) ALLOC_MEMORY( sizeof(M4_S_OBJECT_ATTRIB));
+
+    objectItem->objectSize			= size;
+    objectItem->pData			= (MByte *)objbuffer;
+    objectItem->memHdr.freeFunc	= M4_ObjectItemFreeFunc;
+
+    objectAttrib->drmInfo				= EDrmNotSet;
+    objectAttrib->memHdr.freeFunc		= M4_ObjectAttribFreeFunc;
+    objectAttrib->objectFile.fileNameLen= sizeof(filename);
+    objectAttrib->objectFile.pFileName  = filename;
+    objectAttrib->objectId				= objectId;
+    objectAttrib->objectSize			= size;
+    objectAttrib->type					= obj_Type;
+    estatus = OM_StoreObjectAsync(evtHandler,objectItem,objectAttrib);
+    if (estatus != ENoError)
+    {
+        TRACE_EVENT("ERROR inserting into obejct manager");
+        switch(estatus)
+        {
+            case ENotActive:
+                TRACE_EVENT("ERROR ENotActive");
+                break;
+            case EBadArgument:
+                TRACE_EVENT("ERROR EBadArgument ");
+                break;
+            case EObjectAlreadyExists:
+                TRACE_EVENT("ERROR EObjectAlreadyExists");
+                break;
+            case EOutOfMemory:
+                TRACE_EVENT("ERROR EOutOfMemory");
+                break;
+             default:
+                TRACE_EVENT("ERROR");
+            }
+    }
+    return estatus;
+}
+ /*******************************************************************************
+
+ $Function:     M4_StoreExtarctedObject
+
+ $Description:  Insert the extracted object into Object manager.
+                      xrashmic 7 Dec, 2004 MMI-SPR-23965
+ $Returns:    ESTATUS
+
+ $Arguments:  objbuffer - The object data
+                     size - The object size
+                     obj_Type - The type of the object
+*******************************************************************************/
+
+ESTATUS M4_StoreExtractedObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type)
+{
+    ESTATUS estatus;
+    EVT_HANDLE evtHandler=NULL;
+    char tempFile[14];
+    int strLength=0;
+    M4_OBJECT_ID objectId;
+    TRACE_FUNCTION("M4_StoreExtractedObject");
+    memset(evtHandler,0x00,sizeof(EVT_STRUCT));
+
+    evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));
+    evtHandler->handler         = M4_StoreExtractedObjectEventHandler;
+
+
+    if(obj_Type== EMtEmsMelody || obj_Type==EMtEmsNoteFormat)
+    {
+        FFS_flashData.audio_usr_obj++;
+        strLength=sprintf(tempFile,"Audio%d",FFS_flashData.audio_usr_obj);
+        objectId=500+ FFS_flashData.audio_usr_obj;        
+    }
+    else  
+    {
+        FFS_flashData.image_usr_obj++;
+        strLength=sprintf(tempFile,"Image%d",FFS_flashData.image_usr_obj);     
+        objectId=500+ FFS_flashData.image_usr_obj;      
+    }
+    Convert8BitStringToUcs2((const MByte *)&tempFile,strLength,filename);
+    estatus = M4_StoreIntoObjectManager(objbuffer,size,evtHandler,obj_Type,objectId);
+    // To update the number of extracted objects.
+    flash_write();  
+    return estatus;
+}
+
+
+/*******************************************************************************
+
+ $Function:     M4_StoreDownloadedObject
+
+ $Description:  Insert the downloaded object into Object manager.
+                      xrashmic 29 Nov, 2004 MMI-SPR-26161
+ $Returns:    ESTATUS
+
+ $Arguments:  objbuffer - The object data
+                     size - The object size
+                     obj_Type - The type of the object
+*******************************************************************************/
+ESTATUS M4_StoreDownloadedObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type )
+{
+    ESTATUS estatus;
+    EVT_HANDLE evtHandler=NULL;
+        char tempFile[14];
+    int strLength=0;
+    M4_OBJECT_ID objectId;
+
+    TRACE_FUNCTION("M4_StoreDownloadedObject");
+    memset(evtHandler,0x00,sizeof(EVT_STRUCT));
+    evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));
+    evtHandler->handler         = M4_StoreDownloadObjEventHandler;
+    // xreddymn Jan-31-2005 MMI-SPR-28483: Included MIDI MIME type
+    if((obj_Type==EMtMimeAmr)||(obj_Type==EMtMimeMidi))
+    {
+        FFS_flashData.audio_usr_obj++;
+        strLength=sprintf(tempFile,"Audio%d",FFS_flashData.audio_usr_obj);
+        objectId=500+ FFS_flashData.audio_usr_obj;                
+    }
+    else  
+    {
+         FFS_flashData.image_usr_obj++;
+        strLength=sprintf(tempFile,"Image%d",FFS_flashData.image_usr_obj);     
+        objectId=500+ FFS_flashData.image_usr_obj;        
+    }
+    Convert8BitStringToUcs2((const MByte *)&tempFile,strLength,filename);
+    estatus = M4_StoreIntoObjectManager(objbuffer,size,evtHandler,obj_Type,objectId);
+    // To update the number of downloaded objects.
+    flash_write();
+    return estatus;
+
+}
+
+/*******************************************************************************
+
+ $Function:     M4_StorePluginObject
+
+ $Description:  Insert the Pluign object into Object manager.
+                      xrashmic 28 Jan, 2004 MMI-SPR-28166
+ $Returns:    ESTATUS
+
+ $Arguments:  objbuffer - The object data
+                     size - The object size
+                     obj_Type - The type of the object
+*******************************************************************************/
+ESTATUS M4_StorePluginObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type )
+{
+    ESTATUS estatus;
+    EVT_HANDLE evtHandler=NULL;
+        char tempFile[14];
+    int strLength=0;
+    M4_OBJECT_ID objectId;
+
+    TRACE_FUNCTION("M4_StoreDownloadedObject");
+    memset(evtHandler,0x00,sizeof(EVT_STRUCT));
+    evtHandler  = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT));
+    evtHandler->handler         = M4_StorePluginObjEventHandler;
+    // xreddymn Jan-31-2005 MMI-SPR-28483: Included MIDI MIME type
+    if((obj_Type==EMtMimeAmr)||(obj_Type==EMtMimeMidi))
+    {
+        FFS_flashData.audio_usr_obj++;
+        strLength=sprintf(tempFile,"Audio%d",FFS_flashData.audio_usr_obj);
+        objectId=500+ FFS_flashData.audio_usr_obj;                
+    }
+    else  
+    {
+         FFS_flashData.image_usr_obj++;
+        strLength=sprintf(tempFile,"Image%d",FFS_flashData.image_usr_obj);     
+        objectId=500+ FFS_flashData.image_usr_obj;        
+    }
+    Convert8BitStringToUcs2((const MByte *)&tempFile,strLength,filename);
+    estatus = M4_StoreIntoObjectManager(objbuffer,size,evtHandler,obj_Type,objectId);
+    // To update the number of downloaded objects.
+    flash_write();
+    return estatus;
+
+}
+
+ 
+#undef MMI_MMSOM_C
+