FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiMmsBox.c @ 481:24078551b620
build system: set ALLOW_CSIM_GSM=1 by default for hybrid configs
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 19 Jun 2018 06:39:18 +0000 |
parents | 3c2acfa1a72f |
children |
line wrap: on
line source
/******************************************************************************* 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