FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/mmimmsbox.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/mmimmsbox.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,2577 @@ + +/******************************************************************************* + + 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: mmimmsbox.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: MmiMmsBox.c + + xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + Play mms error restart rectified. Removing unwanted screens in the callback of the "New mms" + dialog screen. + xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + Changed from static allocations for g_mmstopic and g_mmsstatus to dynamic allocation. + + Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C + Description: MMS: During MMS Reply, Enter Number shows Empty. + Solution: Senders number is extracted from the Message Header and is displayed. + + Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + Description: Mp3 Ringer Implementation + Solution: The Midi Ringer application has been enhanced to support mp3 as ringer. + The interface function names have been modified. + + May 11 2005 REF: MMI-SPR-29887 x0012849 + To Implement the deferred MMS retrieval. + Apr 07 2005 REF: MMI-SPR-27826 x0012849 + To avoid crash when a user replies to the MMS which is there in Inbox + + xrashmic 08 Feb, 2005 MMI-SPR-27853 + Added more parameters to the information_dialog function + + Apr 05, 2005 REF: ENH 29994 xdeepadh + Description: Implementation of Generic Midi Ringer and Modification of existing Midi Test Application + Solution: Generic Midi Ringer and Midi Test Application were implemented. + + xreddymn Jan-31-2004 MMI-SPR-28483: Support for MIDI objects + + x0012849 Feb-03-2005 MMI-SPR-28224 : + To allow the user to scroll up and down while creating, reading or forwarding MMS . + + xrashmic 14 Dec, 2004 MMI-SPR-23921 + Implementing the forward functionality for MMS + + + xreddymn Dec-20-2004 MMI-SPR-27382 + (1) Added "Please Wait" screen when deleting messages from a folder. + This prevents the user from navigating menus during the process. + (2) Modified inbox refresh to occur only when inside the inbox list screen. + + MMI-SPR-27384: Dec-17-2004 - xreddymn + Changes for MMS/EMS Inbox/Sent/Unsent folder presentation + + 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 + + MMI-SPR-23981: Nov-30-2004 - xreddymn + Modified delete message behaviour. + Fixed "Play MMS Error" message that appears when trying to read messages + + MMI-SPR-25278: Nov-29-2004 - xreddymn + Implemented FFS limits for MMS/EMS storage + + CRR 24456: 19 Oct 2004 - xpradipg + Description: On opening MMS with PNG image "Play MMS Error" is displayed. + On pressing Back D-sample resets. + Solution: The EPlayModeStop was posted even if the EPlayModeRun was not + posted. The EPlayModeStop event posting is controled. + + CRR: 25291 - xrashmic 14 Oct 2004 + Description: The sent EMS is stored in unsent folder. + Solution: The Outbox has been removed, instead we now have Sent folder for the sent EMS + + MMI-SPR-25273: Oct-14-2004 - xreddymn + Description: EMS forward not working + Solution: Added changes to implement the EMS forward feature + + CRR 25268: 13 Oct 2004 - xpradipg + Description: Unable to see the Number / name and the status read/unread of + the received EMS/MMS + Solution: The status of each message is updated as soon as the Message is + read, and "old"/"new" is appended based on the status flag + + CRR 25270: 13 Oct 2004 - xpradipg + Description: EMS: Titles such as "no name" is added to EMSs with no titles + Solution: The corresponding name is retrieved from the phone book for the + number from which EMS is received, if name is not present number is + displayed in Inbox + + CRR 25277: 06 Oct 2004 - xpradipg + Description: Recieving an ems when inbox is open + Solution: A refresh event is sent to the Inbox list which inturn updates + the list + + MMI-SPR-25148: Sep-24-2004 - xreddymn + Changes to map object index correctly to displayed list index + in case of extractable object list. + + xrashmic 22 Sep, 2004 MMI-SPR-25032 + To play the buzzer when there are sound objects in EMS message + + MMI-SPR-24735: Sep-16-2004 - xreddymn + Changes related to EMS screen flickering issue + + MMI-SPR-23962 (TII_MMS31): Aug-20-2004 - xreddymn + Extract objects modified not to include text and unknown objects + + MMI-SPR-23933 (TII_MMS17): Aug-17-2004 - xreddymn + Display a more meaningful error message when playback fails. + + MMI-SPR-23972 (TII_MMS41) Aug-27-2004 - xreddymn + Correctly close message session when extracting objects or reading the message + + MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): Aug-26-2004 - xreddymn + Keep track of MMS/EMS display + + CRR 23963: xpradipg 26 Aug 2004 + Description: Remove "Reply" option from Unsent folder + Solution: The current selected folder is stored in a variable and depending on the selected folder + the menu item display is controled. + + CRR 23959: xpradipg 26 Aug 2004 + Description: List not updated after deleting the messages in Unsent/Inbox folder + Solution: The list is refreshed everytime the user returns from the options menu + + xrashmic 26 Aug, 2004 MMI-SPR-23931 + Only the complete message will be displayed in the inbox, outbox, unsent folders + + Bug Id 19 : 13 Aug, 2004 - xrashmic + Description: MMS compose is displayed when reply option is selected + for an EMS message + Solution: When reply is selected for a message from the inbox, we need to display corresponding + compose screen i.e either EMS compose or MMS compose screen + + 17/01/04 Replace mfw edit with AUI edit. + 28/08/03 Original TI(Shanghai) BMI version. + + $End + +*******************************************************************************/ +#define MMI_MMSBOX_C + +#define ENTITY_MFW + +/* includes */ +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.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" + +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#else /* NEW_EDITOR */ +#ifdef EASY_TEXT_ENABLED +#include "MmiLatinPredText.h" +#endif /* EASY_TEXT_ENABLED */ +#include "MmiEditor.h" +#endif /* NEW_EDITOR */ + +#include "MmiBookShared.h" // MZ +#include "mmimmsmenu.h" +#include "mmimmsbox.h" +#include "mfw_ffs.h" +#include "mmiwindow.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" +//xrashmic 22 Sep, 2004 MMI-SPR-25032 +#include "audio.h" + + +#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" +//Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +#include "mfw_midi.h" +#include "MmiSounds.h" +#endif +//xrashmic 14 Dec, 2004 MMI-SPR-23921 +#include "mmimmscreate.h" +extern int MMSactive; + + +//xreddymn Aug-26-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): To keep track of MMS display +extern BOOL g_M4_display_active; + +//CRR 25270: 13 Oct 2004 - xpradipg +extern T_idle idle_data; +extern int bookFindNameInPhonebook( const char *p_pszNumber, T_MFW_PHB_ENTRY *p_pEntry ); +int MMS_Is_Unread_Msgs_Inbox(void); + +//CRR 23959: xpradipg 26 Aug 2004 +//CRR 23963: xpradipg 26 Aug 2004 +//Holdsthe current selected folder value. Default is set to 0xFF - +//indicating no folder is assigned +UBYTE folder=0xFF; +// May 12 2005 REF: MMI-SPR-29887 +// is_deferdownload will be TRUE when Deferred retrieval of MMS starts +BOOL is_deferdownload = FALSE; +#define MMS_RECEIVE_PROGRESS -27 +// May 12 2005 REF: MMI-SPR-29887 +//Used to check whther control went to DeviceEndAck while Retrieving the MMS +// If that is the case then dont display NewNotificaion dialog. +BOOL is_notifyResponse = FALSE; +// Jun 23 2005 REF: MMI-SPR-29887 x0012849 +extern BOOL is_downloadcancelled; +extern UBYTE rtvprogressValue; +//CRR 25277: xpradipg 06 Oct 2004 +extern MfwHnd mmsboxwinhnd; +//GW 29/11/01 - added header file - removed extern void callNumber(UBYTE* number); +MfwWin* getWinData( MfwHnd win); + +// xreddymn Nov-29-2004: Added externals +//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); + +extern T_MFW_HND g_inSaveModeWin; + +// xreddymn Nov-30-2004 MMI-SPR-23981 +T_MFW_HND g_OptionsWin; +T_MFW_HND g_MmsBoxWin; +//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 +T_MFW_HND g_MmsReadWin; +T_MFW_HND g_MmsExtractEdtWin; +// xreddymn Dec-20-2004 MMI-SPR-27382 +T_MFW_HND g_MmsBoxWinSavedHnd; +T_MFW_HND g_MmsPleaseWaitWin; + +//xrashmic 7 Dec, 2004 MMI-SPR-23965 +int attachmentInEMS=0; +EV_S_EXTRACTABLE_IN_MESSAGE apExtractableInMessage; +PP_S_OBJECT_DATA *appObj; + +/********************************************************************* + + DYNAMIC MENU WINDOW. DECLARATION + +**********************************************************************/ + +/* xreddymn Dec-16-2004 MMI-SPR-27384: MMS/EMS message list is now displayed as a two line per item list */ +static MfwMnuAttr MmsBox_menuAttrib = +{ + &melody_menuArea, + MNU_LEFT | MNU_LIST_2_LINE | MNU_CUR_LINE, /* double line menu */ + -1, /* use default font */ + NULL, /* with these items */ + 0, /* number of items */ + COLOUR_LIST_XX, TxtNull, MNUATTRSPARE + +}; + +static MfwMnuAttr MmsBox_ExtractMedia_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 + +}; + +static int MMSBox_OPTexeRead(MfwMnu* m, MfwMnuItem* i); +// May 12 2005 REF: MMI-SPR-29887 x0012849 +//Prototyes of the functions. START +static int MMSBox_OPTexeDeferDownload(MfwMnu* m, MfwMnuItem* i); +static void DeferDownloadMsg(MM_MESSAGE_ID msgId); +void MMSDownLoadNow(MM_MESSAGE_ID msgId); +static ESTATUS DeferDownloadMsgCallback(EVENT_ID aeId, + EVENT_TYPE aeType, + MESSAGE_PARAM ampParam, + EVT_HANDLE evtHandle); +// May 12 2005 REF: MMI-SPR-29887 x0012849 +//Prototyes of the functions. END +static int MMSBox_OPTexeExtract(MfwMnu* m, MfwMnuItem* i); +static int MMSBox_OPTexeForward(MfwMnu* m, MfwMnuItem* i); +static int MMSBox_OPTexeDelete(MfwMnu* m, MfwMnuItem* i); +static int MMSBox_OPTexeReply(MfwMnu* m, MfwMnuItem* i); +//CRR 23963: xpradipg 26 Aug 2004 +USHORT MMSBox_Is_Unsent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ); +// May 12 2005 REF: MMI-SPR-29887 x0012849 +//Prototyes of the function +USHORT MMSBox_Is_NotRetrieved( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ); +// May 12 2005 REF: MMI-SPR-29887 x0012849 +//Prototyes of the function +USHORT MMSBox_Is_Retrieved( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ); +void MMSBox_Extract_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); + + +static MfwMnuItem MMSBox_OPTItems [] = +{ + // May 11 2005 REF: MMI-SPR-29887 x0012849 + //Choose either of one Read or Retrieve based on the type of MMS. + {0,0,0,(char *)TxtRead,0,(MenuFunc)MMSBox_OPTexeRead,MMSBox_Is_Retrieved}, + // May 11 2005 REF: MMI-SPR-29887 x0012849 + //Retrieve will be showed in case if the MMS is not complete + {0,0,0,(char *)TxtRetrieve,0,(MenuFunc)MMSBox_OPTexeDeferDownload,MMSBox_Is_NotRetrieved}, + {0,0,0,(char *)TxtExtract,0,(MenuFunc)MMSBox_OPTexeExtract,MMSBox_Is_Retrieved}, + //CRR 23963: xpradipg 26 Aug 2004 + //added MMSBox_Is_Unsent which controls the display of the menu item + {0,0,0,(char *)TxtReply,0,(MenuFunc)MMSBox_OPTexeReply,MMSBox_Is_Unsent}, + {0,0,0,(char *)TxtForward,0,(MenuFunc)MMSBox_OPTexeForward,MMSBox_Is_Retrieved}, + {0,0,0,(char *)TxtDelete,0,(MenuFunc)MMSBox_OPTexeDelete,item_flag_none}, +}; + +//xrashmic 7 Dec, 2004 MMI-SPR-23965 +// Separate options list for the EMS message. The extract menu item is removed from this list +static MfwMnuItem EMSBox_OPTItems [] = +{ + {0,0,0,(char *)TxtRead,0,(MenuFunc)MMSBox_OPTexeRead,item_flag_none}, + //CRR 23963: xpradipg 26 Aug 2004 + //added MMSBox_Is_Unsent which controls the display of the menu item + {0,0,0,(char *)TxtReply,0,(MenuFunc)MMSBox_OPTexeReply,MMSBox_Is_Unsent}, + {0,0,0,(char *)TxtForward,0,(MenuFunc)MMSBox_OPTexeForward,item_flag_none}, + {0,0,0,(char *)TxtDelete,0,(MenuFunc)MMSBox_OPTexeDelete,item_flag_none}, +}; + +static MfwMnuAttr MMSBox_OPTAttrib = +{ + &SmsRead_R_OPTArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + -1, /* use default font */ + MMSBox_OPTItems, /* with these items */ + sizeof(MMSBox_OPTItems)/sizeof(MfwMnuItem), /* number of items */ + COLOUR_LIST_SMS, TxtNull, MNUATTRSPARE + +}; +//xrashmic 7 Dec, 2004 MMI-SPR-23965 +// Separate options list for the EMS message. The extract menu item is removed from this list +static MfwMnuAttr EMSBox_OPTAttrib = +{ + &SmsRead_R_OPTArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ + -1, /* use default font */ + EMSBox_OPTItems, /* with these items */ + sizeof(EMSBox_OPTItems)/sizeof(MfwMnuItem), /* number of items */ + COLOUR_LIST_SMS, TxtNull, MNUATTRSPARE + +}; + +#define MMS_BOX_LISTALLMMS_BEGIN + +/* pointer used to get mms list */ +MM_S_MESSAGE_HEADER_LIST* g_pMessageHeaderList = NULL; +int g_currentMessage=0; + +//CRR 25270 & CRR 25268: 14 Oct 2004 - xpradipg +// xreddymn Dec-16-2004 MMI-SPR-27384: Modified string lengths for Inbox/Unsent/Sent presentation +#define MMS_BOX_LIST_STRING_MAX_LENGTH 72 +#define MMS_BOX_LIST_LINE_MAX_LENGTH 36 +#define MMS_BOX_LIST_SUB_MAX_LENGTH 28 +//xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 +//Changed the static allocation to dynamic for the following variables +char *g_mmstopic; +char *g_mmsstatus; + +static ListMenuData *box_menu_list_data=NULL; +static ListMenuData *extra_menu_list_data=NULL; + +// xreddymn Sep-24-2004 MMI-SPR-25148 : An array that maps displayed index to an index in the list of objects extracted +static S16 *extra_menu_list_indices=NULL; + +//CRR 24456: 19 Oct 2004 - xpradipg +//flag to control the posting of EPlayModeStop +static int MmsReadStatus =ENoError; +void M4_FreeListFolderMemory(void) +{ + /* If there is any data */ + if (g_pMessageHeaderList != NULL) + { + g_pMessageHeaderList->memHdr.freeFunc(g_pMessageHeaderList); + + g_pMessageHeaderList = NULL; + } + + return; +} +//CRR 23963: xpradipg 26 Aug 2004 +/******************************************************************************* + + $Function: MMSBox_Is_Unsent + + $Description: decides if the Reply menu item needs to be displayed or not + + $Returns: False if it should be displayed + + $Arguments: +*******************************************************************************/ +USHORT MMSBox_Is_Unsent( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + // May 11 2005 REF: MMI-SPR-29887 x0012849 + if(folder == MMS_UNSENT ||(g_pMessageHeaderList->ppList[g_currentMessage].complete == FALSE )) + { + return 1; + } + return 0; +} + // May 11 2005 REF: MMI-SPR-29887 x0012849 + // New Function added +/******************************************************************************* + $Function: MMSBox_Is_NotRetrieved + $Description: decides whether Retrieve option need to be displayed or not + $Returns: False if it should be displayed + $Arguments: +*******************************************************************************/ +USHORT MMSBox_Is_NotRetrieved( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + if(g_pMessageHeaderList->ppList[g_currentMessage].complete == FALSE) + { + return 0; + } + return 1; +} + // May 11 2005 REF: MMI-SPR-29887 x0012849 + // New Function added +/******************************************************************************* + $Function: MMSBox_Is_Retrieved + $Description: decides whether Read options need to be displayed or not + $Returns: False if it should be displayed + $Arguments: +*******************************************************************************/ +USHORT MMSBox_Is_Retrieved( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) +{ + if(g_pMessageHeaderList->ppList[g_currentMessage].complete == TRUE) + { + return 0; + } + return 1; +} + +/******************************************************************************* + + $Function: MMSBoxList_cb + + $Description: Callback function for the melody list. + + $Returns: none + + $Arguments: Parent - parent window. + ListData - Menu item list +*******************************************************************************/ + +void MMSBoxList_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + T_MFW_HND win = mfwParent(mfw_header()); + + TRACE_EVENT_P1("MMSBoxList_cb : %d", ListData->Reason); + 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_currentMessage=ListData->CursorPosition; + MMSBox_OPT_start(ListData->win,0); + } +} + +static void MMSBox_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + TRACE_FUNCTION("MMSBox_info_cb"); + switch (reason) + { + case INFO_KCD_LEFT: + MMI_DestoryWindow(win); + break; + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + MMI_DestoryWindow(win); + break; + default: + break; + } +} + +/******************************************************************************* + + $Function: MMSBox_DT_string + + $Description: Forms a string from a date/time structure + + $Returns: none + + $Arguments: s - String into which the output is written. + Must be sufficiently large: Doesn't perform any bounds check. + t - MMS time stamp structure + + xreddymn Dec-16-2004 + +*******************************************************************************/ +void MMSBox_DT_string(char *s,MM_S_TIME_STAMP *t) +{ + sprintf(s,"%02d/%02d %02d:%02d",t->day,t->month,t->hour,t->min); +} + +/******************************************************************************* + + $Function: MMSBox_exec_cb + + $Description: Exec callback function of the MMS Create window + + $Returns: none + + $Arguments: win - window handler + event - mfw event + parameter - optional data. + +*******************************************************************************/ +void MMSBox_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; + ESTATUS eStatus=0; + MM_LIST_PARAM listParams = 0; + //CRR 25270 && CRR 25268: 13 Oct 2004 - xpradipg + //moved the declaration to the start of the function + int lenSub=0; + T_MFW_PHB_ENTRY phonebook_entry; + // May 17 2005 REF: MMI-SPR-29887 xreddymn + //list_size will give the value - No of Messages presently in the list + int list_size; + TRACE_FUNCTION ("MMSBox_exec_cb()"); + + switch (event) + { + //CRR 23963: xpradipg 26 Aug 2004 + //New case added, this is invoked when ever the user returns back from the + //options screen. This cleans the list of messages and re-populates the list + case MWM_REDRAW: + // we delete the list - free the list - before actually allocating and drawing. + list_size = box_menu_list_data->ListLength; + if(box_menu_list_data->win) + listsDestroy(box_menu_list_data->win); + if(box_menu_list_data) + { + if(box_menu_list_data->List && g_pMessageHeaderList) + { + // May 17 2005 REF: MMI-SPR-29887 xreddymn + // Use list_size to while freeing the memory + FREE_MEMORY((void*)(box_menu_list_data->List), list_size * sizeof(T_MFW_MNU_ITEM )); + } + FREE_MEMORY((void*)(box_menu_list_data),sizeof(ListMenuData)); + } + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Freeing the allocated memory on exiting the list screen + if(g_mmsstatus) + FREE_MEMORY((void*)g_mmsstatus,MMS_BOX_LIST_STRING_MAX_LENGTH); + if(g_mmstopic) + FREE_MEMORY((void*)g_mmstopic,MMS_BOX_LIST_STRING_MAX_LENGTH*g_pMessageHeaderList->size); + + //CRR 23963: xpradipg 26 Aug 2004 + //the break; is omitted intentionally, since the list is recreated using the below code + case MWM_CREATE: + //CRR 25277: xpradipg 06 Oct 2004 + //the display needs to be refreshed forcibly + dspl_Enable(0); + /* initialization of administrative data */ + TRACE_EVENT(" Event: MWM_CREATE"); + //yanbin: call magic4 function to create MMS list + /* make sure g_pMessageHeaderList be freed if not free */ + M4_FreeListFolderMemory(); + box_menu_list_data=NULL; + //CRR 23963: xpradipg 26 Aug 2004 + //CRR 23963: xpradipg 26 Aug 2004 + //check if no folder number is assigned before assigning + if(folder == 0xFF) + folder = (UBYTE)parameter; + else + parameter=(void*)folder; + TRACE_EVENT_P1("the value of folder is %d",folder); + //parameter=(folder==0xFF)?parameter:(void*)folder; + if (parameter == (void *)MMS_INBOX) + { + //xrashmic 26 Aug, 2004 MMI-SPR-23931 + //added MM_LIST_COMPLETE so that the list does not contain + //incomplete messages + //listParams = MM_LIST_INBOX|MM_LIST_COMPLETE; + //May 17 2005 REF: MMI-SPR-29887 x0012849 + //To Implement the deferred MMS retrieval. + listParams = MM_LIST_INBOX|MM_LIST_NOT_RETRIEVED; + } + //CRR: 25291 - xrashmic 14 Oct 2004 + //To display a list of the sent messages. + else if (parameter == (void *)MMS_SENT) + { + // xreddymn May-18-2005 MMI-SPR-29887: Removed MM_LIST_COMPLETE + // as it causes messages from Inbox to be listed, with the new MMS library + listParams = MM_LIST_SENT; + } + else + { + // xreddymn May-18-2005 MMI-SPR-29887: Removed MM_LIST_COMPLETE + // as it causes messages from Sent to be listed, with the new MMS library + listParams = MM_LIST_DRAFT; + } + + eStatus = DAL_ListMessagesByParam(&g_pMessageHeaderList, listParams); + + if(eStatus != ENoError) + { + //M4_DebugStringMessage("MMSBox_exec_cb: eStatus != ENoError",sizeof("MMSBox_exec_cb: eStatus != ENoError"),0); + } + + if(g_pMessageHeaderList == NULL || g_pMessageHeaderList->size ==0 ) + { + T_DISPLAY_DATA display_info; + //M4_DebugStringMessage("g_pMessageHeaderList->size==0",sizeof("g_pMessageHeaderList->size==0"),0); + if(g_pMessageHeaderList != NULL) M4_FreeListFolderMemory(); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftBack,TxtEmptyList, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_info_cb, FOREVER, KEY_RIGHT|KEY_CLEAR|KEY_HUP); + display_info.Identifier=0; + info_dialog (win, &display_info); + dspl_Enable(1); + break; + } + + box_menu_list_data =(ListMenuData *) ALLOC_MEMORY(sizeof(ListMenuData)); + box_menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( g_pMessageHeaderList->size * sizeof(T_MFW_MNU_ITEM) ); + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //dynamically allocating memory for g_mmstopic. Total size = max size of one string in the list X total number of mms + g_mmstopic=(char*)ALLOC_MEMORY(MMS_BOX_LIST_STRING_MAX_LENGTH*g_pMessageHeaderList->size); + g_mmsstatus=(char*)ALLOC_MEMORY(MMS_BOX_LIST_STRING_MAX_LENGTH); + + // xreddymn Dec-15-2004 MMI-SPR-27384: Modifications for Inbox/Unsent/Sent box presentation + // xrashmicn OMAPS00050170 + for (i = 0; (i < g_pMessageHeaderList->size) ; i++) + { + //CRR 25270: xpradipg + mnuInitDataItem(&box_menu_list_data->List[i]); + box_menu_list_data->List[i].flagFunc = item_flag_none; + //CRR 25270 && CRR 25268: 14 Oct 2004 - xpradipg + //the temporary buffer is reset after every iteration + memset(g_mmsstatus,'\0',MMS_BOX_LIST_STRING_MAX_LENGTH); + + //CRR 25270 & CRR 25268: 13 Oct 2004 - xpradipg + //Set the title to Saved if the folder being listed is Unsent + //Otherwise append thestring "New"/"Old" depending on the + //status of the read flag in the message header + if(!(listParams & MM_LIST_DRAFT)) + { + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Changed from static allocations for g_mmstopic and g_mmsstatus to dynamic allocation. + if(g_pMessageHeaderList->ppList[i].read== TRUE) + strcpy(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],"Old: "); + else + strcpy(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],"New: "); + } + else + { + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Changed from static allocations for g_mmstopic and g_mmsstatus to dynamic allocation. + strcpy(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],"Saved: "); + box_menu_list_data->List[i].str = &g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH]; + // continue; + } + //CRR 25270 & CRR 25268: 13 Oct 2004 - xpradipg + //The Topic is displayed for the mms, if the topic is not present + //then the name is searched for corresponding to the number from + //which the message was received. For EMS only the number /name is + //displayed + if(g_pMessageHeaderList->ppList[i].type!=EMtSms) + { + lenSub=GetStringBytes(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pSubject); + //CRR 25270: xpradipg + if(lenSub==0) + { + // xreddymn Dec-15-2004 MMI-SPR-27384 + switch((UBYTE)parameter) + { + case MMS_INBOX: + lenSub=GetStringBytes(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pFrom); + break; + case MMS_SENT: + lenSub=GetStringBytes(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pToList); + break; + default: + lenSub=0; + break; + } + if(lenSub==0) + { + strcpy(g_mmsstatus,"No name"); + } + else + { + if(lenSub>MMS_BOX_LIST_SUB_MAX_LENGTH) lenSub=MMS_BOX_LIST_SUB_MAX_LENGTH; + // xreddymn Dec-15-2004 MMI-SPR-27384 + switch((UBYTE)parameter) + { + case MMS_INBOX: + ConvertUcs2To8BitString(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pFrom, lenSub, (MByte*)g_mmsstatus); + break; + case MMS_SENT: + ConvertUcs2To8BitString(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pToList, lenSub, (MByte*)g_mmsstatus); + break; + default: + strcpy(g_mmsstatus,""); + break; + } + if (bookFindNameInPhonebook( g_mmsstatus, &phonebook_entry )) + { + if (phonebook_entry.name.len >0) + { + strncpy(g_mmsstatus,(const char*)phonebook_entry.name.data,lenSub); + } + } + } + } + else + { + if(lenSub>MMS_BOX_LIST_SUB_MAX_LENGTH) lenSub=MMS_BOX_LIST_SUB_MAX_LENGTH; + ConvertUcs2To8BitString(g_pMessageHeaderList->ppList[i].messageTypeHeader.mmsHeader.pSubject, lenSub, (MByte*)g_mmsstatus); + } + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Changed from static allocations for g_mmstopic and g_mmsstatus to dynamic allocation. + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],g_mmsstatus); + /* Dec-15-2004 MMI-SPR-27384: Insert the time stamp information */ + MMSBox_DT_string((char*)g_mmsstatus,&g_pMessageHeaderList->ppList[i].timestamp); + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],"\n"); + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],g_mmsstatus); + } + //CRR 25270 & CRR 25268: 13 Oct 2004 - xpradipg + //retrieve the number from the ems and look for the + //corresponding entry in the phonebook, populate the + //name if present else display the number + else + { + lenSub=GetStringBytes(g_pMessageHeaderList->ppList[i].messageTypeHeader.smsHeader.pszAddress); + if(lenSub>0) + { + if(lenSub>MMS_BOX_LIST_SUB_MAX_LENGTH) lenSub=MMS_BOX_LIST_SUB_MAX_LENGTH; + ConvertUcs2To8BitString(g_pMessageHeaderList->ppList[i].messageTypeHeader.smsHeader.pszAddress, lenSub, (MByte*)g_mmsstatus); + if (bookFindNameInPhonebook( g_mmsstatus, &phonebook_entry )) + { + if (phonebook_entry.name.len >0) + { + strncpy(g_mmsstatus,(const char*)phonebook_entry.name.data,lenSub); + } + } + } + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Changed from static allocations for g_mmstopic and g_mmsstatus to dynamic allocation. + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],g_mmsstatus); + /* Dec-15-2004 MMI-SPR-27384: Insert the time stamp information */ + MMSBox_DT_string((char*)g_mmsstatus,&g_pMessageHeaderList->ppList[i].timestamp); + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],"\n"); + strcat(&g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH],g_mmsstatus); + } + box_menu_list_data->List[i].str = &g_mmstopic[i*MMS_BOX_LIST_STRING_MAX_LENGTH]; + } + + box_menu_list_data->ListLength =g_pMessageHeaderList->size; + box_menu_list_data->ListPosition = 1; + box_menu_list_data->CursorPosition = 1; + box_menu_list_data->SnapshotSize = g_pMessageHeaderList->size; + box_menu_list_data->Font = 0; + box_menu_list_data->LeftSoftKey = TxtSoftSelect; + box_menu_list_data->RightSoftKey = TxtSoftBack; + box_menu_list_data->KeyEvents = KEY_ALL; + box_menu_list_data->Reason = 0; + box_menu_list_data->Strings = TRUE; + box_menu_list_data->Attr = &MmsBox_menuAttrib; + box_menu_list_data->autoDestroy = FALSE; + listDisplayListMenu(win,box_menu_list_data,(ListCbFunc)MMSBoxList_cb,0); + //CRR 25277: xpradipg 06 Oct 2004 + //the display needs to be refreshed forcibly + dspl_Enable(1); + break; + + case MWM_DESTORY: + TRACE_EVENT(" Event: MWM_DESTORY"); + if(box_menu_list_data) + { + if(box_menu_list_data->List && g_pMessageHeaderList) + { + FREE_MEMORY((void*)(box_menu_list_data->List),g_pMessageHeaderList->size * sizeof(T_MFW_MNU_ITEM )); + } + FREE_MEMORY((void*)(box_menu_list_data),sizeof(ListMenuData)); + } + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Freeing the allocated memory on exiting the list screen + if(g_mmsstatus) + FREE_MEMORY((void*)g_mmsstatus,MMS_BOX_LIST_STRING_MAX_LENGTH); + if(g_mmstopic) + FREE_MEMORY((void*)g_mmstopic,MMS_BOX_LIST_STRING_MAX_LENGTH*g_pMessageHeaderList->size); + + //CRR 23963: xpradipg 26 Aug 2004 + //reset the folder value to default + folder = 0xFF; + //CRR 25277: xpradipg 06 Oct 2004 + //set the handle to NULL on destroying the window + mmsboxwinhnd=NULL; + g_MmsBoxWin=NULL;//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //M4_FreeListFolderMemory frees the memory for g_pMessageHeaderList. But g_pMessageHeaderList->size is used to + //free memory for various dynamically allocated pointers eg. g_mmstopic. Hence this should be done at the end . + M4_FreeListFolderMemory(); + break; + case MWM_ONDRAW: + TRACE_EVENT(" Event: MWM_ONDRAW"); + displaySoftKeys(TxtSoftOptions,TxtSoftBack); + break; + + // xreddymn Dec-20-2004 MMI-SPR-27382: Save the handle to Inbox window + case MWM_SUSPEND: + g_MmsBoxWinSavedHnd=mmsboxwinhnd; + mmsboxwinhnd=NULL; + break; + + // xreddymn Dec-20-2004 MMI-SPR-27382: Restore the handle to Inbox window + case MWM_RESUME: + if(!mmsboxwinhnd) + { + mmsboxwinhnd=g_MmsBoxWinSavedHnd; + } + break; + + default: + break; + } + + return; +} + + +/**/ + +/******************************************************************************* + + $Function: MMSBox_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 MMSBox_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + TRACE_FUNCTION ("MMSBox_start()"); + mmeBackLight(64); + // xreddymn Nov-30-2004 MMI-SPR-23981: Retain the handle to the Message List menu window + g_MmsBoxWin=MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSBox_exec_cb,(void*)menuAttr,(T_MFW_CB)0,0,0); + return g_MmsBoxWin; +} + + +#define MMS_BOX_EXTERACT_MEDIA +#define MWM_EXTRACT_MEDIA_LIST (MWM_USER+1) +#define MWM_EXTRACT_MEDIA_NONE (MWM_USER+2) +#define MMS_EXTRACT_MEDIA_ERROR (MWM_USER+3) + +#if 1 + +PP_MESSAGE_HANDLE msgHandle = PP_MESSAGE_HANDLE_INVALID; + +PP_S_OBJECT_DATA *pObjData = NULL; + +PP_S_OBJECT_ATTRIB *pObjAttrib = NULL; + +PP_S_MIME_OBJECT_ARRAY *pObjArray = NULL; + +M4_S_OBJECT_ITEM *pItem = NULL; + +M4_S_OBJECT_ATTRIB *pAttrib = NULL; + +UCS2 medianame[32]={'p','i','c','0',0}; +int len_medianame=10; + + +void M4_FreeAttrib(void * block) /*Pointer to function used to free this block of memory*/ +{ + if(block) + FREE_MEMORY((void*)block,sizeof(M4_S_OBJECT_ATTRIB)); +} +void M4_FreeItem(void * block) /*Pointer to function used to free this block of memory*/ +{ + if(block) + FREE_MEMORY((void*)block,sizeof(M4_S_OBJECT_ITEM)); +} + +/***************************************************************************** + * Func : SaveObjectDone + * Desc : It is the callback function indicating the result of saving object. + *****************************************************************************/ +ESTATUS M4_SaveObjectDone(EVENT_ID aeId, + EVENT_TYPE aeType, + MESSAGE_PARAM ampParam, + EVT_HANDLE evtHandle) +{ + switch(aeId) + { + case(EMG4_FileOpDone): + { + /* NOTES: + * Object storing is done + */ + + /* + * Further notification to upper layer if necessary + */ + DAL_PostMessage(EMG4_FileOpDone, + EVENT_REACTIVE, + 0, + evtHandle->parentEvtHandle); + // xreddymn Nov-26-2004 MMI-SPR-25278 + winDelete(g_inSaveModeWin); + //xrashmic 08 Feb, 2005 MMI-SPR-27853 + //Added few more parameters for this function + information_dialog(TxtSaved,TxtNull,NULL,NULL, TxtNull,TxtSoftBack,FOREVER,KEY_CLEAR|KEY_RIGHT|KEY_HUP,NULL); + } + break; + + case(EMG4_OpError): + // xreddymn Nov-26-2004 MMI-SPR-25278 + winDelete(g_inSaveModeWin); + //xrashmic 08 Feb, 2005 MMI-SPR-27853 + //Added few more parameters for this function + information_dialog(TxtFailed,TxtFatalError,NULL,NULL,TxtNull,TxtSoftBack,FOREVER,KEY_CLEAR|KEY_RIGHT|KEY_HUP,NULL); + default: + break; + } + + if(evtHandle) + { + FREE_MEMORY((void*)evtHandle,sizeof(*evtHandle)); + } + // xreddymn Aug-26-2004, MMI-SPR-24113 (TII_MMS53) and MMI-SPR-23972 (TII_MMS41) + // Removed the following lines since this is done in MWM_DESTROY of MMSBox_Extract_exec_cb +#if(0) + /* NOTES: + * The PP Session must be closed + */ + DAL_CloseMessageSession(msgHandle); + + /* Free the memory allocated before */ + pObjArray->oms.freeFunc(pObjArray); + pObjData->oms.freeFunc(pObjData); +#endif + return ENoError; +} +/***************************************************************************** + * Func : SaveObject + * Desc : User selects the object being saved + *****************************************************************************/ +ESTATUS M4_SaveObject(PP_OBJECT_ID objId, EVT_HANDLE parentHandle) +{ + ESTATUS status = ENoError; + EVT_HANDLE evtHandle = NULL; + + // xreddymn Nov-26-2004 MMI-SPR-25278 + //xrashmic 08 Feb, 2005 MMI-SPR-27853 + //Added few more parameters for this function + g_inSaveModeWin=information_dialog(TxtPleaseWait,TxtNull,NULL,NULL,TxtNull,TxtNull,FOREVER,0,NULL); + + status = DAL_GetObjectByID(msgHandle, objId, &pObjData); + TRACE_EVENT_P1("DAL_GetObjectByID :%d", status); + + if(ENoError != status) + { + return status; + } + + status = DAL_GetObjectAttributes(msgHandle, objId, &pObjAttrib); + TRACE_EVENT_P1("DAL_GetObjectAttributes :%d", status); + + if(ENoError != status) + { + pObjData->oms.freeFunc(pObjData); + return status; + } + + pItem = (M4_S_OBJECT_ITEM *)ALLOC_MEMORY(sizeof(M4_S_OBJECT_ITEM)); + + pAttrib = (M4_S_OBJECT_ATTRIB *)ALLOC_MEMORY(sizeof(M4_S_OBJECT_ATTRIB)); + + evtHandle = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT)); + + if((NULL == evtHandle) || (NULL == pItem) || (NULL == pAttrib)) + { + if(pItem) + { + FREE_MEMORY((void*)pItem,sizeof(*pItem)); + } + + if(pAttrib) + { + FREE_MEMORY((void*)pAttrib,sizeof(*pAttrib)); + } + + if(evtHandle) + { + FREE_MEMORY((void*)evtHandle,sizeof(*evtHandle)); + } + return EOutOfMemory; + } + + memset((void*)pItem, 0x00, sizeof(M4_S_OBJECT_ITEM)); + memset((void*)pAttrib, 0x00, sizeof(M4_S_OBJECT_ATTRIB)); + memset((void*)evtHandle, 0x00, sizeof(EVT_STRUCT)); + + /* NOTES: + * Copy the information into appropriate structure + */ + pItem->memHdr.freeFunc = M4_FreeItem;/* Object free function */ + pItem->objectSize = pObjData->lObjectDataSize; + pItem->pData = pObjData->objData.pByteData; + + pAttrib->memHdr.freeFunc = M4_FreeAttrib;/* Object free function */ + pAttrib->type = pObjAttrib->contentType/* Object Type: EMtMimeWbmp, etc*/; + pAttrib->objectSize = pObjData->lObjectDataSize; + pAttrib->drmInfo = EDrmNotSet; /* DRM info */ + pAttrib->objectFile.fileNameLen = len_medianame; /* User Input FileName Size */ ; + pAttrib->objectFile.pFileName = medianame; /* User Input File Name */; + + + /* NOTES: + * Setup the event handler + */ + + evtHandle->handler = M4_SaveObjectDone; + evtHandle->pData = pObjData; + evtHandle->parentEvtHandle = parentHandle; + + status = DAL_StoreObjectAsync(evtHandle, pItem, pAttrib); + TRACE_EVENT_P1("DAL_StoreObjectAsync :%d", status); + + return status; +} + +/***************************************************************************** + * Func: PPOpenMessageCallback + * Desc: + *****************************************************************************/ +ESTATUS M4_PPOpenMessageCallback(EVENT_ID aeId, + EVENT_TYPE aeType, + MESSAGE_PARAM ampParam, + EVT_HANDLE evtHandle) +{ + ESTATUS status = ENoError; + PP_OBJECT_ID objId; + T_MFW_HND win = mfwParent(mfw_header()); + //M4_DebugStringMessage("M4_PPOpenMessageCallback", sizeof("M4_PPOpenMessageCallback"), 0); + + switch(aeId) + { + case(EMG4_FileOpDone): + { + /* + * The PP Session is ready for listing objects available + */ + msgHandle = (PP_MESSAGE_HANDLE)ampParam; + + status = DAL_ListMessageObjects(msgHandle, &pObjArray); + + /* User use the this information to display the associated objects + * in this message + */ + //M4_DebugStringMessage("DAL_ListMessageObjects", sizeof("DAL_ListMessageObjects"), 0); + M4_DebugMessage(status); + //M4_DebugStringMessage("pObjArray->numOfObjects", sizeof("pObjArray->numOfObjects"), pObjArray->numOfObjects); + M4_DebugMessage(pObjArray->numOfObjects); + if(pObjArray==NULL || pObjArray->numOfObjects==0) + { + //SEND_EVENT(win, MWM_EXTRACT_MEDIA_NONE, 0, 0); + MMSBox_Extract_exec_cb (win, MWM_EXTRACT_MEDIA_NONE, 0, 0); + }else + { + // SEND_EVENT(win, MWM_EXTRACT_MEDIA_LIST, 0, 0); + MMSBox_Extract_exec_cb (win, MWM_EXTRACT_MEDIA_LIST, 0, 0); + } + } + break; + + case(EMG4_OpError): + // xreddymn Aug-20-2004 MMI-SPR-23962 (TII_MMS31): Added error handling + //SEND_EVENT(win, MMS_EXTRACT_MEDIA_ERROR, 0, 0); + MMSBox_Extract_exec_cb (win, MMS_EXTRACT_MEDIA_ERROR, 0, 0); + break; + + default: + break; + } + + if(evtHandle) + { + FREE_MEMORY ((void *)evtHandle, sizeof (EVT_STRUCT)); + } + + return ENoError; +} + +ESTATUS M4_ExtractMedia(MM_MESSAGE_ID selectedMsgId, EVT_HANDLE parentHandle) +{ + EVT_HANDLE evtHandler = NULL; + ESTATUS status = ENoError; + + evtHandler = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT)); + + if(NULL == evtHandler) + { + /* Error */ + return EOutOfMemory; + } + + memset((void*)evtHandler, 0x00, sizeof(EVT_STRUCT)); + + evtHandler->handler = M4_PPOpenMessageCallback; + evtHandler->parentEvtHandle = parentHandle; + + /* + * Open the PP session & wait for EMG4_FileOpDone + */ + + status = DAL_OpenMessageAsync(evtHandler, selectedMsgId); + TRACE_EVENT_P1("DAL_OpenMessageAsync :%d", status); + if(ENoError != status) + { + FREE_MEMORY ((void *)evtHandler, sizeof (EVT_STRUCT)); + } + return status; +} + +ESTATUS DeleteMsgCallback(EVENT_ID aeId, + EVENT_TYPE aeType, + MESSAGE_PARAM ampParam, + EVT_HANDLE evtHandle) +{ + switch(aeId) + { + case(EMG4_FileOpDone): + /* + * Msg Delete Successful + */ + // xreddymn Dec-20-2004 MMI-SPR-27382: Remove the "Please wait" screen + winDelete(g_MmsPleaseWaitWin); + // xreddymn Nov-30-2004 MMI-SPR-23981: Reload the message list + MMI_DestoryWindow(g_OptionsWin); + SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder); + break; + + case(EMG4_OpError): + /* + * Msg Delete Fail with error code in ampParam + */ + // xreddymn Dec-20-2004 MMI-SPR-27382: Remove the "Please wait" screen + winDelete(g_MmsPleaseWaitWin); + // xreddymn Nov-30-2004 MMI-SPR-23981: Display an error dialog + MMI_DestoryWindow(g_OptionsWin); + SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder); + break; + default: + break; + } + + if(evtHandle) + { + FREE_MEMORY ((void *)evtHandle, sizeof (EVT_STRUCT)); + + } +} +/***************************************************************************** + * + *****************************************************************************/ +ESTATUS DeleteMsg(MM_MESSAGE_ID msgId) +{ + EVT_HANDLE evtHandle = NULL; + + evtHandle = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT)); + + if(NULL == evtHandle) + { + return EOutOfMemory; + } + + memset((void*)evtHandle, 0x00, sizeof(EVT_STRUCT)); + + evtHandle->handler = DeleteMsgCallback; + + (void)DAL_DeleteMessageAsync(evtHandle, msgId); + + return ENoError; +} + + +#endif + +static T_MFW_HND l_extractwin=NULL; +static char topic[16]; + + +static void MMSBox_ExtractMedia_edit_cb( T_MFW_HND win, USHORT Identifier,UBYTE reason) +{ + T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; + T_DISPLAY_DATA display_info; + ESTATUS status; + + TRACE_EVENT_P1("MMSBox_ExtractMedia_edit_cb() %d", Identifier); + + switch (reason) + { + case INFO_KCD_LEFT: // confirm (press LEFT soft key) + { + + + MMS_ConvertStringToUcs2((const MByte *)(topic), + strlen(topic), + medianame); + + len_medianame=2*(strlen(topic)+1); + status=M4_SaveObject((PP_OBJECT_ID)Identifier, 0); + if(status==ENoError) + { + }else if(status==EObjectAlreadyExists) + { + + }else + { + } + } + break; + + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + //xreddymn Aug-20-2004 MMI-SPR-24114 (TII_MMS54) + //MMI_DestoryWindow(win); + break; + default: + TRACE_EVENT("Err: Default"); + break; + } + g_MmsExtractEdtWin=NULL;//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 +} + +/******************************************************************************* + + $Function: MMSBoxList_ExtractMedia_cb + + $Description: Callback function for the melody list. + + $Returns: none + + $Arguments: Parent - parent window. + ListData - Menu item list +*******************************************************************************/ + +void MMSBoxList_ExtractMedia_cb(T_MFW_HND * Parent, ListMenuData * ListData) +{ + TRACE_EVENT_P1("MMSBoxList_ExtractMedia_cb : %d", ListData->Reason); + TRACE_EVENT_P2("ExtractMedia win parent: %x, l_extractwin: %x", Parent,l_extractwin); + + 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(l_extractwin); + } + else if(ListData->Reason EQ LISTS_REASON_SELECT) + { + T_AUI_EDITOR_DATA editor_data; + + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, CENTRE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); + + //xreddymn Sep-24-2004 MMI-SPR-25148 : Modified this to get the object index from the array of indices +// AUI_edit_SetEvents(&editor_data, (USHORT)( pObjArray->pMsgObject[ListData->CursorPosition].objId), +// TRUE, FOREVER, (T_AUI_EDIT_CB)MMSBox_ExtractMedia_edit_cb); + AUI_edit_SetEvents(&editor_data, (USHORT)( pObjArray->pMsgObject[extra_menu_list_indices[ListData->CursorPosition]].objId), + TRUE, FOREVER, (T_AUI_EDIT_CB)MMSBox_ExtractMedia_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtTopics, NULL); + AUI_edit_SetAltTextStr(&editor_data, 0, TxtNames, TRUE, TxtSoftBack); + //AUI_edit_SetMode(&editor_data,ED_MODE_ALL, ED_CURSOR_UNDERLINE); + AUI_edit_SetMode(&editor_data,ED_MODE_ALPHA, ED_CURSOR_UNDERLINE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE*)topic, 16); + g_MmsExtractEdtWin = AUI_edit_Start(ListData->win, &editor_data);//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + } +} + +/******************************************************************************* + + $Function: MMSBox_Extract_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. + +*******************************************************************************/ + +/* xreddymn Aug-20-2004, MMI-SPR-23962 (TII_MMS31), Changes start: + * Set to 1 for information display using dialog box + * Set to 0 for information display using direct calls to display functions + */ +#define MMS_DIALOG_DISPLAY 1 + +/* In some cases, after object extraction, we may get an empty list. For such cases, + * MMSBox_Extract_exec_list will be set to FALSE. + */ +BOOL MMSBox_Extract_exec_list=FALSE; + +/* Keeps track of the window used to display the list or empty dialog */ +T_MFW_HND MMSBox_Extract_exec_win; + +/* Default key handler for MMIWindow. Control would be passed to this + * in case a list menu is displayed, otherwise, a custom key handler will be called + */ +extern int MMIWindow_kbd_cb (MfwEvt e, MfwKbd *k); + +#if(MMS_DIALOG_DISPLAY) +/* Call back function for the "Empty List" information dialog */ +static void MMSBox_extract_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + MMI_DestoryWindow(MMSBox_Extract_exec_win); + break; + default: + break; + } +} +#endif // MMS_DIALOG_DISPLAY + +/* Key handler: In case of list menu, control is passed to the default key handler */ +int MMSBox_Extract_exec_kbd_cb (MfwEvt e, MfwKbd *k) +{ + if(MMSBox_Extract_exec_list == TRUE) + { + return MMIWindow_kbd_cb(e, k); + } + else + { + switch (k->code) + { + case KCD_HUP: + case KCD_RIGHT: + case KCD_CLEAR: + MMI_DestoryWindow(MMSBox_Extract_exec_win); + return MFW_EVENT_CONSUMED; + break; + default: + return MFW_EVENT_CONSUMED; + } + } +} + +/* xreddymn Aug-20-2004, MMI-SPR-23962 (TII_MMS31): Changes end */ + +void MMSBox_Extract_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) + /* callback handler for events sent to to trigger execution */ +{ + int i, count; + TRACE_FUNCTION ("MMSBox_Extract_exec_cb()"); + //M4_DebugStringMessage("MMSBox_Extract_exec_cb", sizeof("MMSBox_Extract_exec_cb"),0); + + switch (event) + { + case MWM_CREATE: + TRACE_EVENT(" Event: MWM_CREATE"); + /* initialization of data */ + msgHandle = PP_MESSAGE_HANDLE_INVALID; + pObjData = NULL; + pObjAttrib = NULL; + pObjArray = NULL; + pItem = NULL; + pAttrib = NULL; + M4_ExtractMedia(g_pMessageHeaderList->ppList[g_currentMessage].id, 0); + break; + case MWM_EXTRACT_MEDIA_NONE: + { + T_DISPLAY_DATA display_info; + T_MFW_HND *win_handle; + //M4_DebugStringMessage("pObjArray->numOfObjects==0",sizeof("pObjArray->numOfObjects==0"),0); + //xreddymn Aug-17-2004, MMI-SPR-23962 (TII_MMS31): Moved back functionality to RSK + dspl_Enable(0); + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftBack, TxtEmptyList, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_info_cb, FOREVER, KEY_RIGHT|KEY_CLEAR|KEY_HUP); + display_info.Identifier=0; + win_handle=info_dialog (win, &display_info); + win_show(win_handle); + dspl_Enable(1); + } + break; + // xreddymn Aug-20-2004 MMI-SPR-23962 (TII_MMS31): Added error handling + case MMS_EXTRACT_MEDIA_ERROR: + { + T_DISPLAY_DATA display_info; + T_MFW_HND *win_handle; + dspl_Enable(0); + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftBack, TxtFailed, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_extract_info_cb, FOREVER, KEY_RIGHT|KEY_CLEAR|KEY_HUP); + display_info.Identifier=0; + win_handle=info_dialog (win, &display_info); + win_show(win_handle); + dspl_Enable(1); + } + break; + case MWM_EXTRACT_MEDIA_LIST: + //M4_DebugStringMessage("MWM_EXTRACT_MEDIA_LIST", sizeof("MWM_EXTRACT_MEDIA_LIST"), pObjArray->numOfObjects); + M4_DebugMessage(pObjArray->numOfObjects); + extra_menu_list_data =(ListMenuData *) ALLOC_MEMORY(sizeof(ListMenuData)); + // xreddymn Aug-09-2004: MMI-SPR-23920 (TII_MMS7), If the object list is empty, then break out + if(extra_menu_list_data==NULL) + { + //M4_DebugStringMessage("extra_menu_list_data Alloc memory fail", sizeof("extra_menu_list_data Alloc memory fail"), 0); + break; + } + extra_menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( pObjArray->numOfObjects* sizeof(T_MFW_MNU_ITEM) ); + if(extra_menu_list_data->List==NULL) + { + break; + } + // xreddymn Sep-24-2004, MMI-SPR-25148 : Allocate memory for the list of indices + extra_menu_list_indices = (S16*) ALLOC_MEMORY(pObjArray->numOfObjects * sizeof(S16)); + if(extra_menu_list_indices==NULL) + { + break; + } + /* xreddymn Aug-18-2004, MMI-SPR-23962 (TII_MMS31): i is now used to index into + * extra_menu_list_data->List[] and count is used to index into pObjArray->pMsgObject[] + * On exit of the loop, count will contain the total objects listed + */ + for (count = 0, i=0; i < pObjArray->numOfObjects; count++, i++) + { + mnuInitDataItem(&extra_menu_list_data->List[count]); + + extra_menu_list_data->List[count].flagFunc = item_flag_none; + M4_DebugMessage(pObjArray->pMsgObject[i].contentType); + //xreddymn Sep-24-2004 MMI-SPR-25148 : Insert object index into the list of indices + extra_menu_list_indices[count]=i; + switch(pObjArray->pMsgObject[i].contentType) + { + case EMtMimeJpeg: + extra_menu_list_data->List[count].str = "Jpeg picture"; + break; + case EMtMimeGif: + extra_menu_list_data->List[count].str = "Gif picture"; + break; + case EMtMimeBmp: + extra_menu_list_data->List[count].str = "Bmp picture"; + break; + case EMtMimeWbmp: + extra_menu_list_data->List[count].str = "WBmp picture"; + break; + case EMtMimePng: + extra_menu_list_data->List[count].str = "Png picture"; + break; + case EMtTextPlain: + //xreddymn Aug-17-2004 MMI-SPR-23962 (TII_MMS31): Disabled text extraction + //extra_menu_list_data->List[i].str = "Plain text"; + --count; + break; + case EMtTextPhoneNumber: + extra_menu_list_data->List[count].str = "Phone Number"; + break; + case EMtTextEmail: + extra_menu_list_data->List[count].str = "Email"; + break; + //xreddymn Aug-23-2004 MMI-SPR-23962 (TII_MMS31): Audio AMR included for listing + case EMtMimeAmr: + extra_menu_list_data->List[count].str = "Audio AMR"; + break; + //xreddymn Jan-31-2004 MMI-SPR-28483: Audio MIDI included for listing + case EMtMimeMidi: + extra_menu_list_data->List[count].str = "Audio MIDI"; + break; + default: + //xreddymn Aug-17-2004 MMI-SPR-23962 (TII_MMS31): Disabled Unknown object extraction + //extra_menu_list_data->List[i].str = "Unknown"; + --count; + } + } + // xreddymn Aug-09-2004: MMI-SPR-23962 (TII_MMS31), Display a dialog if there are no objects to extract + if(count<=0) + { + MMSBox_Extract_exec_list=FALSE; +#if(MMS_DIALOG_DISPLAY) + { + /* Display information using a dialog box */ + T_DISPLAY_DATA display_info; + T_MFW_HND *win_handle; + dspl_Enable(0); + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftBack, TxtEmptyList, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_extract_info_cb, FOREVER, KEY_RIGHT|KEY_CLEAR|KEY_HUP); + display_info.Identifier=0; + win_handle=info_dialog (win, &display_info); + win_show(win_handle); + dspl_Enable(1); + } +#else // MMS_DIALOG_DISPLAY + { + /* Display information directly */ + char *str=MmiRsrcGetText(TxtEmptyList); + dspl_Enable(0); + dspl_SetBgdColour(COL_White); + dspl_ClearAll(); + dspl_SetFgdColour(COL_Black); + dspl_TextOut(0,32,0,str); + displaySoftKeys(TxtNull,TxtSoftBack); + dspl_Enable(1); + } +#endif // MMS_DIALOG_DISPLAY + break; + } + extra_menu_list_data->ListLength = count; + extra_menu_list_data->ListPosition = 1; + extra_menu_list_data->CursorPosition = 1; + extra_menu_list_data->SnapshotSize = count; + extra_menu_list_data->Font = 0; + extra_menu_list_data->LeftSoftKey = TxtSoftSelect; + extra_menu_list_data->RightSoftKey = TxtSoftBack; + extra_menu_list_data->KeyEvents = KEY_ALL; + extra_menu_list_data->Reason = 0; + extra_menu_list_data->Strings = TRUE; + extra_menu_list_data->Attr = &MmsBox_ExtractMedia_menuAttrib; + extra_menu_list_data->autoDestroy = FALSE; + listDisplayListMenu(win,extra_menu_list_data,(ListCbFunc)MMSBoxList_ExtractMedia_cb,0); + dspl_Enable(1); + break; + case MWM_DESTORY: + TRACE_EVENT(" Event: MWM_DESTORY"); + if(extra_menu_list_data) + { + if(extra_menu_list_data->List && pObjArray) + { + FREE_MEMORY((void*)(extra_menu_list_data->List), pObjArray->numOfObjects* sizeof(T_MFW_MNU_ITEM )); + } + FREE_MEMORY((void*)(extra_menu_list_data),sizeof(ListMenuData)); + } + //xreddymn Sep-24-2004 MMI-SPR-25148 : Free memory for list of indices + if(extra_menu_list_indices) + { + FREE_MEMORY((void*)extra_menu_list_indices, pObjArray->numOfObjects * sizeof(S16)); + } + if(pObjArray) pObjArray->oms.freeFunc(pObjArray); + //xreddymn Aug-24-2004 MMI-SPR-23972 (TII_MMS41) and MMI-SPR-24113 (TII_MMS53): Close the message session if it hasn't been already done + if(pObjData) pObjData->oms.freeFunc(pObjData); + if(msgHandle!=PP_MESSAGE_HANDLE_INVALID) + { + DAL_CloseMessageSession(msgHandle); + msgHandle=PP_MESSAGE_HANDLE_INVALID; + } + MMSBox_Extract_exec_win=NULL;//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + break; + case MWM_ONDRAW: + TRACE_EVENT(" Event: MWM_ONDRAW"); + // xreddymn Aug-20-2004, MMI-SPR-23962 (TII_MMS31): Removed direct display for now +#if(MMS_DIALOG_DISPLAY) + // Dialog display to be added +#else // MMS_DIALOG_DISPLAY + dspl_ClearAll(); + dspl_TextOut(0,32,0,"Please Wait"); + displaySoftKeys(TxtSoftOK,TxtSoftBack); +#endif // MMS_DIALOG_DISPLAY + break; + default: + return; + } +} + +/******************************************************************************* + + $Function: MMSBox_Extract_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 MMSBox_Extract_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + TRACE_FUNCTION ("MMSBox_Extract_start()"); + // xreddymn Aug-20-2004, MMI-SPR-23962 (TII_MMS31): Initialization + MMSBox_Extract_exec_list=TRUE; + MMSBox_Extract_exec_win=MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSBox_Extract_exec_cb,(void*)menuAttr,(T_MFW_CB)MMSBox_Extract_exec_kbd_cb,0,0); + return MMSBox_Extract_exec_win; +} + + +#define MMS_BOX_OPTION_BEGIN + + +/******************************************************************************* + + $Function: MMSBox_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 MMSBox_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) + /* callback handler for events sent to to trigger execution */ +{ + TRACE_FUNCTION ("MMSBox_OPT_exec_cb()"); + + switch (event) + { + case MWM_CREATE: + TRACE_EVENT(" Event: MWM_CREATE"); + /* initialization of administrative data */ + winShow(win); + break; + case MWM_DESTORY: + TRACE_EVENT(" Event: MWM_DESTORY"); + // xreddymn Nov-30-2004 MMI-SPR-23981: Moved this from MMSBox_Read_exec_cb + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Only for Inbbox this check for new ems messages are necessary not for other folders + if(folder==MM_LIST_INBOX) + { + if( MMS_Is_Unread_Msgs_Inbox()) + { + idle_data.ems = TRUE; + } + else + { + idle_data.ems = FALSE; + } + } + //xrashmic 20 Dec, 2004 MMI-SPR-23921 + // On deleting the window, set the handler to NULL + g_OptionsWin=NULL; + break; + case MWM_ONDRAW: + TRACE_EVENT(" Event: MWM_ONDRAW"); + dspl_ClearAll(); + displaySoftKeys(TxtSoftOK,TxtSoftBack); + break; + default: + return; + } +} + + +extern void EMS_RetriveSendMsg(UINT32 MsgId); +// xrashmic 13 Aug, 2004 Bug: 19 +extern T_MFW_HND EMSCreate_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); + +//CRR 23963: xpradipg 26 Aug 2004 +/******************************************************************************* + + $Function: MMSBox_OPT_kbd_cb + + $Description: Keyboard handler for the options menu + + $Returns: if event consumed or not + + $Arguments: + +*******************************************************************************/ + +static int MMSBox_OPT_kbd_cb(MfwEvt e, MfwKbd *k) +{ + T_MFW_HND win = mfwParent(mfw_header()); + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_MMIWINDOW * data = (T_MMIWINDOW *)win_data->user; + + TRACE_FUNCTION ("MMIWindow_kbd_cb()"); + + if (e & KEY_LONG) + { + switch (k->code) + { + case KCD_HUP: /* back to previous menu */ + mnuEscape(data->menu); + break; + case KCD_RIGHT: /* Power Down */ + return MFW_EVENT_REJECTED; /* handled by idle */ + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + else + { + switch (k->code) + { + case KCD_MNUUP: /* highlight previous entry */ + mnuUp(data->menu); + break; + case KCD_MNUDOWN: /* highlight next entry */ + mnuDown(data->menu); + break; + case KCD_MNUSELECT: + case KCD_LEFT: /* activate this entry */ + mnuSelect(data->menu); + break; + case KCD_HUP: /* back to previous menu */ + case KCD_RIGHT: /* back to previous menu */ + { + T_MFW_HND pWin = data->parent ; + T_MFW_WIN * pwin_data = ((T_MFW_HDR *)pWin)->data; + T_MMIWINDOW * pdata = (T_MMIWINDOW *)pwin_data->user; + + mnuEscape(data->menu); + if (pdata NEQ NULL) + { + SEND_EVENT (pdata->parent, MWM_REDRAW, 0,(void *)folder); + } + } + break; + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: MMSBox_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 MMSBox_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + TRACE_FUNCTION ("MMSBox_OPT_start()"); + //CRR 23963: xpradipg 26 Aug 2004 + //keyboard handler added for the options menu + // xreddymn Nov-30-2004 MMI-SPR-23981: Retain handle to Message Options sub-menu window + if(g_pMessageHeaderList->ppList[g_currentMessage].type==EMtSms) + { + //xrashmic 7 Dec, 2004 MMI-SPR-23965 + // Separate Option list for EMS. + g_OptionsWin=MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSBox_OPT_exec_cb,(void*)menuAttr,(T_MFW_CB)MMSBox_OPT_kbd_cb,&EMSBox_OPTAttrib,0); + } + else + { + g_OptionsWin=MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSBox_OPT_exec_cb,(void*)menuAttr,(T_MFW_CB)MMSBox_OPT_kbd_cb,&MMSBox_OPTAttrib,0); + } + return g_OptionsWin; +} +//menu call back +static int MMSBox_OPTexeRead(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + MMSBox_Read_start(win, NULL); +} + // May 11 2005 REF: MMI-SPR-29887 x0012849 + // New Function which is called when tried to retrieve the incomplete MMS. +/******************************************************************************* + $Function: MMSBox_OPTexeDeferDownload + $Description: Starts the retrieval of MMS from the server + $Returns: + $Arguments: +*******************************************************************************/ +extern T_idle idle_data; +static int MMSBox_OPTexeDeferDownload(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND dlg_win = NULL; + TRACE_EVENT("MMSBox_OPTexeDeferDownload"); + MMSactive = TRUE ; + if (idle_data.search) + { + dlg_win= information_dialog(TxtNotConnected,TxtNull,NULL,NULL, TxtNull,TxtNull,TWO_SECS,0,NULL); + return 1; + } + DeferDownloadMsg(g_pMessageHeaderList->ppList[g_currentMessage].id); + return 0; +} + // May 12 2005 REF: MMI-SPR-29887 x0012849 + // New Function which is called when tried to retrieve the incomplete MMS. +/******************************************************************************* + $Function: DeferDownloadMsg + $Description: Starts the retrieval of MMS from the server + $Returns: return the status of the operation. + $Arguments: msgID - For which the MMS body need to be retrieved +*******************************************************************************/ + +void DeferDownloadMsg(MM_MESSAGE_ID msgId) +{ + + MM_S_MESSAGE_HEADER *appMessageHeader; + TRACE_FUNCTION ("DeferDownloadMsg()"); + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + is_downloadcancelled=FALSE; + is_deferdownload = TRUE; + AUI_mms_status_notify(MMS_RECEIVE_PROGRESS); + MMSDownLoadNow(msgId); + // May 11 2005 REF: MMI-SPR-29887 xrashmi + AUI_retrievemms_gprs_set_callback(); +} + + // May 12 2005 REF: MMI-SPR-29887 x0012849 + // New Function which is called when tried to retrieve the incomplete MMS. +/******************************************************************************* + $Function: MMSDownLoadNow + $Description: Starts the download of MMS from the server + $Returns: return the status of the operation. + $Arguments: msgID - For which the MMS body need to be retrieved +*******************************************************************************/ + + void MMSDownLoadNow(MM_MESSAGE_ID msgId) +{ + EVT_HANDLE evtHandle = NULL; + ESTATUS status; +TRACE_FUNCTION ("MMSDownLoadNow()"); + evtHandle = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT)); + if(NULL == evtHandle) + return; + is_deferdownload = TRUE; + is_notifyResponse= TRUE; + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + rtvprogressValue=0; + memset((void*)evtHandle, 0x00, sizeof(EVT_STRUCT)); + evtHandle->handler = DeferDownloadMsgCallback; + status = DAL_GetMessageAsync(evtHandle, msgId); + } + + // May 12 2005 REF: MMI-SPR-29887 x0012849 + // New Function which is called when tried to retrieve the incomplete MMS. +/******************************************************************************* + $Function: DeferDownloadMsgCallback + $Description: Starts the retrieval of MMS from the server + $Returns: status of the operation + $Arguments: +*******************************************************************************/ + +static ESTATUS DeferDownloadMsgCallback(EVENT_ID aeId, + EVENT_TYPE aeType, + MESSAGE_PARAM ampParam, + EVT_HANDLE evtHandle) +{ + + + BOOL deferdownload_finish = FALSE; + TRACE_FUNCTION ("DeferDownloadMsgCallback()"); + switch(aeId) + { + case(EMG4_NetworkOpDone): + deferdownload_finish = TRUE; + break; + case(EMG4_OpProgress): + deferdownload_finish = FALSE; + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + // Whenever there is a progress while retrieving MMS, update the display with the value.. + if(FALSE== is_downloadcancelled && (ampParam > ( rtvprogressValue +5 )) ) + { + + if(ampParam < 0) + rtvprogressValue=0; + else if(ampParam > 95 ) + rtvprogressValue=100; + else + rtvprogressValue=ampParam; + AUI_mms_status_notify(MMS_RECEIVE_PROGRESS ); + } + break; + case(EMG4_OpError): + deferdownload_finish = TRUE; + break; + default: + break; + } + if(deferdownload_finish == TRUE) + { + if(evtHandle) + { + FREE_MEMORY ((void *)evtHandle, sizeof (EVT_STRUCT)); + } + + } +} +static int MMSBox_OPTexeExtract(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + l_extractwin=MMSBox_Extract_start(win, NULL); +} + +// xreddymn Oct-14-2004 MMI-SPR-25273 +extern char EmsNumber[]; +extern BOOL gEmsForward; +extern UINT32 gEmsMsgId; + +static int MMSBox_OPTexeForward(MfwMnu* m, MfwMnuItem* i) +{ +// xreddymn Oct-14-2004 MMI-SPR-25273: Re-implemented this function + // xreddymn Oct-14-2004 MMI-SPR-25273: Added forward feature for EMS messages + if(g_pMessageHeaderList->ppList[g_currentMessage].type==EMtSms) + { +#ifdef FF_MMI_EMS + T_MFW_HND win = mfwParent(mfw_header()); + gEmsForward=TRUE; + gEmsMsgId = g_pMessageHeaderList->ppList[g_currentMessage].id; +/* 1 -> Insert existing phone number into the editor + * 0 -> Start with blank phone number editor + */ +#if(0) + { + U16 *data; + S32 length; + data=(U16*)(g_pMessageHeaderList->ppList[g_currentMessage].messageTypeHeader.smsHeader.pszAddress); + length=GetStringBytes((const UCS2 *)data); + if(length>0) + { + ConvertUcs2To8BitString((const UCS2 * const)g_pMessageHeaderList->ppList[g_currentMessage].messageTypeHeader.smsHeader.pszAddress, + length,(MByte*)EmsNumber); + } + else /* If the number is not valid, then start with blank number and ask the user to input */ + { + strcpy((char*)EmsNumber,""); + } + } +#else // if(0) + // Clear the number - Start with a blank number on the phone number input screen + strcpy((char*)EmsNumber,""); +#endif // if(0) + EMSCreate_start(win, 0); +#endif // FF_MMI_EMS + } +//xrashmic 14 Dec, 2004 MMI-SPR-23921 +// Added forward feature for MMS messages + else + { + MMSactive=TRUE; + MMSFwd_start(); + } + +} + +// Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C +// Fix: An external variable to store the Mms Number extracted from the message header. +extern char MmsNumber[]; + +static int MMSBox_OPTexeReply(MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win = mfwParent(mfw_header()); + //Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C + //Fix: A local variable to store the length of the senders address. + S32 length; + + // xrashmic 13 Aug, 2004 Bug: 19 + // When reply is selected for a message from the inbox, we need to display corresponding + // compose screen i.e either EMS compose or MMS compose screen + // TRACE_EVENT("Message Type = %d",g_pMessageHeaderList->ppList[g_currentMessage].type); + if(g_pMessageHeaderList->ppList[g_currentMessage].type==EMtSms) + { +#ifdef FF_MMI_EMS + EMSCreate_start(win, 0); +#endif + } + else + { +#ifdef FF_MMI_MMS + //Nov 05, 2005 REF: OMAPS00049502 Sumanth Kumar. C + //Fix: Extraction of Senders number from the message header in the form of Unicode and converting it to 8bit string. + length=GetStringBytes((const UCS2 *)g_pMessageHeaderList->ppList[g_currentMessage].messageTypeHeader.mmsHeader.pFrom); + if(length>0) + { + ConvertUcs2To8BitString((const UCS2 * const)g_pMessageHeaderList->ppList[g_currentMessage].messageTypeHeader.mmsHeader.pFrom, + length,(MByte*)MmsNumber); + } + else /* If the number is not valid, then start with blank number and ask the user to input */ + { + strcpy((char*)MmsNumber,""); + } + + // Apr 07 2005 REF: MMI-SPR-27826 x0012849 + // To avoid crash when a user replies to the MMS which is there in Inbox + // If it is not set to TRUE , ATB_wap_content() will display the windows saying downloading data. + MMSactive=TRUE; + MMSCreate_start(win, 0); +#endif + } +} + +static void MMSBox_Delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + + TRACE_FUNCTION("MMSBox_Delete_cb"); + + switch (reason) + { + case INFO_KCD_LEFT: + //yanbin: Call magic4 function to delete text + DeleteMsg(g_pMessageHeaderList->ppList[g_currentMessage].id); + // xreddymn Dec-20-2004 MMI-SPR-27382: Display a "Please Wait" screen while deleting a message + { + T_DISPLAY_DATA display_info; + T_MFW_HND win = mfwParent(mfw_header()); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_Delete_cb, FOREVER, 0); + g_MmsPleaseWaitWin=info_dialog (win, &display_info); + } + break; + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + //return back + break; + default: + break; + } +} +static int MMSBox_OPTexeDelete(MfwMnu* m, MfwMnuItem* i) +{ + T_DISPLAY_DATA display_info; + T_MFW_HND win = mfwParent(mfw_header()); + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)MMSBox_Delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP); + info_dialog (win, &display_info); +} + + + +#define PLAY_CURRENT_MMS_BEGIN +/* +void M4_DebugMessage_Pn ( char *format, ... ) +{ + char trace_buf[128]; + va_list varpars; + + va_start (varpars, format); + vsprintf(trace_buf,format,varpars); + va_end (varpars); + //M4_DebugStringMessage(trace_buf,strlen(trace_buf), 0); +} +*/ +ESTATUS M4_PlayMessageEventHandlerFunc(EVENT_ID aeId, EVENT_TYPE aeType, MESSAGE_PARAM ampParam, EVT_HANDLE evtHandle) +{ +// M4_DebugMessage_Pn("M4_PlayMessageEventHandlerFunc() aeId: %d,aeType: %d,ampParam:%d",aeId,aeType,ampParam); + switch(aeId) + { + case EMG4_FileOpDone: +// M4_DebugMessage_Pn("EMG4_FileOpDone"); + DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); + + DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed,EPlayModeRun,NULL); + + break; + + case EMG4_End: + { +// M4_DebugMessage_Pn("EMG4_End"); + /* Message has finished */ + FREE_MEMORY((U8*)evtHandle, sizeof(EVT_STRUCT)); + } + break; + case EMG4_PlayComplete: +// M4_DebugMessage_Pn("EMG4_PlayComplete"); + + /* TODO */ + break; + case EMG4_OpProgress: +// M4_DebugMessage_Pn("EMG4_OpProgress"); + dspl_TextOut(16, 16, 0,"Please wait!"); + break; + case EMG4_OpError: + { + int type; + int module; + int status; +// M4_DebugMessage_Pn("EMG4_OpError"); + + status = (ampParam & 0x3FFF); + module = (ampParam >> 22) & 0x1F; + type = (ampParam >> 28) & 0x1F; + //M4_ActionError(status); + dspl_TextOut(16, 16, 0,"Play MMS Error!"); + //xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + //To display the specific errors encountered + switch(status) + { + case EFileNotFound: + dspl_TextOut(16, 40, 0,"File not found"); + break; + case EInvalidMediaType: + dspl_TextOut(16, 40, 0,"Media Not Supported"); + break; + case EMsgInComplete: + dspl_TextOut(16, 40, 0,"Incomplete Message"); + break; + case EInvalidMsgId: + dspl_TextOut(16, 40, 0,"InvalidMsgID"); + break; + + } + + MmsReadStatus = status; + dspl_Enable(1); + + FREE_MEMORY((U8*)evtHandle, sizeof(EVT_STRUCT)); + + } + break; + } + + return ENoError; +} + +void M4_PlayMessage(MM_MESSAGE_ID aMessageID) +{ + EVT_HANDLE evtHandler; + TRACE_EVENT("M4_PlayMessage"); + + /* Create the event handler */ + evtHandler = (EVT_HANDLE)ALLOC_MEMORY(sizeof(EVT_STRUCT)); + + if (evtHandler == NULL) + { + //M4_DebugStringMessage("M4_PlayMessage: can not alloc message!", sizeof("M4_PlayMessage: can not alloc message!"), 0); + return; + } + + memset(evtHandler, 0x00, sizeof(EVT_STRUCT)); /* Reset the structure */ + evtHandler->handler = M4_PlayMessageEventHandlerFunc; /* Set the event handler function */ + + DAL_PlayMessage(evtHandler, aMessageID); +} + + +/******************************************************************************* + + $Function: MMSBox_read_exec_cb + + $Description: Exec callback function of the MMS Create window + + $Returns: none + + $Arguments: win - window handler + event - mfw event + parameter - optional data. + +*******************************************************************************/ +void MMSBox_Read_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) + /* callback handler for events sent to to trigger execution */ +{ + TRACE_FUNCTION ("MMSBox_read_exec_cb()"); + + switch (event) + { + case MWM_CREATE: + TRACE_EVENT(" Event: MWM_CREATE"); + //xreddymn Aug-26-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): M4 client will now use the display + g_M4_display_active=TRUE; + break; + case MWM_ONDRAW: + TRACE_EVENT(" Event: MWM_ONDRAW"); + dspl_Enable(0); + dspl_SetBgdColour(COL_White); + dspl_ClearAll(); + //yanbin: here call Magic4 functions to play MMS slides + M4_PlayMessage(g_pMessageHeaderList->ppList[g_currentMessage].id); + //CRR 25270 & CRR 25268: 13 Oct 2004 - xpradipg + //the status of the message is not updated if it is already in the read state + //else the header of the message is edited and the flag is set to true + if(g_pMessageHeaderList->ppList[g_currentMessage].read!=TRUE) + { + MM_BeginUpdateHeader(g_pMessageHeaderList->ppList[g_currentMessage].id); + MM_UtilSetRead(g_pMessageHeaderList->ppList[g_currentMessage].id, TRUE); + MM_CommitUpdateHeaderAsync(NULL, g_pMessageHeaderList->ppList[g_currentMessage].id); + // xreddymn Nov-30-2004 MMI-SPR-23981: Update g_pMessageHeaderList + g_pMessageHeaderList->ppList[g_currentMessage].read=TRUE; + } + //xmzhou_trace_string_value("MMSBox_Read_win_cb: M4_PlayMessage with id = ", g_pMessageHeaderList->ppList[g_currentMessage].id); + // xrashmic 7 Dec, 2004 MMI-SPR-23965 + if(g_pMessageHeaderList->ppList[g_currentMessage].type==EMtSms) + displaySoftKeys(TxtExtract,TxtSoftBack); + else + displaySoftKeys(NULL,TxtSoftBack); + dspl_Enable(1); + break; + case MWM_DESTORY: + TRACE_EVENT(" Event: MWM_DESTORY"); + //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 + dspl_Enable(1); + //CRR 24456: 19 Oct 2004 - xpradipg + //check if the error has occurred while playing the message if + //post the EPlayModeStop event else reset the error + if(MmsReadStatus == ENoError) + { + DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed, EPlayModeStop,NULL); + //xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + //EMG4_Exit should be done for only MMS that are sucessfully played. + //For MMS which throw EMG4_OpError when DAL_PlayMessage is called, + //EMG4_Exit should not be done + DAL_PostMessage(EMG4_Exit, EMG4_Type_NotUsed, 0, NULL); + } + else + { + MmsReadStatus = ENoError; + } + +// xreddymn Nov-30-2004 MMI-SPR-23981: Moved this to MMSBox_OPT_exec_cb +#if(0) + if(MMS_Is_Unread_Msgs_Inbox()) + idle_data.ems = TRUE; + else + idle_data.ems = FALSE; +#endif + //xreddymn Aug-26-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display + g_M4_display_active=FALSE; + g_MmsReadWin=NULL;//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + break; + case MWM_SUSPEND: + TRACE_EVENT("MWM_SUSPEND"); + //xreddymn Sep-16-2004: Changes related to MMI-SPR-24735 + dspl_Enable(1); + //xreddymn Aug-27-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): BMI will now use the display + g_M4_display_active=FALSE; + DAL_PostMessage(EMG4_Suspend,EMG4_Type_NotUsed,0,NULL); + DAL_PostMessage(EMG4_PlayMode,EMG4_Type_NotUsed, EPlayModeStop,NULL); + break; + case MWM_RESUME: + TRACE_EVENT("MWM_RESUME"); + //xreddymn Aug-27-2004 MMI-SPR-23926 (TII_MMS12) and MMI-SPR-24115 (TII_MMS55): M4 client will now use the display + g_M4_display_active=TRUE; + DAL_PostMessage(EMG4_Resume,EMG4_Type_NotUsed,0,NULL); + DAL_PostMessage(EMG4_Refresh, EMG4_Type_NotUsed, 0, 0); + break; + default: + break; + } +} + +/******************************************************************************* + + $Function: extractEMSObjects + + $Description: To extract user defined objects in EMS + xrashmic 7 Dec, 2004 MMI-SPR-23965 + + $Returns: none + + $Arguments: none +*******************************************************************************/ +void extractEMSObjects(void) +{ + ESTATUS status; + attachmentInEMS=0; + EV_GetExtractableList(EAllMessage, &apExtractableInMessage); + if(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 few more parameters for this function + information_dialog(TxtNoObjects, TxtExtractable, NULL,NULL, TxtNull, TxtSoftBack, 0, KEY_RIGHT, NULL); + } +} +/******************************************************************************* + + $Function: MMSBox_Read_kbd_cb + + $Description: Exec callback function for the Option window + + $Returns: execution status + + $Arguments: e - event id + k - keyboard info +*******************************************************************************/ + +int MMSBox_Read_kbd_cb (MfwEvt e, MfwKbd *k) + /* SmsRead_R_OPT keyboard event handler */ +{ + T_MFW_HND win = mfwParent(mfw_header()); + TRACE_FUNCTION ("MMSBox_Read_kbd_cb()"); + + if (e & KEY_LONG) + { + switch (k->code) + { + case KCD_HUP: /* back to previous menu */ + MMI_DestoryWindow(win); + break; + case KCD_MNUUP: + DAL_PostMessage(EVT_StartOfMessage, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_MNUDOWN: + DAL_PostMessage(EVT_EndOfMessage, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_MNULEFT: + DAL_PostMessage(EVT_StartOfLine, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_MNURIGHT: + DAL_PostMessage(EVT_EndOfLine, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_RIGHT: /* Power Down */ + return MFW_EVENT_REJECTED; /* handled by idle */ + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + else + { + switch (k->code) + { + case KCD_MNUUP: /* highlight previous entry */ + //x0012849 Feb-03-2005 MMI-SPR-28224 + //send scrollUp Event instead of cursorup + DAL_PostMessage(EMG4_ScrollUp,EMG4_Type_NotUsed,0,NULL); + break; + case KCD_MNUDOWN: + //x0012849 Feb-03-2005 MMI-SPR-28224 + //send scroDown Event instead of cursordown + DAL_PostMessage(EMG4_ScrollDown,EMG4_Type_NotUsed,0,NULL); + break; + case KCD_MNULEFT: + DAL_PostMessage(EMG4_CursorLeft, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_MNURIGHT: + DAL_PostMessage(EMG4_CursorRight, EMG4_Type_NotUsed, 0, NULL); + break; + case KCD_MNUSELECT: + break; + case KCD_LEFT: /* activate this entry */ + // xrashmic 7 Dec, 2004 MMI-SPR-23965 + // Allows the user to extract objects in the EMS message. For extracting the objects, + // the editor has to be initialized. + if(g_pMessageHeaderList->ppList[g_currentMessage].type==EMtSms) + extractEMSObjects(); + break; + case KCD_HUP: /* back to previous menu */ + case KCD_RIGHT: /* back to previous menu */ + MMI_DestoryWindow(win); + break; + default: /* no response to all other keys */ + return MFW_EVENT_CONSUMED; + } + } + return MFW_EVENT_CONSUMED; +} + +/**/ + +/******************************************************************************* + + $Function: MMSBox_Read_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 MMSBox_Read_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) +{ + TRACE_FUNCTION ("MMSBox_Read_start()"); + //xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + g_MmsReadWin= MMI_CreateWindow(parent_window, (T_DIALOG_FUNC)MMSBox_Read_exec_cb,(void*)menuAttr,(T_MFW_CB)MMSBox_Read_kbd_cb,0,0); + + return g_MmsReadWin; +} + + + +/******************************************************************************* + + $Function: MMS_ConvertStringToUcs2 + + $Description: converting string to ucs2 + + $Returns: + + $Arguments: + + +*******************************************************************************/ +UCS2 * MMS_ConvertStringToUcs2 (const MByte * const p8BitString, + const MUint uLength, + UCS2 * pUcs2String) +{ + if ((UCS2 *) NULL == pUcs2String) + { + pUcs2String = (UCS2 *)MM_MALLOC(sizeof(UCS2) * (1 + uLength)); + } + + if ((UCS2 *)NULL != pUcs2String) + { + register MUint uIndex; + for (uIndex = 0; uIndex < uLength; ++uIndex) + { + pUcs2String[uIndex] = (UCS2)p8BitString[uIndex]; + } + pUcs2String[uIndex] = NULLCHAR; + } + + return pUcs2String; +} + +//xrashmic 22 Sep, 2004 MMI-SPR-25032 +// To play the buzzer when there are sound objects in EMS message +//Apr 05, 2005 REF: ENH 29994 xdeepadh +//To Play the default midi file when there are sound objects in EMS message. +void playBuzzerForEMS(void) +{ + +#ifdef FF_MIDI_RINGER + T_AS_PLAYER_TYPE player_type; +#ifdef FF_MIDI_LOAD_FROM_MEM + T_MELODY melody_data; +#else + char* midi_file; + +#endif +//Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh +#ifdef FF_MIDI_LOAD_FROM_MEM + melody_data=sounds_midi_return_memory_location(0); + player_type=mfw_ringer_deduce_player_type(melody_data.melody_name); + mfw_player_start_memory(player_type,(UINT32*)melody_data.melody,melody_data.melody_size,AS_VOLUME_MEDIUM,FALSE,sounds_midi_player_start_cb); +#else + midi_file=sounds_midi_return_file_name(0); + player_type=mfw_ringer_deduce_player_type(midi_file); + mfw_player_start_file(player_type,midi_file,AS_VOLUME_MEDIUM,FALSE,sounds_midi_player_start_cb); +#endif +#else + UBYTE currentVoiceTone; + currentVoiceTone = getcurrentVoiceTone(); + audio_PlaySoundID( AUDIO_BUZZER, currentVoiceTone, 200, AUDIO_PLAY_ONCE ); +#endif +} + +//CRR 25270 & CRR 25268: 13 Oct 2004 - xpradipg +/******************************************************************************* + + $Function: MMS_Is_Unread_Msgs_Inbox + + $Description: Lists out all the messages in the inbox and returns true if the status of one of the + message is not set to read = true + $Returns: + + $Arguments: + +*******************************************************************************/ + +int MMS_Is_Unread_Msgs_Inbox(void) +{ + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //Inbox listing params were changed in MMI-SPR-29887 + MM_LIST_PARAM listParams = MM_LIST_INBOX|MM_LIST_NOT_RETRIEVED; + ESTATUS eStatus=0; + int i; + //xrashmic 29 Nov, 2005 MMI-SPR-OMAPS00050170 + //g_pMessageHeaderList will be populated again, hence need to release the memory already allocated to it + if(g_pMessageHeaderList != NULL) + M4_FreeListFolderMemory(); + eStatus = DAL_ListMessagesByParam(&g_pMessageHeaderList, listParams); + for(i=0;i<g_pMessageHeaderList->size;i++) + { if(g_pMessageHeaderList->ppList[i].read == FALSE) + return TRUE; + } + return FALSE; +} +#undef MMI_MMSBOX_C +