FreeCalypso > hg > fc-magnetite
comparison src/aci2/bmi/mmiSmsRead.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:c41a534f33c6 | 3:93999a60b835 |
---|---|
1 /******************************************************************************* | |
2 | |
3 CONDAT (UK) | |
4 | |
5 ******************************************************************************** | |
6 | |
7 This software product is the property of Condat (UK) Ltd and may not be | |
8 disclosed to any third party without the express permission of the owner. | |
9 | |
10 ******************************************************************************** | |
11 | |
12 $Project name: Basic MMI | |
13 $Project code: BMI | |
14 $Module: SMS | |
15 $File: MmiSmsRead.c | |
16 $Revision: 1.0 | |
17 | |
18 $Author: Condat(UK) | |
19 $Date: 25/10/00 | |
20 | |
21 ******************************************************************************** | |
22 | |
23 Description: | |
24 | |
25 Shared definitions of data elements are made in here | |
26 and accessed via the primitive operations supplied | |
27 | |
28 ******************************************************************************** | |
29 | |
30 $History: MmiSmsRead.c | |
31 | |
32 Feb 07, 2006 DR: OMAPS00059261 x0pleela | |
33 Description: SMS is not forwarding STATUS reports that are read from SIM storage to ACI | |
34 Solution: smsread_r_exec_cb(): avoiding display of sender's address in header for status reports during listing | |
35 smsread_getstatustext():renamed txtreport to txtreport | |
36 Replaced MT_STATUS_RPT with MFW_SMS_STATRPT as MT_STATUS_RPT is removed | |
37 | |
38 Feb 01, 2006 DR: OMAPS00059261 x0pleela | |
39 Description: SMS is not forwarding STATUS reports that are read from SIM storage to ACI | |
40 Solution: Added a check for Status report to display a text "Report:Pending" during listing of this message | |
41 Made changes as per review comments | |
42 | |
43 Jan 30, 2006 DR: OMAPS00059261 x0pleela | |
44 Description: SMS is not forwarding STATUS reports that are read from SIM storage to ACI | |
45 Solution: Added code to read and display MT Status report | |
46 | |
47 Mar 28, 2006 MMI-FIX-47813 x0035544 | |
48 Description: Not Available transient screen is displayed when Extract number option is selected | |
49 in messages option screen. | |
50 Solution: The necessary functionality is provided to extract the numbers in a message and display | |
51 them appropriately. | |
52 | |
53 May 27, 2005 MMI-FIX-29869 x0018858 | |
54 Description: There is a limitation on the number of messages that can be downloaded from | |
55 server even though there is space on the sim. | |
56 Solution: The limitation has been removed and the number of messages that can be dowloaded | |
57 has been modified to the masimum number that can be stored. | |
58 | |
59 March 2, 2005 REF: CRR 11536 x0018858 | |
60 Description: Reply path not supported while sending a reply. | |
61 Solution: Added menu option for the reply path. | |
62 | |
63 Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar | |
64 Issue description: BMI: using the tool nowSMS the voicemail indication via sms does not work | |
65 Solution: Instead of identifying voice using addr[0] and pid, we use dcs. Also, messages belonging | |
66 to group "1100" are deleted when voicemail icon is displayed. | |
67 | |
68 Feb 16, 2005 REF: CRR 28966 x0012851 | |
69 Description: Editing or forwarding of large MT messages (>160 characters) | |
70 shouldn't be allowed when Concatenation is set to 'OFF' | |
71 Solution: If the 'ConcatenateStatus' flag is FALSE, the 'if' check condition | |
72 which allows the message to be edited or forwarded has been | |
73 modified for the same. | |
74 | |
75 Dec 15,2004 REF: CRR 24396 xkundadu | |
76 Description: Phone crashes when a message is received while the | |
77 'List Empty' dialog is displayed. | |
78 Solution: NULL check is added for the list_win handle before calling | |
79 listsDestroy() when an MT sms is receieved. | |
80 | |
81 Dec 01, 2004 REF: CRR 24225 xnkulkar | |
82 Description: Reset when forwarding SMS | |
83 Solution: The message content is sent excluding the date/time info from the | |
84 original message, which was causing the reset as the max limit (161) was crossed. | |
85 | |
86 Sep 08, 2004 REF: CRR 24393 Deepa M. D | |
87 Bug:Phone crashes when user tries to reply to a saved message in the Inbox | |
88 Fix:The reply and Callnumber Option has been removed for the saved message. | |
89 25/10/00 Original Condat(UK) BMI version. | |
90 14/10/00 SPR 1257 - merged in issue 888 from b-sample line (extract | |
91 number from SMS improvements) and made changes to accommodate | |
92 Unicode SMSs containing numbers. | |
93 May 03, 2004 REF: CRR 13845 Deepa M | |
94 The Forward menuitem added. | |
95 $End | |
96 | |
97 *******************************************************************************/ | |
98 | |
99 #define MMI_SMSREAD_C | |
100 | |
101 #define ENTITY_MFW | |
102 | |
103 /* includes */ | |
104 #include <string.h> | |
105 #include <stdio.h> | |
106 #include <stdlib.h> | |
107 | |
108 #if defined (NEW_FRAME) | |
109 | |
110 #include "typedefs.h" | |
111 #include "vsi.h" | |
112 #include "pei.h" | |
113 #include "custom.h" | |
114 #include "gsm.h" | |
115 | |
116 #else | |
117 | |
118 #include "STDDEFS.H" | |
119 #include "custom.h" | |
120 #include "gsm.h" | |
121 #include "vsi.h" | |
122 | |
123 #endif | |
124 #include "prim.h" | |
125 | |
126 | |
127 #include "mfw_mfw.h" | |
128 #include "mfw_win.h" | |
129 #include "mfw_kbd.h" | |
130 /* SPR#1428 - SH - New Editor changes */ | |
131 #ifndef NEW_EDITOR | |
132 #include "mfw_edt.h" | |
133 #endif | |
134 #include "mfw_tim.h" | |
135 #include "mfw_phb.h" | |
136 #include "ksd.h" | |
137 #include "psa.h" | |
138 #include "mfw_sms.h" | |
139 #include "mfw_smsi.h" | |
140 #include "mfw_icn.h" | |
141 #include "mfw_mnu.h" | |
142 #include "mfw_lng.h" | |
143 #include "mfw_sat.h" | |
144 #include "mfw_kbd.h" | |
145 #include "mfw_nm.h" | |
146 #include "mfw_mme.h" | |
147 | |
148 #include "psa_util.h" | |
149 | |
150 #include "dspl.h" | |
151 | |
152 #include "MmiMain.h" | |
153 #include "MmiDummy.h" | |
154 #include "MmiMmi.h" | |
155 #include "mmiCall.h"//GW 29/11/01 for 'callNumber' | |
156 | |
157 #include "MmiDialogs.h" | |
158 #include "MmiLists.h" | |
159 #include "MmiMenu.h" | |
160 #include "MmiSoftKeys.h" | |
161 /* SPR#1428 - SH - New Editor changes */ | |
162 #ifdef NEW_EDITOR | |
163 #include "ATBCommon.h" | |
164 #include "ATBDisplay.h" | |
165 #include "ATBEditor.h" | |
166 #include "AUIEditor.h" | |
167 #else | |
168 #include "MmiEditor.h" | |
169 #endif | |
170 #include "MmiBookShared.h" // MZ | |
171 #include "mmiSmsMenu.h" | |
172 #include "mmismssend.h" | |
173 #include "mmiSmsRead.h" | |
174 #include "mmiSmsIdle.h" | |
175 #include "MmiResources.h"/*MC*/ | |
176 #include "mfw_ffs.h" | |
177 | |
178 #include "cus_aci.h" | |
179 | |
180 #include "prim.h" | |
181 #ifndef PCM_2_FFS | |
182 #include "pcm.h" | |
183 #endif | |
184 | |
185 | |
186 #include "message.h" | |
187 #include "prim.h" | |
188 #include "aci_cmh.h" //GW 29/11/01 added for types in aci_fd.h | |
189 #include "aci_fd.h" //GW 29/11/01 added for types in 'cmh.h' | |
190 #include "cmh.h" //GW 29/11/01 added for types in 'cmh_phb.h' | |
191 #include "cmh_phb.h" //GW 29/11/01 added for cmhPHB_getAdrStr | |
192 | |
193 #include "mmiColours.h" | |
194 #include "audio.h" | |
195 //GW 29/11/01 - added header file - removed extern void callNumber(UBYTE* number); | |
196 MfwWin* getWinData( MfwHnd win); | |
197 | |
198 /*SPR 1453*/ | |
199 #ifdef LSCREEN | |
200 #define UCS2_MENU_TEXT_LEN ((MFW_TAG_LEN +10)*2 +4)/*SPR 2686 only need name+status text*/ | |
201 #else | |
202 #define UCS2_MENU_TEXT_LEN 36 /*mc SPR 1242, no of bytes in latin unicode string which fills one whole line*/ | |
203 #endif | |
204 | |
205 #define MAX_EDITOR_HEADER_LENGTH 25 | |
206 | |
207 // Dec 01, 2004 REF: CRR 24225 xnkulkar | |
208 // Description: Reset when forwarding SMS | |
209 // Added to exclude the original date/time info from forwarded message | |
210 #define ORIGINAL_DATE_TIME_INFO 17 | |
211 //Mar 28, 2006 DR:OMAPS00047813 x0035544 | |
212 #define MAX_NUMBER_SIZE 10 //Max Size of the number array to hold the extracted numbers | |
213 #define MIN_NUM_LENGTH 3 //minimum length of the number to be extracted. | |
214 | |
215 // Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar | |
216 extern BOOL invalidVm; | |
217 | |
218 extern UBYTE reply_path_bit; | |
219 /********************************************************************* | |
220 | |
221 DYNAMIC MENU WINDOW. DECLARATION | |
222 | |
223 **********************************************************************/ | |
224 | |
225 typedef enum | |
226 { | |
227 E_DELETE, | |
228 E_REPLY, | |
229 E_CALL_SENDER, | |
230 E_SAVE_NUMBER, | |
231 E_DATE_TIME, | |
232 E_FORWARD | |
233 }; | |
234 | |
235 // Those information are passed to the sms editor | |
236 typedef struct | |
237 { | |
238 SHORT sms_index; | |
239 T_MMI_SMS_STAT sms_type; | |
240 T_MFW_SMS_PARA *sms_info; | |
241 char *assoc_name; | |
242 }T_SMS_EDITOR_DATA; | |
243 | |
244 | |
245 /* This variable is used to know in which state we are when MFW callback function is called */ | |
246 typedef struct | |
247 { | |
248 SHORT nb_sms_stored; | |
249 /*SPR 2530, need more info than just indexes*/ | |
250 | |
251 // May 27, 2005 MMI-FIX-29869 x0018858 | |
252 // Description: There is a limitation on the number of messages that can be downloaded from | |
253 // server even though there is space on the sim. | |
254 // Solution: The limitation has been removed and the number of messages that can be dowloaded | |
255 // has been modified to the maximum number that can be stored. | |
256 #ifdef FF_MMI_SMS_DYNAMIC | |
257 T_MFW_SMS_MSG* sms_messages; /* store info about the SMS: index... */ | |
258 | |
259 // May 27, 2005 MMI-FIX-29869 x0018858 | |
260 // Changed from static to dynamic | |
261 wstring_t** sms_header; /* header displayed in the dynamic menu */ | |
262 #else | |
263 T_MFW_SMS_MSG sms_messages[MAX_MESSAGES]; /* store info about the SMS: index... */ | |
264 wstring_t* sms_header[MAX_MESSAGES]; /* header displayed in the dynamic menu */ | |
265 #endif | |
266 }T_SMS_LIST_DATA; | |
267 | |
268 typedef struct | |
269 { | |
270 /* administrative data */ | |
271 | |
272 T_MMI_CONTROL mmi_control; | |
273 T_MFW_HND win; | |
274 SHORT id; | |
275 T_MFW_HND parent; | |
276 | |
277 /* associated handlers */ | |
278 | |
279 T_MFW_HND sms_handle; /* MFW sms handler */ | |
280 | |
281 /* internal data */ | |
282 T_SMS_LIST_DATA sms_list_data; | |
283 T_SMS_EDITOR_DATA sms_editor_data; | |
284 ListMenuData *menu_list_data; | |
285 /*SPR 2686, removed unused data field*/ | |
286 | |
287 } T_SMSREAD_R; | |
288 T_SMSREAD_R* getUserData_T_SMSREAD_R( T_MFW_WIN *win) | |
289 { | |
290 if (win == NULL) | |
291 return (NULL); | |
292 return((T_SMSREAD_R *)win->user); | |
293 } | |
294 | |
295 | |
296 typedef struct | |
297 { | |
298 /* administrative data */ | |
299 | |
300 T_MMI_CONTROL mmi_control; | |
301 T_MFW_HND win; | |
302 SHORT id; | |
303 T_MFW_HND parent; | |
304 T_MFW_HND editor_win; | |
305 | |
306 /* associated handlers */ | |
307 | |
308 | |
309 /* internal data */ | |
310 T_SMS_EDITOR_DATA *sms_editor_data; | |
311 /*SPR 2686, removed unused data field*/ | |
312 } T_SMSREAD_R_TEXTEDT2; | |
313 | |
314 T_SMSREAD_R_TEXTEDT2* getUserData_T_SMSREAD_R_TEXTEDT2( T_MFW_WIN *win) | |
315 { | |
316 if (win == NULL) | |
317 return (NULL); | |
318 return((T_SMSREAD_R_TEXTEDT2 *)win->user); | |
319 } | |
320 | |
321 | |
322 | |
323 typedef struct | |
324 { | |
325 /* administrative data */ | |
326 | |
327 T_MMI_CONTROL mmi_control; | |
328 T_MFW_HND win; | |
329 SHORT id; | |
330 T_MFW_HND parent; | |
331 | |
332 /* associated handlers */ | |
333 | |
334 /* !!! **************************************** modify here **************************************** !!!*/ | |
335 T_MFW_HND kbd; | |
336 T_MFW_HND kbd_long; | |
337 T_MFW_HND menu; | |
338 /* !!! **************************************** end modify here **************************************** !!! */ | |
339 | |
340 /* internal data */ | |
341 | |
342 /* !!! **************************************** modify here **************************************** !!!*/ | |
343 /*SPR 2686, removed unused data field*/ | |
344 T_MFW_HND sms; | |
345 T_MFW_HND dialog_win; | |
346 | |
347 /* !!! **************************************** end modify here **************************************** !!! */ | |
348 T_SMS_EDITOR_DATA *sms_editor_data; //NM 25.8 | |
349 } T_SMSREAD_R_OPT; | |
350 T_SMSREAD_R_OPT* getUserData_T_SMSREAD_R_OPT( T_MFW_WIN *win) | |
351 { | |
352 if (win == NULL) | |
353 return (NULL); | |
354 return((T_SMSREAD_R_OPT *)win->user); | |
355 } | |
356 | |
357 | |
358 | |
359 | |
360 | |
361 static enum | |
362 { | |
363 READ_SMS_LIST, | |
364 READ_SELECTED_SMS | |
365 } g_sms_state; | |
366 | |
367 //MZ 7/02/01 tmp enums. | |
368 static enum | |
369 { | |
370 MFW_MB_LINE1, | |
371 MFW_MB_DATA | |
372 }mfw_mailBox_type; | |
373 | |
374 /*MC SPR2175, removed alphabet conversion tables which are now in ATBCommon.c*/ | |
375 | |
376 static const MfwMnuAttr readSMS_menuAttrib = | |
377 { | |
378 &readSMS_menuArea, | |
379 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
380 -1, /* use default font */ | |
381 NULL, /* with these items */ | |
382 0, /* number of items */ | |
383 COLOUR_LIST_SMS, | |
384 TxtMessages, | |
385 NULL, | |
386 MNUATTRSPARE | |
387 | |
388 }; | |
389 | |
390 //Mar 28, 2006 DR:OMAPS00047813 x0035544 | |
391 /*default static menu*/ | |
392 static const MfwMnuAttr menuSearchNumListAttr = | |
393 { | |
394 &menuArea, | |
395 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
396 -1, /* use default font */ | |
397 NULL, /* with these items (filled in later) */ | |
398 0, /* number of items (filled in leter) | |
399 | |
400 */ | |
401 COLOUR_LIST_XX, /* Colour */ | |
402 TxtExtractNumber, /* Hdr Id */ | |
403 NULL, /* Background */ | |
404 MNUATTRSPARE /* unused */ | |
405 }; | |
406 | |
407 | |
408 | |
409 static SHORT g_sms_list_counter; | |
410 | |
411 static SHORT g_nb_line_sms; | |
412 static int search_index; /* SPR888 - SH - keeps track of position within SMS for extract number */ | |
413 | |
414 static T_MFW_HND info_win=0; | |
415 static T_MFW_HND deleting_win = 0; | |
416 static T_MFW_HND list_win=0; | |
417 static T_MFW_HND sms_read_win = 0;/*MC 1991 main SMS read window*/ | |
418 static T_MFW_HND message_win = 0; /*MC 2132, individual message display win*/ | |
419 static T_MFW_HND option_mnu_win = 0;/*MC 2132, options menu window*/ | |
420 | |
421 static char sms_text_ascii[MAX_EDITOR_LEN]; | |
422 | |
423 /* we need this variable "read_status" to know which sms message we are going | |
424 to edit (user pressed in the sms menu-> EDIT) | |
425 because SMS_MT & SMS_MO have different size of character | |
426 (current length saved in "current_sms_len") !! | |
427 SMS_MT includes additional TIME, DATE and NUMBER and we dont want | |
428 to show it when we are editing. | |
429 */ | |
430 static UBYTE read_status; | |
431 static USHORT current_sms_len= 0; | |
432 | |
433 // Dec 15,2004 REF: CRR 24396 xkundadu | |
434 // Description: Phone crashes when a message is received while the | |
435 // 'List Empty' dialog is displayed. | |
436 // Solution: NULL check is added for the list_win handle before calling | |
437 // listsDestroy() function when an MT sms is receieved. | |
438 | |
439 // This checks whether the 'List Empty' dialog is present or not. | |
440 static BOOL SmsListEmptyDlgPresent = 0; | |
441 | |
442 static T_SmsUserData SmsData; | |
443 int SmsRead_GetStatusText( char* op_text_str, int status); // RAVI | |
444 static T_MFW_HND smsRead_NumberName_info_screen(T_MFW_HND parent_window, T_SmsUserData *UserData,char* name); | |
445 UBYTE check_assoc_name(char *name, T_MFW_SMS_ADDR sms_addr); | |
446 | |
447 | |
448 static T_MFW_HND SmsRead_R_OPT_create (T_MFW_HND parent); | |
449 static void SmsRead_R_OPT_destroy (T_MFW_HND window); | |
450 static void SmsRead_R_OPT_StandardDialog(T_MFW_HND win, char *text, ULONG duration); | |
451 static void SmsRead_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
452 static int SmsRead_R_OPT_win_cb (MfwEvt e, MfwWin *w); | |
453 static int SmsRead_R_OPT_mfw_cb (MfwEvt event, void *parameter); | |
454 static int SmsRead_R_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); | |
455 static int SmsRead_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k); | |
456 static int SmsRead_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m); | |
457 static int SmsRead_R_OPTExeDelete(MfwMnu* m, MfwMnuItem* i); | |
458 static int SmsRead_R_OPTExeReply(MfwMnu* m, MfwMnuItem* i); | |
459 static int SmsRead_R_OPTExeStoreNumber(MfwMnu* m, MfwMnuItem* i); | |
460 void SmsRead_StoreNumber(void); | |
461 static int SmsRead_R_OPTExeEdit(MfwMnu* m, MfwMnuItem* i); | |
462 | |
463 /*SPR 2530,, old code which displays the contents of the SMS messages in the SMS list | |
464 has been compiled out using the macro ORIGINAL_SMS_LIST. | |
465 If ORGINAL_SMS_LIST is defined, then the old list is shown, otherwise the new kind of SMS | |
466 list is shown*/ | |
467 | |
468 | |
469 /*SPR 2530,compiled out unused global vars*/ | |
470 #ifdef ORIGINAL_SMS_LIST | |
471 static SHORT g_sms_list_counter; | |
472 | |
473 static SHORT g_nb_line_sms; | |
474 #endif | |
475 T_MFW_HND retry_handle;/*handle for the timer to retry reading an SMS. */ | |
476 int retry_index=0;/*index of message we're trying to read again.*/ | |
477 void retry_sms_read(int index); | |
478 int retry_sms_read_tim_cb(MfwEvt event, MfwTim *timer_info); | |
479 | |
480 /* R is the identifier used for the function of the Read menu window */ | |
481 static T_MFW_HND SmsRead_R_create (T_MFW_HND parent); | |
482 static void SmsRead_R_destroy (T_MFW_HND window); | |
483 static void SmsRead_R_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
484 static int SmsRead_R_win_cb (MfwEvt e, MfwWin *w); | |
485 static int SmsRead_R_mfw_cb(MfwEvt event, void *parameter); | |
486 static int SmsRead_R_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); | |
487 static void SmsRead_R_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData); | |
488 static void SmsRead_R_BuildList(T_MFW_HND win,int inUnicode); | |
489 | |
490 // Fill an unicode structure for display | |
491 void string_CopyW2W(wstring_t *strDestination, charw_t *strSource, USHORT count ); | |
492 | |
493 | |
494 static T_MFW_HND SmsRead_R_TEXTEDT2_create (T_MFW_HND parent); | |
495 static void SmsRead_R_TEXTEDT2_destroy (T_MFW_HND window); | |
496 static void SmsRead_R_TEXTEDT2_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); | |
497 static int SmsRead_R_TEXTEDT2_win_cb (MfwEvt e, MfwWin *w); | |
498 static void SmsRead_R_TEXTEDT2_editor_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); | |
499 static void SmsRead_R_TEXTEDT2_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData); | |
500 | |
501 | |
502 | |
503 static BOOL Search_forNextNumber(T_SmsUserData *UserData); | |
504 //Mar 27, 2006 DR:OMAPS00047813 x0035544 | |
505 static void SmsRead_numlist_destroy(MfwHnd own_window); | |
506 static void SmsRead_numlist_cb(T_MFW_HND Parent, ListMenuData * ListData); | |
507 void smsread_numlist_exec_cb (T_MFW_HND win, USHORT event); | |
508 static T_MFW_HND SmsRead_BuildNumList_Menu(T_MFW_HND win); | |
509 static int smsread_numlist_win_cb (MfwEvt e, MfwWin *w); | |
510 void Search_forNumberInSMS(T_SmsUserData *UserData); | |
511 | |
512 | |
513 //Mar 24, 2006 REF: SPR 47813 x0035544 | |
514 static int smsread_num_ctr; | |
515 static char **num_buffer=NULL; | |
516 | |
517 static const MfwMnuItem SmsRead_R_OPTItems [] = | |
518 { | |
519 {0,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none}, | |
520 {0,0,0,(char *)TxtReply,0,(MenuFunc)SmsRead_R_OPTExeReply,item_flag_none}, | |
521 {0,0,0,(char *)TxtEdit,0,(MenuFunc)SmsRead_R_OPTExeEdit,item_flag_none}, | |
522 {0,0,0,(char *)TxtForward,0,(MenuFunc)SmsRead_R_OPTExeEdit,item_flag_none},//May 03, 2004 REF: CRR 13845 Deepa M -Menu item to forward SMS | |
523 {0,0,0,(char *)TxtExtractNumber,0,(MenuFunc)SmsRead_R_OPTExeStoreNumber,item_flag_none}, | |
524 {0,0,0,(char *)TxtCallNumber,0,(MenuFunc)SmsRead_StoreNumber,item_flag_none} | |
525 }; | |
526 | |
527 static const MfwMnuAttr SmsRead_R_OPTAttrib = | |
528 { | |
529 &SmsRead_R_OPTArea, | |
530 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
531 -1, /* use default font */ | |
532 (MfwMnuItem*) SmsRead_R_OPTItems, /* with these items */ | |
533 sizeof(SmsRead_R_OPTItems)/sizeof(MfwMnuItem) /* number of items */ | |
534 }; | |
535 | |
536 //Sep 08, 2004 REF: CRR 24393 Deepa M. D | |
537 //New menu item for the saved/unsent messages. | |
538 static const MfwMnuItem SmsRead_R_Unsent_OPTItems [] = | |
539 { | |
540 {0,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none}, | |
541 {0,0,0,(char *)TxtEdit,0,(MenuFunc)SmsRead_R_OPTExeEdit,item_flag_none}, | |
542 {0,0,0,(char *)TxtForward,0,(MenuFunc)SmsRead_R_OPTExeEdit,item_flag_none}, | |
543 {0,0,0,(char *)TxtExtractNumber,0,(MenuFunc)SmsRead_R_OPTExeStoreNumber,item_flag_none}, | |
544 | |
545 }; | |
546 | |
547 //Sep 08, 2004 REF: CRR 24393 Deepa M. D | |
548 //Menu attributes for the saved/unsent messages. | |
549 static const MfwMnuAttr SmsRead_R_Unsent_OPTAttrib = | |
550 { | |
551 &SmsRead_R_OPTArea, | |
552 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ | |
553 -1, /* use default font */ | |
554 (MfwMnuItem*) SmsRead_R_Unsent_OPTItems, /* with these items */ | |
555 sizeof(SmsRead_R_Unsent_OPTItems)/sizeof(MfwMnuItem) /* number of items */ | |
556 }; | |
557 | |
558 | |
559 | |
560 /******************************************************************************* | |
561 | |
562 $Function: charPtrToUBYTEPtr | |
563 | |
564 $Description: Converts a char ptr to a UBYTE ptr. The procedures can be replaced by macro | |
565 once all conversions are confirmed as valid. | |
566 | |
567 $Returns: data set to new type | |
568 | |
569 $Arguments: data -data item of input type. | |
570 | |
571 *******************************************************************************/ | |
572 #ifndef MMI_USE_MACROS | |
573 UBYTE charToUBYTE ( char chr ) { return((UBYTE)chr); } | |
574 UBYTE* charPtrToUBYTEPtr ( char *ptr ) { return((UBYTE*)ptr); } | |
575 UBYTE SHORTToUBYTE ( SHORT data ) { return((UBYTE)data); } | |
576 | |
577 char UBYTEToChar ( UBYTE data) { return((char)data); } | |
578 char* UBYTEPtrToCharPtr ( UBYTE* data) { return((char*)data); } | |
579 char* USHORTPtrToCharPtr ( USHORT* data) { return((char*)data); } | |
580 | |
581 USHORT charToUSHORT ( char chr ) { return((USHORT)chr); } | |
582 USHORT UBYTEToUSHORT ( UBYTE data) { return((USHORT)data); } | |
583 USHORT* charPtrToUSHORTPtr (char* data) { return((USHORT*)data); } | |
584 | |
585 #else | |
586 #define charToUBYTE (UBYTE) | |
587 #define charPtrToUBYTEPtr (UBYTE*) | |
588 #define SHORTToUBYTE (UBYTE) | |
589 | |
590 #define UBYTEPtrToCharPtr (char*) | |
591 #define UBYTEToChar (char) | |
592 #define USHORTPtrToCharPtr (char*) | |
593 | |
594 #define charToUSHORT (USHORT) | |
595 #define UBYTEToUSHORT (USHORT) | |
596 #define charPtrToUSHORTPtr (USHORT*) | |
597 #endif | |
598 /*MC SPR2175, removed GSM<->ASCII<->UCS2 conversion functions, moved to ATBCommon*/ | |
599 | |
600 /**/ | |
601 | |
602 /******************************************************************************* | |
603 | |
604 $Function: SmsRead_R_start | |
605 | |
606 $Description: Start the creation of the main window for SMS reading | |
607 | |
608 $Returns: mfw window handler | |
609 | |
610 $Arguments: parent_window - Parent window handler | |
611 menuAttr - Menu attributes. | |
612 | |
613 *******************************************************************************/ | |
614 T_MFW_HND SmsRead_R_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) | |
615 { | |
616 TRACE_EVENT_P1("sms_read_win:%d", sms_read_win); | |
617 /*SPR2132, if the list window already exists, destroy it before creating a new one*/ | |
618 if (sms_read_win != NULL) | |
619 SmsRead_R_destroy(sms_read_win); | |
620 | |
621 TRACE_FUNCTION ("SmsRead_R_start()"); | |
622 /*SPR 1991 use ssms_read_win rather than a local var*/ | |
623 sms_read_win = SmsRead_R_create (parent_window); | |
624 | |
625 if (sms_read_win NEQ NULL) | |
626 { | |
627 /* We transmit to the SMS editor the address of the data buffer */ | |
628 SEND_EVENT (sms_read_win, E_INIT, SmsRead_R_ID, (void *)menuAttr); | |
629 } | |
630 return sms_read_win; | |
631 } | |
632 | |
633 /******************************************************************************* | |
634 | |
635 $Function: SmsRead_R_create | |
636 | |
637 $Description: create the SMS read window (dynamic list of all the SMS) | |
638 | |
639 $Returns: mfw window handler | |
640 | |
641 $Arguments: parent_window - Parent window handler | |
642 | |
643 *******************************************************************************/ | |
644 static T_MFW_HND SmsRead_R_create(MfwHnd parent_window) | |
645 { | |
646 T_SMSREAD_R * data = (T_SMSREAD_R *)ALLOC_MEMORY (sizeof (T_SMSREAD_R)); | |
647 T_MFW_WIN * win; | |
648 | |
649 TRACE_FUNCTION ("SmsRead_R_create()"); | |
650 | |
651 /* | |
652 * Create window handler | |
653 */ | |
654 | |
655 data->win = | |
656 win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)SmsRead_R_win_cb); | |
657 if (data->win EQ NULL) | |
658 { | |
659 return NULL; | |
660 } | |
661 /* | |
662 * connect the dialog data to the MFW-window | |
663 */ | |
664 | |
665 data->mmi_control.dialog = (T_DIALOG_FUNC)SmsRead_R_exec_cb; | |
666 data->mmi_control.data = data; | |
667 win = getWinData(data->win); | |
668 win->user = (void *)data; | |
669 data->parent = parent_window; | |
670 winShow(data->win); | |
671 | |
672 /* | |
673 * return window handle | |
674 */ | |
675 | |
676 return data->win; | |
677 } | |
678 | |
679 /******************************************************************************* | |
680 | |
681 $Function: SmsRead_R_destroy | |
682 | |
683 $Description: Destroy the SMS read window (dynamic list of all the SMS) | |
684 | |
685 $Returns: none | |
686 | |
687 $Arguments: own_window - window handler | |
688 | |
689 *******************************************************************************/ | |
690 | |
691 static void SmsRead_R_destroy(MfwHnd own_window) | |
692 { | |
693 T_MFW_WIN * win_data; | |
694 T_SMSREAD_R * data; | |
695 USHORT i; | |
696 | |
697 | |
698 TRACE_FUNCTION ("SmsRead_R_destroy()"); | |
699 | |
700 if (own_window) | |
701 { | |
702 win_data = getWinData(own_window); //((T_MFW_HDR *))->data; | |
703 data = getUserData_T_SMSREAD_R(win_data); | |
704 if (data) | |
705 { | |
706 /* | |
707 * Delete WIN handler | |
708 */ | |
709 sms_delete(data->sms_handle); | |
710 | |
711 | |
712 /*SPR 2132, if the message options menu or the messaeg display screen exist, | |
713 destroy them */ | |
714 if (option_mnu_win) | |
715 { | |
716 SmsRead_R_OPT_destroy(option_mnu_win); | |
717 | |
718 } | |
719 if (message_win) | |
720 { | |
721 SmsRead_R_TEXTEDT2_destroy(message_win); | |
722 message_win = 0; | |
723 } | |
724 /*SPR 2132 end*/ | |
725 | |
726 if (info_win) | |
727 { | |
728 SEND_EVENT(info_win,DIALOG_DESTROY,0,0 ); | |
729 info_win = 0; | |
730 } | |
731 if (list_win){ | |
732 | |
733 SEND_EVENT(list_win/*SPR1991*/,E_LIST_DESTROY/*SPR 2132*/,0,0 ); | |
734 list_win = 0; | |
735 } | |
736 win_delete (data->win); | |
737 { | |
738 | |
739 } | |
740 | |
741 /* | |
742 * Free Memory | |
743 */ | |
744 | |
745 /* Free the data allocated for the name associated to the phone number */ | |
746 if (data->sms_editor_data.assoc_name != NULL) | |
747 FREE_MEMORY( (void *)data->sms_editor_data.assoc_name, strlen(data->sms_editor_data.assoc_name) + 1); | |
748 | |
749 /* Free the data allocated for the dynamic list */ | |
750 if (data->menu_list_data != NULL) | |
751 { | |
752 for (i = 0; i < ((data->sms_list_data).nb_sms_stored); i++) | |
753 { | |
754 FREE_MEMORY( (void *)data->sms_list_data.sms_header[i], UCS2_MENU_TEXT_LEN+ 1/*SPR1242*/); | |
755 } | |
756 /*SPR 2686, only de-allocate memory for the number of messages displayed*/ | |
757 FREE_MEMORY ((void *)data->menu_list_data->List,((data->sms_list_data).nb_sms_stored) * sizeof(T_MFW_MNU_ITEM)); | |
758 FREE_MEMORY ((UBYTE *)data->menu_list_data, sizeof(ListMenuData)); | |
759 } | |
760 #ifdef FF_MMI_SMS_DYNAMIC | |
761 FREE_MEMORY((void*)data->sms_list_data.sms_messages,g_max_messages * sizeof(T_MFW_SMS_MSG) ); | |
762 FREE_MEMORY((void*)data->sms_list_data.sms_header, g_max_messages * sizeof(wstring_t)); | |
763 #endif | |
764 FREE_MEMORY ((void *)data, sizeof (T_SMSREAD_R)); | |
765 sms_read_win = 0; | |
766 } | |
767 else | |
768 { | |
769 TRACE_EVENT ("SmsRead_R_destroy() called twice"); | |
770 } | |
771 } | |
772 } | |
773 | |
774 /******************************************************************************* | |
775 | |
776 $Function: SmsRead_R_exec_cb | |
777 | |
778 $Description: Exec callback function of the SMS read window (dynamic list of | |
779 all the SMS) | |
780 | |
781 $Returns: none | |
782 | |
783 $Arguments: win - window handler | |
784 event - mfw event | |
785 parameter - optional data. | |
786 | |
787 *******************************************************************************/ | |
788 void SmsRead_R_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
789 /* callback handler for events sent to to trigger execution */ | |
790 { | |
791 T_MFW_WIN * win_data; | |
792 T_SMSREAD_R * data; | |
793 T_SMS_LIST_DATA * list_data; | |
794 T_MFW_EVENT MfwEvents; | |
795 | |
796 T_MFW_SMS_STAT sms_list_type = *(T_MFW_SMS_STAT *)parameter; | |
797 | |
798 T_MFW_HND l_parent; | |
799 T_DISPLAY_DATA DisplayInfo; | |
800 // Status of SMS reading | |
801 T_MFW status; | |
802 int i; | |
803 | |
804 win_data = getWinData(win); //((T_MFW_HDR *))->data; | |
805 data = getUserData_T_SMSREAD_R(win_data); | |
806 list_data = &data->sms_list_data; | |
807 | |
808 TRACE_FUNCTION ("SmsRead_R_exec_cb()"); | |
809 | |
810 switch (event) | |
811 { | |
812 case E_INIT: | |
813 // May 27, 2005 MMI-FIX-29869 x0018858 | |
814 #ifdef FF_MMI_SMS_DYNAMIC | |
815 // Memory allocation done here | |
816 if(list_data->sms_messages == NULL) | |
817 list_data->sms_messages = (T_MFW_SMS_MSG*)ALLOC_MEMORY (g_max_messages * sizeof(T_MFW_SMS_MSG) ); | |
818 #endif | |
819 /* initialization of administrative data */ | |
820 info_win=0; | |
821 data->id = value; | |
822 data->menu_list_data = NULL; | |
823 | |
824 | |
825 //NM 24.8 | |
826 /* Verify that SMS handling has been correctly initialised */ | |
827 if (!smsidle_get_ready_state()) | |
828 { | |
829 SmsMenu_loadDialogDefault(&DisplayInfo); | |
830 | |
831 DisplayInfo.TextId = TxtPleaseWait; | |
832 //DisplayInfo.TextId2 = TxtReady; | |
833 // Generic function for info messages | |
834 DisplayInfo.Callback = (T_VOID_FUNC)SmsRead_R_dialog_cb; | |
835 | |
836 info_dialog(win, &DisplayInfo); | |
837 | |
838 break; | |
839 } | |
840 /* We have to handle E_SMS_MO and E_SMS_MT MFW events, in order to retrieve the SMS */ | |
841 MfwEvents = E_SMS_MT | E_SMS_MO | E_SMS_MT_RECEIVED | E_SMS_MO_AVAIL| | |
842 E_SMS_ERR | E_SMS_OK | E_SMS_MEM_FREE | E_SMS_MEM_FULL; | |
843 | |
844 data->sms_handle = sms_create(win,MfwEvents,(MfwCb)SmsRead_R_mfw_cb); | |
845 | |
846 | |
847 /* Get info on the stored messages | |
848 According to sms_list_type filter some specific type (new, read...) */ | |
849 /*MC SPR 2530, change sms_index_list to sms_message_list, we need additional info*/ | |
850 #ifdef FF_MMI_SMS_DYNAMIC | |
851 list_data->nb_sms_stored = sms_message_list(sms_list_type, list_data->sms_messages, g_max_messages); | |
852 #else | |
853 list_data->nb_sms_stored = sms_message_list(sms_list_type, list_data->sms_messages, MAX_MESSAGES); | |
854 #endif | |
855 /* we want to get the whole SMS list */ | |
856 if (list_data->nb_sms_stored > 0) | |
857 { | |
858 #ifdef ORIGINAL_SMS_LIST | |
859 if (!info_win) | |
860 info_win = mmi_dialog_information_screen_forever(win,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); | |
861 | |
862 // We want to read all the SMS | |
863 g_sms_state = READ_SMS_LIST; | |
864 /* global counter to decrement each time a message is read */ | |
865 g_sms_list_counter = list_data->nb_sms_stored - 1; | |
866 | |
867 /* Initialise counter for number of entries in sms list. used to call the correct | |
868 no of FreeAllocs MZ 8/03/01 */ | |
869 g_nb_line_sms =0; | |
870 | |
871 status = sms_read(MFW_SMS_MESSAGE, (unsigned char)(list_data->sms_messages[g_sms_list_counter]).index); | |
872 #else | |
873 /*SPR 2530, instead of starting to raed the SMS list in a chain , just copy SMS status info | |
874 and sender names to list*/ | |
875 int i, txt_len; | |
876 /*we're assuming the default language is a latin one*/ | |
877 T_MFW_PHB_ENTRY phonebook_entry; | |
878 BOOL unicode_flag= FALSE; | |
879 UBYTE output_alphabet= MFW_ASCII; | |
880 char* name_pointer = NULL; | |
881 | |
882 // May 27, 2005 MMI-FIX-29869 x0018858 | |
883 #ifdef FF_MMI_SMS_DYNAMIC | |
884 // Memory allocation done here | |
885 list_data->sms_header = (wstring_t **) ALLOC_MEMORY (g_max_messages * sizeof(wstring_t) ); | |
886 #endif | |
887 | |
888 /*for each entry in the message list*/ | |
889 for (i=0;i<list_data->nb_sms_stored; i++) | |
890 { /*allocate memory in the list*/ | |
891 | |
892 if(list_data->sms_header[i] == NULL) | |
893 list_data->sms_header[i] = (wstring_t *) ALLOC_MEMORY (UCS2_MENU_TEXT_LEN + 1); | |
894 /*SPR2530 clear buffer*/ | |
895 memset(sms_text_ascii, 0, MAX_EDITOR_LEN); | |
896 memset(list_data->sms_header[i], 0, UCS2_MENU_TEXT_LEN + 1); | |
897 | |
898 //Use common procedure to display status info.] | |
899 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
900 //check for Status report type and send MFW_SMS_STATRPT as status | |
901 if( list_data->sms_messages[i].msg_type EQ MFW_SMS_STATRPT) | |
902 { | |
903 strcpy(sms_text_ascii, MmiRsrcGetText(TxtReport)); | |
904 txt_len = strlen( sms_text_ascii); | |
905 } | |
906 else | |
907 txt_len = SmsRead_GetStatusText( sms_text_ascii, list_data->sms_messages[i].stat); | |
908 | |
909 /*if we're in chinese, then all string handling is in Unicode*/ | |
910 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
911 { unicode_flag = TRUE; | |
912 output_alphabet= MFW_DCS_UCS2; | |
913 } | |
914 /*if incoming SMS, copy name or number to list*/ | |
915 if (list_data->sms_messages[i].stat == MFW_SMS_UNREAD || list_data->sms_messages[i].stat == MFW_SMS_READ) | |
916 { /*if phonebook entry found*/ | |
917 if (bookFindNameInPhonebook( list_data->sms_messages[i].addr.number, &phonebook_entry )) | |
918 { | |
919 /*if name isn't blank*/ | |
920 if (phonebook_entry.name.len >0) | |
921 { /*if unicode tag we have to make some adjustments*/ | |
922 if (phonebook_entry.name.data[0] == 0x80) | |
923 { name_pointer = (char*)&phonebook_entry.name.data[2]; | |
924 phonebook_entry.name.dcs = MFW_DCS_UCS2; | |
925 phonebook_entry.name.len-=2; | |
926 /*SPR2530 moved conversion here*/ | |
927 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
928 //Donot display sender's address for status report | |
929 if( list_data->sms_messages[i].msg_type NEQ MFW_SMS_STATRPT) | |
930 ATB_convert_String(name_pointer, phonebook_entry.name.dcs&0x0c, phonebook_entry.name.len, | |
931 &sms_text_ascii[txt_len],output_alphabet , UCS2_MENU_TEXT_LEN-txt_len, TRUE); | |
932 } | |
933 else | |
934 { name_pointer = (char*)phonebook_entry.name.data; | |
935 /*copy (and convert) name to buffer*/ | |
936 /*SPR2530 explicitly convert from ASCII to current alphabet*/ | |
937 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
938 //Donot display sender's address for status report | |
939 if( list_data->sms_messages[i].msg_type NEQ MFW_SMS_STATRPT) | |
940 ATB_convert_String(name_pointer, MFW_ASCII, phonebook_entry.name.len, | |
941 &sms_text_ascii[txt_len],output_alphabet , UCS2_MENU_TEXT_LEN-txt_len, TRUE); | |
942 | |
943 } | |
944 } | |
945 } | |
946 else | |
947 { | |
948 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
949 //Donot display sender's address for status report | |
950 if( list_data->sms_messages[i].msg_type NEQ MFW_SMS_STATRPT) | |
951 /*copy (and convert) number to buffer*/ | |
952 ATB_convert_String(list_data->sms_messages[i].addr.number, MFW_ASCII, MFW_NUM_LEN, | |
953 &sms_text_ascii[txt_len],output_alphabet ,UCS2_MENU_TEXT_LEN-txt_len, TRUE); | |
954 } | |
955 | |
956 } | |
957 /* use truncation function to copy message header to list*/ | |
958 resources_truncate_to_screen_width((char*)sms_text_ascii,0,(char*) list_data->sms_header[i], UCS2_MENU_TEXT_LEN, SCREEN_SIZE_X, unicode_flag); | |
959 } | |
960 //*All the messages have been retrieved --> display the list of SMS*/ | |
961 if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE) | |
962 SmsRead_R_BuildList(win,0); | |
963 else | |
964 SmsRead_R_BuildList(win,1); | |
965 #endif | |
966 } | |
967 else | |
968 SmsRead_DisplayStandardDialog(win, TxtNoMessages, THREE_SECS); | |
969 break; | |
970 | |
971 case E_RETURN: | |
972 /* Call the recreate function that will create and display a dynamic list from the list of SMS */ | |
973 listDisplayListMenu(win, data->menu_list_data, (ListCbFunc_t)SmsRead_R_smslist_cb,0); | |
974 break; | |
975 | |
976 case E_BACK: | |
977 /* Received an E_BACK event from the dynamic list --> suicide and E_RETURN to parent */ | |
978 l_parent = data->parent; | |
979 SmsRead_R_destroy(win); | |
980 SEND_EVENT(l_parent, E_RETURN, data->id, NULL); | |
981 | |
982 case E_EXIT: // Terminate exit from sms send... | |
983 // May 27, 2005 MMI-FIX-29869 x0018858 | |
984 #ifdef FF_MMI_SMS_DYNAMIC | |
985 for (i=0;i<list_data->nb_sms_stored; i++) | |
986 { | |
987 FREE_MEMORY((U8*)list_data->sms_header[i], UCS2_MENU_TEXT_LEN + 1 ); | |
988 } | |
989 FREE_MEMORY((U8*)list_data->sms_header, g_max_messages * sizeof(wstring_t) ); | |
990 FREE_MEMORY((U8*)list_data->sms_messages, g_max_messages * sizeof(T_MFW_SMS_MSG)); | |
991 #endif | |
992 listDisplayListMenu(win, data->menu_list_data, (ListCbFunc_t)SmsRead_R_smslist_cb,0); | |
993 // FREE_MEMORY((U8*)list_data->sms_messages, g_max_messages * sizeof(T_MFW_SMS_MSG)); | |
994 | |
995 break; | |
996 default: | |
997 break; | |
998 } | |
999 } | |
1000 | |
1001 /******************************************************************************* | |
1002 | |
1003 $Function: SmsRead_R_win_cb | |
1004 | |
1005 $Description: Window callback function of the SMS read window (dynamic list of | |
1006 all the SMS) | |
1007 | |
1008 $Returns: none | |
1009 | |
1010 $Arguments: w - mfw window handler | |
1011 e - mfw event | |
1012 | |
1013 *******************************************************************************/ | |
1014 | |
1015 static int SmsRead_R_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */ | |
1016 { | |
1017 TRACE_FUNCTION ("SmsRead_R_win_cb()"); | |
1018 switch (e) | |
1019 { | |
1020 case MfwWinVisible: /* window is visible */ | |
1021 break; | |
1022 case MfwWinFocussed: /* input focus / selected */ | |
1023 case MfwWinDelete: /* window will be deleted */ | |
1024 default: | |
1025 return MFW_EVENT_REJECTED; | |
1026 } | |
1027 return MFW_EVENT_CONSUMED; | |
1028 } | |
1029 | |
1030 /******************************************************************************* | |
1031 | |
1032 $Function: SmsRead_GetStatusText | |
1033 | |
1034 $Description: Function to copy status string into array provided. | |
1035 | |
1036 $Returns: number of characters used in the output array. | |
1037 | |
1038 $Arguments: op_text_str - pointer to array to store the string | |
1039 status - read status of text message. | |
1040 | |
1041 $History | |
1042 SPR#780-GW-Created to allow consistent display of status in text message list | |
1043 *******************************************************************************/ | |
1044 int SmsRead_GetStatusText( char* op_text_str, int status) | |
1045 { | |
1046 int txt_len, txtId; | |
1047 | |
1048 TRACE_FUNCTION("SmsRead_GetStatusText()"); | |
1049 | |
1050 if (status == MFW_SMS_READ) | |
1051 txtId = TxtOld; | |
1052 else if(status == MFW_SMS_UNREAD) | |
1053 txtId = TxtNew; | |
1054 else if(status == MFW_SMS_STOR_UNSENT) | |
1055 txtId = TxtSaved; | |
1056 else if(status == MFW_SMS_STOR_SENT) | |
1057 txtId = TxtSend; | |
1058 else if(status == MFW_SMS_INVALID)/*SPR 2530*/ | |
1059 txtId = TxtInvalidMessage; | |
1060 else //assume if it is not marked as new/old/sent/unsent | |
1061 txtId = TxtNull; | |
1062 | |
1063 // Check for the READ/UNREAD status of the MT message. | |
1064 if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE) | |
1065 { | |
1066 strcpy(op_text_str,MmiRsrcGetText(txtId)); | |
1067 /* Only add colon if a non-empty string and valid message*/ | |
1068 /*SPR2530 only out in a colon if the message is MT*/ | |
1069 if (txtId == TxtOld || txtId == TxtNew) | |
1070 strcat(op_text_str,":"); | |
1071 txt_len = strlen(op_text_str); | |
1072 } | |
1073 else //language = Chinese, copy unicode string | |
1074 { | |
1075 USHORT* unicodeStr; | |
1076 USHORT* txtStr; | |
1077 int uIndex; | |
1078 | |
1079 unicodeStr = charPtrToUSHORTPtr(op_text_str); | |
1080 | |
1081 txtStr = charPtrToUSHORTPtr(MmiRsrcGetText(txtId)); | |
1082 | |
1083 uIndex = 0; | |
1084 txt_len = 0; | |
1085 while ((*txtStr!= 0) && (uIndex*2 <MENU_TEXT_LENGTH)) | |
1086 { | |
1087 unicodeStr[uIndex] = *txtStr; | |
1088 txtStr++; | |
1089 uIndex++; | |
1090 txt_len = txt_len+2; // 2bytes per chinese char | |
1091 } | |
1092 /*SPR2530 only out in a colon if the message is MT*/ | |
1093 if ((uIndex*2 <MENU_TEXT_LENGTH) &&(txtId == TxtOld || txtId == TxtNew)) | |
1094 { | |
1095 unicodeStr[uIndex] = ((charToUSHORT)(':'))<<8; | |
1096 uIndex++; | |
1097 txt_len = txt_len+2; // 2bytes per chinese char | |
1098 } | |
1099 } | |
1100 /* Return number of characters copied into the array */ | |
1101 return (txt_len); | |
1102 } | |
1103 | |
1104 /******************************************************************************* | |
1105 | |
1106 $Function: SmsRead_R_mfw_cb | |
1107 | |
1108 $Description: MFW callback function of the SMS read window (dynamic list of all the SMS). | |
1109 Only interesting events for reading are handled here | |
1110 | |
1111 $Returns: event status | |
1112 | |
1113 $Arguments: parameter - optional data | |
1114 event - mfw event | |
1115 | |
1116 *******************************************************************************/ | |
1117 int SmsRead_R_mfw_cb(MfwEvt event, void *parameter) | |
1118 { | |
1119 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
1120 T_MFW_WIN * win_data; | |
1121 T_SMSREAD_R * data; | |
1122 T_SMS_LIST_DATA * list_data; | |
1123 T_MFW_SMS_MO * MoMessage; | |
1124 T_MFW_SMS_MT * MtMessage; | |
1125 | |
1126 T_MFW_SMS_IDX msg_info; | |
1127 | |
1128 UBYTE input_type;/*SPR1242, UCS2 or GSM string*/ | |
1129 | |
1130 T_DISPLAY_DATA DisplayInfo; | |
1131 int input_length = 0; /*MC, SPR 1453*/ | |
1132 BOOL unicode = FALSE;/*MC, SPR 1442*/ | |
1133 USHORT sms_len; | |
1134 char *sms_text; | |
1135 // int i; // RAVI | |
1136 int txt_len; | |
1137 | |
1138 win_data = getWinData(win); | |
1139 data = getUserData_T_SMSREAD_R(win_data); | |
1140 list_data = &(data->sms_list_data); | |
1141 | |
1142 TRACE_FUNCTION("SmsRead_R_mfw_cb"); | |
1143 | |
1144 switch(event) | |
1145 { | |
1146 case E_SMS_OK: | |
1147 TRACE_EVENT("SmsRead_R_mfw_cb case:E_SMS_OK "); | |
1148 if(deleting_win) | |
1149 { | |
1150 T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; | |
1151 | |
1152 listsDestroy(list_win); | |
1153 list_win=0; | |
1154 SmsRead_R_destroy(data->win); | |
1155 SmsRead_R_start(NULL, (MfwMnuAttr*)&sms_list_type); | |
1156 SEND_EVENT(deleting_win,DIALOG_DESTROY,0,0 ); | |
1157 | |
1158 //API - Added line to show if the message was deleted! | |
1159 dlg_initDisplayData_TextId( &DisplayInfo, TxtNull, TxtNull, TxtDeleted, TxtNull, COLOUR_STATUS_WAIT); | |
1160 dlg_initDisplayData_events( &DisplayInfo, NULL, TWO_SECS, KEY_HUP ); | |
1161 info_dialog (0, &DisplayInfo); | |
1162 | |
1163 deleting_win = 0; | |
1164 } | |
1165 | |
1166 break; | |
1167 case E_SMS_MO: | |
1168 TRACE_EVENT("SmsRead_R_mfw_cb case:E_SMS_MO "); | |
1169 MoMessage = (T_MFW_SMS_MO *)parameter; | |
1170 /*SPR 2530, don't need to craete SMS list here anymore*/ | |
1171 #ifdef ORIGINAL_SMS_LIST | |
1172 // We are reading all the SMS on the SIM | |
1173 if (g_sms_state EQ READ_SMS_LIST) | |
1174 { | |
1175 // If no message text, display the address: TBD international format and phonebook | |
1176 if (MoMessage->msg_len == 0) | |
1177 { | |
1178 // If there is an associated name, it is displayed (but not stored here, we will have to retrieve it again if detailed view) | |
1179 sms_text = (MoMessage->dest_addr).number; | |
1180 sms_len = strlen(sms_text); | |
1181 } | |
1182 else | |
1183 { | |
1184 sms_text = MoMessage->sms_msg; | |
1185 sms_len = MoMessage->msg_len; | |
1186 } | |
1187 | |
1188 memset((char*)sms_text_ascii,'\0',UCS2_MENU_TEXT_LEN + 1); | |
1189 | |
1190 TRACE_EVENT_P1("MO Message Status = %d", msg_info.stat); | |
1191 sms_copy_idx(MoMessage->msg_ref, &msg_info); | |
1192 | |
1193 //GW-SPR#780-Use common procedure to display status info. | |
1194 txt_len = SmsRead_GetStatusText( sms_text_ascii, msg_info.stat); | |
1195 | |
1196 /*MC, SPR1242 don't trust the DCS, check for Unicode tag*/ | |
1197 if (MoMessage->sms_msg[0] == 0x80 ||MoMessage->dcs == MFW_DCS_UCS2 ) | |
1198 { input_type = MFW_DCS_UCS2; | |
1199 input_length = MoMessage->msg_len-1;/*MC,SPR 1453, prevent @ symbol on end of string*/ | |
1200 } | |
1201 else | |
1202 { input_type = MFW_DCS_8bits; | |
1203 input_length = MoMessage->msg_len;/*MC, SPR 1453*/ | |
1204 } | |
1205 | |
1206 /*mc end*/ | |
1207 | |
1208 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
1209 { unicode = TRUE;/*MC, SPR 1442, we'll be displaying messages as unicode*/ | |
1210 /*SPR2175, use new function for conversion*/ | |
1211 ATB_convert_String( MoMessage->sms_msg, input_type /*MC SPR1242*/, MoMessage->msg_len, | |
1212 &sms_text_ascii[txt_len], MFW_DCS_UCS2, UCS2_MENU_TEXT_LEN-(txt_len+1), TRUE); | |
1213 | |
1214 } | |
1215 else | |
1216 { unicode = FALSE;/*MC, SPR 1442, we'll be displaying messages as ASCII*/ | |
1217 /*SPR2175, use new function for conversion*/ | |
1218 ATB_convert_String( MoMessage->sms_msg, input_type /*MC SPR1242*/, input_length/*SPR 1453*/, | |
1219 &sms_text_ascii[txt_len] , MFW_ASCII, MENU_TEXT_LENGTH-(txt_len+1), TRUE); | |
1220 | |
1221 } | |
1222 | |
1223 | |
1224 /* just in case */ | |
1225 if (g_sms_list_counter >= 0) | |
1226 { | |
1227 list_data->sms_header[g_sms_list_counter] = (wstring_t *) ALLOC_MEMORY (UCS2_MENU_TEXT_LEN + 1/*MC SPR1242*/); | |
1228 /*MC, SPR 1442, use truncation function to copy message header to list*/ | |
1229 resources_truncate_to_screen_width(sms_text_ascii,0,(char*) list_data->sms_header[g_sms_list_counter], UCS2_MENU_TEXT_LEN, SCREEN_SIZE_X, unicode); | |
1230 } | |
1231 TRACE_EVENT_P1("g_sms_list_counter = %d", g_sms_list_counter); | |
1232 | |
1233 g_sms_list_counter--; | |
1234 | |
1235 if (g_sms_list_counter >= 0) | |
1236 { | |
1237 // There are still messages to read. | |
1238 /*SPR2260, if reading SMS fails, retry*/ | |
1239 if (sms_read(MFW_SMS_MESSAGE, SHORTToUBYTE(list_data->sms_messages[g_sms_list_counter].index))== MFW_SMS_FAIL) | |
1240 { | |
1241 retry_sms_read(SHORTToUBYTE(list_data->sms_messages[g_sms_list_counter].index)); | |
1242 } | |
1243 else | |
1244 g_nb_line_sms++; | |
1245 } | |
1246 else | |
1247 { | |
1248 // All the messages have been retrieved --> display the list of SMS | |
1249 if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE) | |
1250 SmsRead_R_BuildList(win,0); | |
1251 else | |
1252 SmsRead_R_BuildList(win,1); | |
1253 } | |
1254 } | |
1255 // A particular SMS has been selected. We need to get all the info: full text, time stamp... | |
1256 else | |
1257 #endif | |
1258 if (g_sms_state EQ READ_SELECTED_SMS) | |
1259 | |
1260 { | |
1261 data->sms_editor_data.sms_info = (T_MFW_SMS_PARA *)ALLOC_MEMORY (sizeof (T_MFW_SMS_PARA)); | |
1262 data->sms_editor_data.sms_type = MMI_SMS_MO; | |
1263 | |
1264 memcpy(data->sms_editor_data.sms_info, (T_MFW_SMS_PARA *)MoMessage, sizeof(T_MFW_SMS_PARA)); | |
1265 SmsRead_R_TEXTEDT2_start(win, (MfwMnuAttr *)&(data->sms_editor_data)); | |
1266 } | |
1267 | |
1268 break; | |
1269 case E_SMS_MT: | |
1270 | |
1271 MtMessage = (T_MFW_SMS_MT *)parameter; | |
1272 | |
1273 /*SPR 2530, don't need to craete SMS list here anymore*/ | |
1274 #ifdef ORIGINAL_SMS_LIST | |
1275 | |
1276 if (g_sms_state EQ READ_SMS_LIST) | |
1277 { | |
1278 /*SPR 2176, if message is the last one requested from MFW*/ | |
1279 if (list_data->sms_messages[g_sms_list_counter].index == MtMessage->index) | |
1280 { | |
1281 | |
1282 // If no message text, display the address: TBD international format and phonebook | |
1283 if (MtMessage->msg_len == 0) | |
1284 { | |
1285 // If there is an associated name, it is displayed (but not stored here, we will have to retrieve it again if detailed view) | |
1286 // MZ check for assoc_name !!! 14/2/01 | |
1287 sms_text = (MtMessage->orig_addr).number; | |
1288 sms_len = strlen(sms_text); | |
1289 } | |
1290 else | |
1291 { | |
1292 | |
1293 sms_text = MtMessage->sms_msg; | |
1294 sms_len = MtMessage->msg_len; | |
1295 } | |
1296 | |
1297 //MZ 24/05/01 clear the temp sms text buffer. | |
1298 memset((char*)sms_text_ascii,'\0',UCS2_MENU_TEXT_LEN + 1); | |
1299 | |
1300 sms_copy_idx(MtMessage->index, &msg_info); | |
1301 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
1302 //Display "Report" for status report | |
1303 //GW-SPR#780-Use common procedure to display status info. | |
1304 TRACE_EVENT_P1("Status of message = %d", msg_info.stat); | |
1305 if( list_data->sms_messages[i].msg_type EQ MFW_SMS_STATRPT) | |
1306 { | |
1307 strcpy(sms_text_ascii, MmiRsrcGetText(TxtReport)); | |
1308 txt_len = strlen( sms_text_ascii); | |
1309 } | |
1310 else | |
1311 txt_len = SmsRead_GetStatusText( sms_text_ascii, msg_info.stat); | |
1312 | |
1313 /*MCSPR1242 don't trust the DCS, check for Unicode tag*/ | |
1314 if (MtMessage->sms_msg[0] == 0x80||MtMessage->dcs == MFW_DCS_UCS2 ) | |
1315 { input_type = MFW_DCS_UCS2;/*MC*/ | |
1316 input_length = MtMessage->msg_len-1;/*1498, use MT length*/ | |
1317 } | |
1318 else | |
1319 { input_type = MFW_DCS_8bits;/*MC*/ | |
1320 input_length = MtMessage->msg_len;/*1498, use MT length*/ | |
1321 } | |
1322 | |
1323 /*mc end*/ | |
1324 if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE) | |
1325 { unicode = FALSE; /*MC, SPR 1442, we'll be displaying messages as ASCII*/ | |
1326 /*SPR2175, use new function for conversion*/ | |
1327 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
1328 //Donot display sender's address for status report | |
1329 if( list_data->sms_messages[i].msg_type NEQ MFW_SMS_STATRPT) | |
1330 ATB_convert_String( MtMessage->sms_msg, input_type/*MC SPR1242*/, input_length/*SPR 1453*/, | |
1331 &sms_text_ascii[txt_len], MFW_ASCII /*MC SPR1242*/, MENU_TEXT_LENGTH-(txt_len+1)/*MC SPR1242*/, TRUE); | |
1332 } | |
1333 else //language = Chinese | |
1334 { unicode = TRUE;/*MC, SPR 1442, we'll be displaying messages as unicode*/ | |
1335 /*SPR2175, use new function for conversion*/ | |
1336 //x0pleela 07 Feb, 2006 DR: OMAPS00059261 | |
1337 //Donot display sender's address for status report | |
1338 if( list_data->sms_messages[i].msg_type NEQ MFW_SMS_STATRPT) | |
1339 ATB_convert_String( MtMessage->sms_msg, input_type /*SH*/, MtMessage->msg_len, | |
1340 &sms_text_ascii[txt_len], MFW_DCS_UCS2, UCS2_MENU_TEXT_LEN-txt_len/*MC SPR1242*/, TRUE); | |
1341 } | |
1342 list_data->sms_header[g_sms_list_counter] = (wstring_t *) ALLOC_MEMORY (UCS2_MENU_TEXT_LEN + 1/*MC SPR1242*/); | |
1343 | |
1344 //Check for allocation fail before using memory | |
1345 if(list_data->sms_header[g_sms_list_counter] != NULL) | |
1346 { /*MC, SPR 1442, use truncation function to copy message header to list*/ | |
1347 resources_truncate_to_screen_width(sms_text_ascii,0,(char*) list_data->sms_header[g_sms_list_counter], UCS2_MENU_TEXT_LEN, SCREEN_SIZE_X, unicode); | |
1348 | |
1349 } | |
1350 else | |
1351 TRACE_EVENT(" Memory allocation failed "); | |
1352 | |
1353 g_sms_list_counter--; | |
1354 | |
1355 if (g_sms_list_counter >= 0) | |
1356 { | |
1357 // There are still messages to read. | |
1358 /*SPR2260, if reading SMS fails, retry*/ | |
1359 if (sms_read(MFW_SMS_MESSAGE, (UBYTE)list_data->sms_messages[g_sms_list_counter].index) == MFW_SMS_FAIL) | |
1360 { | |
1361 retry_sms_read(SHORTToUBYTE(list_data->sms_messages[g_sms_list_counter].index)); | |
1362 } | |
1363 g_nb_line_sms++; | |
1364 } | |
1365 else | |
1366 { | |
1367 // All the messages have been retrieved --> display the list of SMS | |
1368 if (Mmi_getCurrentLanguage() != CHINESE_LANGUAGE) | |
1369 SmsRead_R_BuildList(win,0); | |
1370 else | |
1371 SmsRead_R_BuildList(win,1); | |
1372 } | |
1373 } | |
1374 else | |
1375 { /*if index is not the one expected, pass event on to SmsIdle module*/ | |
1376 return MFW_EVENT_PASSED; | |
1377 } | |
1378 | |
1379 } | |
1380 else | |
1381 #endif | |
1382 if (g_sms_state EQ READ_SELECTED_SMS) | |
1383 { | |
1384 TRACE_EVENT_P1("MtMessage len: %d", MtMessage->msg_len); | |
1385 /*SPR 2176, if this was the message we requested*/ | |
1386 if (MtMessage->index == data->sms_editor_data.sms_index) | |
1387 { | |
1388 data->sms_editor_data.sms_info = (T_MFW_SMS_PARA *)ALLOC_MEMORY (sizeof (T_MFW_SMS_PARA)); | |
1389 | |
1390 data->sms_editor_data.sms_type = MMI_SMS_MT; | |
1391 memcpy(data->sms_editor_data.sms_info, (T_MFW_SMS_PARA *)MtMessage, sizeof(T_MFW_SMS_PARA)); | |
1392 sms_copy_idx(MtMessage->index, &msg_info); | |
1393 | |
1394 | |
1395 SmsRead_R_TEXTEDT2_start(win, (MfwMnuAttr *)&(data->sms_editor_data)); | |
1396 } | |
1397 else | |
1398 { /*if index is not the one expected, pass event on to SmsIdle module*/ | |
1399 return MFW_EVENT_PASSED; | |
1400 } | |
1401 } | |
1402 break; | |
1403 case E_SMS_ERR: | |
1404 TRACE_EVENT("SMS Error"); | |
1405 if (info_win){ | |
1406 SEND_EVENT(info_win,DIALOG_DESTROY,0,0 ); | |
1407 info_win = 0; | |
1408 } | |
1409 #ifndef ORIGINAL_SMS_LIST | |
1410 /*SPR 2530 Delete and recreate SMS list window to show updates*/ | |
1411 { T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; | |
1412 | |
1413 listsDestroy(list_win); | |
1414 list_win=0; | |
1415 SmsRead_R_destroy(sms_read_win); | |
1416 SmsRead_R_start(NULL, (MfwMnuAttr*)&sms_list_type); | |
1417 } | |
1418 #endif | |
1419 break; | |
1420 /*SPR 2530 handle new message event*/ | |
1421 case E_SMS_MT_RECEIVED: | |
1422 /*if we are not currently displaying a message*/ | |
1423 // Feb 16, 2005 REF: CRR MMI-SPR-27900 xnkulkar | |
1424 // Added condition ' invalidVm == FALSE' before updating sms list | |
1425 // to ensure that no blank voice mail sms entry is shown. | |
1426 if (message_win == NULL && invalidVm == FALSE) | |
1427 /*SPR 2530 Delete and recreate SMS list window to show updates*/ | |
1428 { T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; | |
1429 | |
1430 // Dec 15,2004 REF: CRR 24396 xkundadu | |
1431 // Description: Phone crashes when a message is received while the | |
1432 // 'List Empty' dialog is displayed. | |
1433 // Solution: NULL check is added for the list_win handle before calling | |
1434 // listsDestroy() function when an MT sms is receieved. | |
1435 | |
1436 // Check whether the sms list window is already destroyed or not. | |
1437 TRACE_EVENT(" MT SMS RECEIVED "); | |
1438 if(list_win != NULL) | |
1439 { | |
1440 listsDestroy(list_win); | |
1441 list_win=0; | |
1442 } | |
1443 | |
1444 // If the 'List empty' dialog is being displayed, | |
1445 // wait for 3 seconds and continue. | |
1446 if(SmsListEmptyDlgPresent) | |
1447 { | |
1448 vsi_t_sleep (VSI_CALLER 3000); | |
1449 } | |
1450 SmsRead_R_destroy(sms_read_win); | |
1451 SmsRead_R_start(NULL, (MfwMnuAttr*)&sms_list_type); | |
1452 } | |
1453 /*pass event to next handler*/ | |
1454 return MFW_EVENT_REJECTED; | |
1455 // break; // RAVI | |
1456 /*SPR 2530 end*/ | |
1457 default: | |
1458 TRACE_EVENT(" SmsRead_R_mfw_cb case: Default"); | |
1459 return MFW_EVENT_REJECTED; | |
1460 } | |
1461 return MFW_EVENT_CONSUMED; | |
1462 } | |
1463 | |
1464 /******************************************************************************* | |
1465 | |
1466 $Function: retry_sms_read. Added for SPR2260 | |
1467 | |
1468 $Description: set up a timer to re-read sms at passed index in 100ms | |
1469 | |
1470 $Returns: none | |
1471 | |
1472 $Arguments: index of sms to be re-read | |
1473 | |
1474 *******************************************************************************/ | |
1475 void retry_sms_read(int index) | |
1476 { TRACE_EVENT("retry_sms_read()"); | |
1477 retry_handle = tim_create(NULL, 1000, (MfwCb)retry_sms_read_tim_cb); | |
1478 tim_start(retry_handle); | |
1479 retry_index = index; | |
1480 | |
1481 } | |
1482 /******************************************************************************* | |
1483 | |
1484 $Function: retry_sms_read_tim_cb. Added for SPR2260 | |
1485 | |
1486 $Description: Callback function for retry SMS read timer | |
1487 | |
1488 $Returns: status int | |
1489 | |
1490 $Arguments: event, timer data structure | |
1491 | |
1492 *******************************************************************************/ | |
1493 int retry_sms_read_tim_cb(MfwEvt event, MfwTim *timer_info) | |
1494 { TRACE_EVENT("retry_sms_read_tim_cb()"); | |
1495 if (sms_read(MFW_SMS_MESSAGE, retry_index) == MFW_SMS_FAIL) | |
1496 { tim_start(retry_handle);} | |
1497 else | |
1498 { tim_delete(retry_handle); | |
1499 retry_handle = NULL; | |
1500 } | |
1501 return MFW_EVENT_CONSUMED; | |
1502 | |
1503 } | |
1504 /******************************************************************************* | |
1505 | |
1506 $Function: SmsRead_R_smslist_cb | |
1507 | |
1508 $Description: Callback function for the dynamic list of the SMS read window. | |
1509 | |
1510 $Returns: none | |
1511 | |
1512 $Arguments: Parent - window handler | |
1513 ListData - Menu list data. | |
1514 | |
1515 *******************************************************************************/ | |
1516 | |
1517 void SmsRead_R_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData) | |
1518 { | |
1519 | |
1520 | |
1521 | |
1522 T_MFW_WIN * win_data; | |
1523 T_SMSREAD_R * data; | |
1524 | |
1525 // T_MFW_HND * l_parent; // RAVI | |
1526 // SHORT l_id; // RAVI | |
1527 | |
1528 | |
1529 TRACE_FUNCTION("SmsRead_R_smslist_cb "); | |
1530 | |
1531 win_data = getWinData(Parent); | |
1532 data = getUserData_T_SMSREAD_R(win_data); | |
1533 | |
1534 // In all the case, we need the index of the selected message | |
1535 data->sms_editor_data.sms_index = data->sms_list_data.sms_messages[ListData->ListPosition].index; | |
1536 | |
1537 if (ListData->Reason EQ LISTS_REASON_SELECT/* && ListData->KeyReason EQ KCD_LEFT*/) | |
1538 { | |
1539 TRACE_EVENT(">>> Reason:LISTS_REASON_SELECT "); | |
1540 // We want only to retrieve the selected SMS | |
1541 g_sms_state = READ_SELECTED_SMS; | |
1542 | |
1543 if (!info_win) | |
1544 info_win = mmi_dialog_information_screen_forever(Parent,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); | |
1545 | |
1546 /*NM p030 just in case not to using the '0' index for reading */ | |
1547 if (data->sms_editor_data.sms_index NEQ 0) | |
1548 { /*SPR 2530, if read fails, retry later*/ | |
1549 | |
1550 if (sms_read(MFW_SMS_MESSAGE, SHORTToUBYTE(data->sms_editor_data.sms_index ))== MFW_SMS_FAIL) | |
1551 { | |
1552 retry_sms_read(SHORTToUBYTE(data->sms_editor_data.sms_index )); | |
1553 } | |
1554 } | |
1555 } | |
1556 | |
1557 /*NM p032 check if the TEST SIM is inserted. | |
1558 During testing FTA 34.2.3 we would like to delete | |
1559 the sms from the list without changing the sms-status | |
1560 from unread to read | |
1561 */ | |
1562 if (test_sim EQ TRUE) | |
1563 { | |
1564 | |
1565 if (ListData->Reason EQ LISTS_REASON_HANGUP) | |
1566 { | |
1567 TRACE_EVENT(">>> Reason: LISTS_REASON_HANGUP "); | |
1568 listsDestroy(ListData->win); | |
1569 list_win=0; | |
1570 SmsRead_R_destroy(data->win); | |
1571 } | |
1572 /* | |
1573 the right-soft-key deletes | |
1574 the selected sms in the list-menu without changing | |
1575 the read-status of the sms. | |
1576 | |
1577 go-back key is now on the "Hang_up" | |
1578 */ | |
1579 if ((ListData->Reason EQ LISTS_REASON_BACK ) | |
1580 || (ListData->Reason EQ LISTS_REASON_CLEAR )) | |
1581 { | |
1582 T_DISPLAY_DATA DisplayInfo; | |
1583 | |
1584 TRACE_EVENT(">>> Reason: LISTS_REASON_BACK/CLEAR "); | |
1585 | |
1586 /* show for a short period "Message deleted" and go | |
1587 back to the previous menu-screen | |
1588 */ | |
1589 if((sms_msg_delete((UBYTE)data->sms_editor_data.sms_index) EQ MFW_SMS_OK) | |
1590 && (data->sms_editor_data.sms_index NEQ 0)) | |
1591 { | |
1592 | |
1593 DisplayInfo.TextString = '\0'; | |
1594 DisplayInfo.TextString2 = '\0'; | |
1595 DisplayInfo.LeftSoftKey = 0; | |
1596 DisplayInfo.RightSoftKey = 0; | |
1597 DisplayInfo.Time = THREE_SECS; | |
1598 DisplayInfo.KeyEvents = KEY_CLEAR|KEY_LEFT|KEY_RIGHT;; | |
1599 DisplayInfo.TextId = TxtMessage; | |
1600 DisplayInfo.TextId2 = TxtDeleted; | |
1601 DisplayInfo.Identifier = NULL; | |
1602 DisplayInfo.Callback = NULL; | |
1603 | |
1604 info_dialog(data->win, &DisplayInfo); | |
1605 | |
1606 } | |
1607 | |
1608 /* destroy the read-sms-menu and go back to | |
1609 the previous screen | |
1610 */ | |
1611 listsDestroy(ListData->win); | |
1612 list_win=0; | |
1613 SmsRead_R_destroy(data->win); | |
1614 | |
1615 } | |
1616 | |
1617 } | |
1618 else | |
1619 { | |
1620 if ((ListData->Reason EQ LISTS_REASON_BACK /*&& ListData->KeyReason EQ KCD_RIGHT*/) | |
1621 || (ListData->Reason EQ LISTS_REASON_CLEAR /*&& ListData->KeyReason EQ KCD_HUP */) | |
1622 || (ListData->Reason EQ LISTS_REASON_HANGUP)) // sbh - added hangup key | |
1623 { | |
1624 TRACE_EVENT(">>> Reason: LISTS_REASON_BACK/CLEAR "); | |
1625 listsDestroy(ListData->win); | |
1626 list_win=0; | |
1627 SmsRead_R_destroy(data->win); | |
1628 } | |
1629 | |
1630 | |
1631 } | |
1632 /*NM p032 end*/ | |
1633 | |
1634 } | |
1635 | |
1636 /******************************************************************************* | |
1637 | |
1638 $Function: SmsRead_R_dialog_cb | |
1639 | |
1640 $Description: Dialog callback function of the SMS read window (dynamic list of all the SMS) | |
1641 Case where SMS has not been initialized yet | |
1642 | |
1643 $Returns: status | |
1644 | |
1645 $Arguments: win - current window handler | |
1646 Identifier - window id | |
1647 Reason - Event cause. | |
1648 | |
1649 *******************************************************************************/ | |
1650 | |
1651 int SmsRead_R_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) | |
1652 { | |
1653 T_MFW_WIN * win_data; | |
1654 T_SMSREAD_R * data; | |
1655 T_MFW_HND *lparent; | |
1656 | |
1657 win_data = getWinData(win); | |
1658 data = getUserData_T_SMSREAD_R(win_data); | |
1659 lparent = data->parent; | |
1660 | |
1661 TRACE_FUNCTION ("SmsRead_dialog_cb()"); | |
1662 | |
1663 switch (Reason) | |
1664 { | |
1665 case INFO_TIMEOUT: | |
1666 case INFO_KCD_HUP: | |
1667 // Commit suicide | |
1668 SmsRead_R_destroy(win); | |
1669 // Send E_RETURN event to parent window | |
1670 SEND_EVENT(lparent, E_RETURN, data->id, NULL); | |
1671 | |
1672 // Dec 15,2004 REF: CRR 24396 xkundadu | |
1673 // Description: Phone crashes when a message is received while the | |
1674 // 'List Empty' dialog is displayed. | |
1675 | |
1676 // set the variable to FALSE, since 'List empty' dialog has been destroyed . | |
1677 SmsListEmptyDlgPresent = FALSE; | |
1678 return MFW_EVENT_CONSUMED; | |
1679 | |
1680 default: | |
1681 return MFW_EVENT_REJECTED; | |
1682 } | |
1683 } | |
1684 | |
1685 /******************************************************************************* | |
1686 | |
1687 $Function: SmsRead_R_BuildList | |
1688 | |
1689 $Description: Build the list of SMS for the dynamic list. | |
1690 | |
1691 $Returns: status | |
1692 | |
1693 $Arguments: win - current window handler | |
1694 | |
1695 *******************************************************************************/ | |
1696 | |
1697 void SmsRead_R_BuildList(T_MFW_HND win, int inUnicode) | |
1698 { | |
1699 | |
1700 T_MFW_WIN * win_data; | |
1701 T_SMSREAD_R * data; | |
1702 | |
1703 /* List is complete so present menu. */ | |
1704 USHORT i; | |
1705 | |
1706 TRACE_FUNCTION("SmsRead_R_BuildList"); | |
1707 | |
1708 win_data = getWinData(win); | |
1709 data = getUserData_T_SMSREAD_R(win_data); | |
1710 | |
1711 data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); | |
1712 | |
1713 if(data->menu_list_data == 0) | |
1714 { | |
1715 TRACE_EVENT("Failed memory alloc 1 "); | |
1716 return; | |
1717 } | |
1718 /*SPR 2686, only allocate memory for the number of messages displayed*/ | |
1719 data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( ((data->sms_list_data).nb_sms_stored) * sizeof(T_MFW_MNU_ITEM) );//JVJE | |
1720 | |
1721 if(data->menu_list_data->List == 0) | |
1722 { | |
1723 TRACE_EVENT("Failed memory alloc 2"); | |
1724 return; | |
1725 } | |
1726 | |
1727 | |
1728 for (i = 0; i < ((data->sms_list_data).nb_sms_stored); i++) | |
1729 { | |
1730 mnuInitDataItem(&data->menu_list_data->List[i]); | |
1731 data->menu_list_data->List[i].str = (char *)(data->sms_list_data).sms_header[i]; | |
1732 data->menu_list_data->List[i].flagFunc = item_flag_none; | |
1733 } | |
1734 | |
1735 data->menu_list_data->ListLength =(data->sms_list_data).nb_sms_stored; | |
1736 data->menu_list_data->ListPosition = 1; | |
1737 data->menu_list_data->CursorPosition = 1; | |
1738 data->menu_list_data->SnapshotSize =(data->sms_list_data).nb_sms_stored; | |
1739 data->menu_list_data->Font = 0; | |
1740 data->menu_list_data->LeftSoftKey = TxtSoftSelect; | |
1741 /*NM p032*/ | |
1742 if(test_sim EQ TRUE) | |
1743 data->menu_list_data->RightSoftKey = TxtDelete; | |
1744 else | |
1745 data->menu_list_data->RightSoftKey = TxtSoftBack; | |
1746 | |
1747 data->menu_list_data->KeyEvents = KEY_ALL; | |
1748 data->menu_list_data->Reason = 0; | |
1749 data->menu_list_data->Strings = TRUE; | |
1750 data->menu_list_data->Attr = (MfwMnuAttr*)&readSMS_menuAttrib; | |
1751 data->menu_list_data->autoDestroy = FALSE; | |
1752 | |
1753 /* Create the dynamic menu window */ | |
1754 listDisplayListMenu(win, data->menu_list_data, (ListCbFunc_t)SmsRead_R_smslist_cb,inUnicode); | |
1755 list_win = data->menu_list_data->win; | |
1756 if (info_win){ | |
1757 SEND_EVENT(info_win,DIALOG_DESTROY,0,0 ); | |
1758 info_win = 0; | |
1759 } | |
1760 } | |
1761 | |
1762 | |
1763 | |
1764 /******************************************************************************* | |
1765 | |
1766 $Function: SmsRead_R_OPTExeDelete | |
1767 | |
1768 $Description: Called when the user press Delete in the Option menu | |
1769 | |
1770 $Returns: event status. | |
1771 | |
1772 $Arguments: m - pointer to menu. | |
1773 i - index if selected menu item. | |
1774 *******************************************************************************/ | |
1775 | |
1776 static int SmsRead_R_OPTExeDelete(MfwMnu* m, MfwMnuItem* item) | |
1777 { | |
1778 T_MFW_HND win = mfwParent(mfw_header()); | |
1779 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
1780 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
1781 | |
1782 /* access to data from parent */ | |
1783 T_MFW_HDR * parent = data->parent; | |
1784 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
1785 | |
1786 T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; | |
1787 // May 27, 2005 MMI-FIX-29869 x0018858 | |
1788 #ifdef FF_MMI_SMS_DYNAMIC | |
1789 // Changed from static to dynamic | |
1790 T_MFW_SMS_IDX* temp_message_list;/*SPR2530*/ | |
1791 #else | |
1792 T_MFW_SMS_IDX temp_message_list[MAX_MESSAGES];/*SPR2530*/ | |
1793 #endif | |
1794 int no_of_messages, i;/*SPR2530*/ | |
1795 BOOL message_currently_in_list = FALSE;/*SPR2530*/ | |
1796 UBYTE deleting_index = parent_data->sms_editor_data->sms_index;/*SPR2686*/ | |
1797 #ifdef FF_MMI_SMS_DYNAMIC | |
1798 temp_message_list = (T_MFW_SMS_IDX*)ALLOC_MEMORY(g_max_messages*sizeof(T_MFW_SMS_IDX)); | |
1799 #endif | |
1800 TRACE_FUNCTION("SmsRead_R_OPTExeDelete"); | |
1801 #ifdef MMI_LITE | |
1802 /*SPR 2686 destroy option window to reduce memory usage*/ | |
1803 if (mfwCheckMemoryLeft() < 400) | |
1804 SmsRead_R_OPT_destroy(option_mnu_win); | |
1805 #endif | |
1806 /*SPR2530, check if message index in current list of messages*/ | |
1807 #ifdef FF_MMI_SMS_DYNAMIC | |
1808 no_of_messages = sms_index_list(MFW_SMS_ALL, temp_message_list, g_max_messages); | |
1809 #else | |
1810 no_of_messages = sms_index_list(MFW_SMS_ALL, temp_message_list, MAX_MESSAGES); | |
1811 #endif | |
1812 for (i= 0; i< no_of_messages;i++) | |
1813 { | |
1814 if (temp_message_list[i].index == deleting_index) | |
1815 message_currently_in_list = TRUE; | |
1816 } | |
1817 | |
1818 if (message_currently_in_list == TRUE) | |
1819 { | |
1820 | |
1821 if(sms_msg_delete((UBYTE)deleting_index/*SPR 2686*/)== MFW_SMS_OK) | |
1822 { | |
1823 /* set the status that the user selected the delete item */ | |
1824 if(deleting_win == 0) | |
1825 deleting_win= mmi_dialog_information_screen_forever(0,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); | |
1826 | |
1827 { | |
1828 // Destroy the text editor and free memory. | |
1829 SmsRead_R_TEXTEDT2_destroy(parent_data->win); | |
1830 /*SPR 2686, only destroy option menu window if it hasn't already been destroyed*/ | |
1831 if (option_mnu_win) | |
1832 SmsRead_R_OPT_destroy(option_mnu_win); | |
1833 | |
1834 } | |
1835 | |
1836 } | |
1837 else | |
1838 { | |
1839 | |
1840 /*SPR2530, don't delete option and display windows, just show failure*/ | |
1841 mmi_dialog_information_screen(0,TxtFailed, NULL, NULL, COLOUR_STATUS_WAIT); | |
1842 } | |
1843 } | |
1844 else | |
1845 { | |
1846 /*SPR2530, don't delete option and display windows, just show failure*/ | |
1847 mmi_dialog_information_screen(0,TxtFailed, NULL, NULL, COLOUR_STATUS_WAIT); | |
1848 } | |
1849 | |
1850 // May 27, 2005 MMI-FIX-29869 x0018858 | |
1851 #ifdef FF_MMI_SMS_DYNAMIC | |
1852 // Free the allocated memory | |
1853 FREE_MEMORY((U8*)temp_message_list, g_max_messages*sizeof(T_MFW_SMS_IDX)); | |
1854 #endif | |
1855 return 1; // ADDED BY RAVI - 28-11-2005 | |
1856 } | |
1857 | |
1858 /******************************************************************************* | |
1859 | |
1860 $Function: SmsRead_R_OPTExeReply | |
1861 | |
1862 $Description: Called when the user press Reply in the Option menu | |
1863 | |
1864 $Returns: event status. | |
1865 | |
1866 $Arguments: m - pointer to menu. | |
1867 i - index if selected menu item. | |
1868 *******************************************************************************/ | |
1869 | |
1870 static int SmsRead_R_OPTExeReply(MfwMnu* m, MfwMnuItem* i) | |
1871 { | |
1872 | |
1873 T_MFW_HND win = mfwParent(mfw_header()); | |
1874 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
1875 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
1876 | |
1877 T_MFW_HDR * parent = data->parent; | |
1878 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
1879 | |
1880 T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; | |
1881 // March 2, 2005 REF: CRR 11536 x0018858 | |
1882 // T_MFW_SMS_INFO sms_parameter;//Added for retreiving the Reply path. // RAVI | |
1883 | |
1884 | |
1885 TRACE_FUNCTION("SmsRead_R_OPTExeReply"); | |
1886 | |
1887 /* Copy the number and name information to the SMS buffer | |
1888 */ | |
1889 /*MC SPR 1257, clear whole buffer in case of Unicode entry*/ | |
1890 memset(SmsData.TextBuffer, '\0', MAX_MSG_LEN_ARRAY); | |
1891 //Copy the calling number for pasting into the number buffer; | |
1892 /* Marcus: Issue 1804: 12/03/2003: Start */ | |
1893 if(parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.ton == MFW_TON_INTERNATIONAL) | |
1894 { | |
1895 if(parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number[0] == '+') | |
1896 { | |
1897 strcpy((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
1898 } | |
1899 else | |
1900 { | |
1901 strcpy((char *)SmsData.NumberBuffer,"+"); | |
1902 strncat((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number,sizeof(SmsData.NumberBuffer)-2); | |
1903 } | |
1904 } | |
1905 else | |
1906 strcpy((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
1907 /* Marcus: Issue 1804: 12/03/2003: End */ | |
1908 | |
1909 // March 2, 2005 REF: CRR 11536 x0018858 | |
1910 // Retreive and check the reply bit from the structure. | |
1911 // see if we should use our own service centre number | |
1912 if ( reply_path_bit && parent_data->sms_editor_data->sms_info->sms_mt.rp && | |
1913 strlen(parent_data->sms_editor_data->sms_info->sms_mt.sc_addr) != 0 ) | |
1914 { | |
1915 TRACE_EVENT_P1("The receivers SCA is %s",parent_data->sms_editor_data->sms_info->sms_mt.sc_addr); | |
1916 SmsData.called_from_reply_item = TRUE; | |
1917 /* copy the service center number as well */ | |
1918 strcpy((char *)SmsData.CentreBuffer, (char *)parent_data->sms_editor_data->sms_info->sms_mt.sc_addr); | |
1919 } | |
1920 else | |
1921 { | |
1922 TRACE_EVENT_P1("The senders SCA is %s",SmsData.NumberBuffer); | |
1923 /* use the own Service Center Number if the caller doesnt send one*/ | |
1924 SmsData.called_from_reply_item = FALSE; | |
1925 } | |
1926 | |
1927 /* p304 SH save window pointer */ | |
1928 win = parent_data->win; | |
1929 // Destroy the text editor, free memory | |
1930 SmsRead_R_TEXTEDT2_destroy(parent_data->win); | |
1931 /* Destroy the Options Menu and text editor.before starting the Send Editor.*/ | |
1932 SmsRead_R_OPT_destroy(data->win); | |
1933 | |
1934 /*SPR 2686 destroy the SMS read window to free memory*/ | |
1935 /*destroy the built list window*/ | |
1936 listsDestroy(list_win); | |
1937 list_win=0; | |
1938 /*destroy the main control window*/ | |
1939 if (sms_read_win)/*SPR 2132, check window exists before destroying it*/ | |
1940 { | |
1941 SmsRead_R_destroy(sms_read_win); | |
1942 sms_read_win = NULL; | |
1943 } | |
1944 /* NM, FTA 34.2.8 */ | |
1945 | |
1946 /* p304 SH - call this after destroying editor & windows. parent_data is lost, | |
1947 so use pointer saved from above */ | |
1948 SmsSend_SEND_start(win, (void *) &SmsData); | |
1949 | |
1950 | |
1951 | |
1952 | |
1953 return 1; | |
1954 } | |
1955 | |
1956 /******************************************************************************* | |
1957 | |
1958 $Function: SmsRead_R_OPTExeStoreNumber | |
1959 | |
1960 $Description: Called when the user press Store Number in the Option menu | |
1961 | |
1962 $Returns: event status. | |
1963 | |
1964 $Arguments: m - pointer to menu. | |
1965 i - index if selected menu item. | |
1966 *******************************************************************************/ | |
1967 | |
1968 static int SmsRead_R_OPTExeStoreNumber(MfwMnu* m, MfwMnuItem* i) | |
1969 { | |
1970 T_MFW_HND win = mfwParent(mfw_header()); | |
1971 T_MFW_HND win2; //Mar 27, 2006 DR:OMAPS00047813 x0035544 | |
1972 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
1973 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
1974 | |
1975 T_MFW_HDR * parent = data->parent; | |
1976 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
1977 T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; | |
1978 T_MFW_PHB_ENTRY pb_data; | |
1979 // UBYTE found_name; /*SPR888 -SH*/ // RAVI | |
1980 //Mar 27, 2006 DR:OMAPS00047813 x0035544 | |
1981 CHAR number[MFW_NUM_LEN]; | |
1982 T_MFW_PHB_TON ton; | |
1983 | |
1984 TRACE_FUNCTION("SmsRead_R_OPTExeStoreNumber"); | |
1985 | |
1986 /* Copy the number and name information to the SMS buffer | |
1987 */ | |
1988 //Mar 27, 2006 DR:OMAPS00047813 x0035544 | |
1989 ton = parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.ton; | |
1990 strcpy(number, parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
1991 | |
1992 /*SPR 2686 destroy windows before attempting to extract numbers.*/ | |
1993 // Destroy the text editor, rel memory. | |
1994 SmsRead_R_TEXTEDT2_destroy(parent_data->win); | |
1995 /* Destroy the Options Menu and text editor. */ | |
1996 SmsRead_R_OPT_destroy(data->win); | |
1997 | |
1998 //Mar 27, 2006 DR:OMAPS00047813 x0035544 | |
1999 if(ton == MFW_TON_INTERNATIONAL && | |
2000 number[0]!='+' && strlen((char *)number)>0 ) | |
2001 /* SPR888 - SH - do not add + if already there */ | |
2002 { | |
2003 strcpy((char *)SmsData.NumberBuffer,"+"); | |
2004 strcat((char *)SmsData.NumberBuffer,(char *)number); | |
2005 } | |
2006 else | |
2007 { | |
2008 strcpy((char *)SmsData.NumberBuffer,(char *)number); | |
2009 } | |
2010 | |
2011 if (read_status EQ MMI_SMS_MT) | |
2012 { | |
2013 /* MT -SMS has the additional information (Date, Time & Number) | |
2014 we dont want to show these when we are editing */ | |
2015 memcpy(SmsData.TextBuffer,&sms_text_ascii[current_sms_len],MAX_MSG_LEN_ARRAY); | |
2016 } | |
2017 else | |
2018 { | |
2019 //when we were reading the saved-SMS with the length of MAX_MSG_LEN | |
2020 memcpy(SmsData.TextBuffer,sms_text_ascii,MAX_MSG_LEN_ARRAY);/* assumption: sms_text_ascii is still filled from reading the SMS*/ | |
2021 } | |
2022 | |
2023 /* SPR888 - SH - Start looking for numbers from beginning of SMS text */ | |
2024 #if 0 //Mar 24, 2006 DR:OMAPS00047813 x0035544 | |
2025 search_index = 0; | |
2026 if (strlen((char *)SmsData.NumberBuffer)==0) | |
2027 { | |
2028 Search_forNextNumber(&SmsData); | |
2029 } | |
2030 | |
2031 if (strlen((char *)SmsData.NumberBuffer)==0) | |
2032 { | |
2033 mmi_dialog_information_screen(0, TxtNotAvailable, NULL, NULL, NULL); | |
2034 } | |
2035 else | |
2036 { | |
2037 //Search the phonebook for the sender number entry and display the tag and number. | |
2038 if (bookFindNameInPhonebook((const char*)&SmsData.NumberBuffer[0], &pb_data) !=0) | |
2039 { | |
2040 #ifdef NO_ASCIIZ | |
2041 //Display the tag and number dialog. | |
2042 /* SPR888 - SH - parent_data->parent changed to parent_data->win */ | |
2043 smsRead_NumberName_info_screen(0,(void *)&SmsData, (char*)pb_data.name.data); | |
2044 #else | |
2045 //Display the tag and number dialog. | |
2046 /* SPR888 - SH - parent_data->parent changed to parent_data->win */ | |
2047 smsRead_NumberName_info_screen(0,(void *)&SmsData, (char*)pb_data.name); | |
2048 #endif | |
2049 | |
2050 } | |
2051 else | |
2052 { | |
2053 /* SPR888 - SH - parent_data->parent changed to parent_data->win */ | |
2054 smsRead_NumberName_info_screen(0,(void *)&SmsData,NULL); | |
2055 } | |
2056 } | |
2057 #endif //Mar 24, 2006 DR:OMAPS00047813 x0035544 | |
2058 | |
2059 //Mar 24, 2006 DR:OMAPS00047813 x0035544 | |
2060 Search_forNumberInSMS(&SmsData); | |
2061 win2 = SmsRead_BuildNumList_Menu( win); | |
2062 if (win2 NEQ NULL) | |
2063 { | |
2064 SEND_EVENT (win2, E_INIT, 0, 0); | |
2065 } | |
2066 | |
2067 | |
2068 return 1; | |
2069 } | |
2070 | |
2071 /******************************************************************************* | |
2072 | |
2073 $Function: SmsRead_R_OPTExeEdit | |
2074 | |
2075 $Description: Called when the user press Forward in the Option menu | |
2076 | |
2077 $Returns: event status. | |
2078 | |
2079 $Arguments: m - pointer to menu. | |
2080 i - index if selected menu item. | |
2081 *******************************************************************************/ | |
2082 | |
2083 static int SmsRead_R_OPTExeEdit(MfwMnu* m, MfwMnuItem* i) | |
2084 { | |
2085 T_MFW_HND win = mfwParent(mfw_header()); | |
2086 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
2087 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
2088 | |
2089 T_MFW_HDR * parent = data->parent; | |
2090 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
2091 T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; | |
2092 T_DISPLAY_DATA Dialog; | |
2093 | |
2094 TRACE_FUNCTION("SmsRead_R_OPTExeEdit"); | |
2095 if (FFS_flashData.ConcatenateStatus == TRUE ) | |
2096 { | |
2097 /* Copy the number and name information to the SMS buffer | |
2098 */ | |
2099 SmsData.NumberBuffer[0] = '\0'; | |
2100 if (read_status EQ MMI_SMS_MT) | |
2101 { | |
2102 /* MT -SMS has the additional information (Date, Time & Number) | |
2103 we dont want to show these when we are editing */ | |
2104 | |
2105 // Dec 01, 2004 REF: CRR 24225 xnkulkar | |
2106 // Description: Reset when forwarding SMS | |
2107 // Solution: The message content is sent excluding the date/time info from the | |
2108 // original message, which was causing the reset as the max limit was crossed. | |
2109 memcpy(SmsData.TextBuffer,&sms_text_ascii[current_sms_len + ORIGINAL_DATE_TIME_INFO],MAX_MSG_LEN_ARRAY); | |
2110 } | |
2111 else | |
2112 { | |
2113 //when we were reading the saved-SMS with the length of MAX_MSG_LEN | |
2114 memcpy(SmsData.TextBuffer,sms_text_ascii,MAX_MSG_LEN_ARRAY);/* assumption: sms_text_ascii is still filled from reading the SMS*/ | |
2115 } | |
2116 SmsData.called_from_reply_item = FALSE; | |
2117 | |
2118 /* p304 SH save window pointer */ | |
2119 win = parent_data->win; | |
2120 // Destroy the text editor, free memory | |
2121 SmsRead_R_TEXTEDT2_destroy(parent_data->win); | |
2122 /* Destroy the Options Menu and text editor.before starting the Send Editor.*/ | |
2123 SmsRead_R_OPT_destroy(data->win); | |
2124 /*SPR 1991 destroy the SMS read window to free memory*/ | |
2125 /*destroy the built list window*/ | |
2126 listsDestroy(list_win); | |
2127 list_win=0; | |
2128 /*destroy the main control window*/ | |
2129 if (sms_read_win)/*SPR 2132, check window exists before destroying it*/ | |
2130 { | |
2131 SmsRead_R_destroy(sms_read_win); | |
2132 sms_read_win = NULL; | |
2133 } | |
2134 | |
2135 /*SPR 1991 end*/ | |
2136 /* NM, FTA 34.2.8 */ | |
2137 | |
2138 /* p304 SH - call this after destroying editor & windows. parent_data is lost, | |
2139 so use pointer saved from above */ | |
2140 SmsSend_SEND_start(win, (void *) &SmsData); | |
2141 } | |
2142 /* API - 28-01-03 - 1628 - Allow the editing of a single SMS if ConcatenateStatus is FALSE */ | |
2143 /* API - 19-03-03 - 1825 - Allow the editing of a single saved SMS if ConcatenateStatus is FLASE*/ | |
2144 | |
2145 // Feb 16, 2005 REF: CRR 28966 x0012851 | |
2146 // Description: Editing or forwarding of large MT messages (>160 characters) | |
2147 // shouldn't be allowed when Concatenation is set to 'OFF' | |
2148 // Solution: If the 'ConcatenateStatus' flag is FALSE, the 'if' check condition | |
2149 // which allows the message to be edited or forwarded has been | |
2150 // modified for the same. | |
2151 else if (FALSE==FFS_flashData.ConcatenateStatus) | |
2152 { | |
2153 if (((read_status EQ MMI_SMS_MT) && (parent_data->sms_editor_data->sms_info->sms_mt.msg_len <= BASIC_MAX_MSG_LEN)) | |
2154 ||((read_status EQ MMI_SMS_MO) && (parent_data->sms_editor_data->sms_info->sms_mo.msg_len <= BASIC_MAX_MSG_LEN))) | |
2155 { | |
2156 TRACE_EVENT_P1("msg_len in edit is = %d", parent_data->sms_editor_data->sms_info->sms_mt.msg_len); | |
2157 /* Copy the number and name information to the SMS buffer | |
2158 */ | |
2159 SmsData.NumberBuffer[0] = '\0'; | |
2160 if (read_status EQ MMI_SMS_MT) | |
2161 { | |
2162 /* MT -SMS has the additional information (Date, Time & Number) | |
2163 we dont want to show these when we are editing */ | |
2164 // Dec 01, 2004 REF: CRR 24225 xnkulkar | |
2165 // Description: Reset when forwarding SMS | |
2166 // Solution: The message content is sent excluding the date/time info from the | |
2167 // original message, which was causing the reset as the max limit was crossed. | |
2168 memcpy(SmsData.TextBuffer,&sms_text_ascii[current_sms_len + ORIGINAL_DATE_TIME_INFO],MAX_MSG_LEN_SGL); | |
2169 } | |
2170 else | |
2171 { | |
2172 //when we were reading the saved-SMS with the length of MAX_MSG_LEN | |
2173 memcpy(SmsData.TextBuffer,sms_text_ascii,MAX_MSG_LEN_SGL);/* assumption: sms_text_ascii is still filled from reading the SMS*/ | |
2174 } | |
2175 SmsData.called_from_reply_item = FALSE; | |
2176 | |
2177 win = parent_data->win; | |
2178 // Destroy the text editor, free memory | |
2179 SmsRead_R_TEXTEDT2_destroy(parent_data->win); | |
2180 /* Destroy the Options Menu and text editor.before starting the Send Editor.*/ | |
2181 SmsRead_R_OPT_destroy(data->win); | |
2182 /*SPR 1991 destroy the SMS read window to free memory*/ | |
2183 /*destroy the built list window*/ | |
2184 listsDestroy(list_win); | |
2185 list_win=0; | |
2186 /*destroy the main control window*/ | |
2187 if (sms_read_win)/*SPR 2132, check window exists before destroying it*/ | |
2188 { | |
2189 SmsRead_R_destroy(sms_read_win); | |
2190 sms_read_win = NULL; | |
2191 } | |
2192 /*SPR 1991 end*/ | |
2193 SmsSend_SEND_start(win, (void *) &SmsData); | |
2194 } | |
2195 /* API - 28-01-03 - 1628 - END */ | |
2196 else | |
2197 { | |
2198 /* Initialise the dialog control block with default information | |
2199 */ | |
2200 dlg_initDisplayData_TextId( &Dialog, TxtNull, TxtNull, TxtNotAllowed, TxtNull , COLOUR_STATUS_WAIT); | |
2201 dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)NULL, 3000, KEY_CLEAR ); | |
2202 | |
2203 /* Show the dialog | |
2204 */ | |
2205 info_dialog( win, &Dialog ); | |
2206 | |
2207 } | |
2208 } | |
2209 return 1; | |
2210 } | |
2211 | |
2212 /******************************************************************************* | |
2213 | |
2214 $Function: SmsRead_R_READSMS_OPT_start | |
2215 | |
2216 $Description: Start the creation of the Option Window from the Read SMS | |
2217 Text window. | |
2218 | |
2219 $Returns: mfw window handler | |
2220 | |
2221 $Arguments: parent_window- pointer to menu. | |
2222 menuAttr - menu attributes. | |
2223 *******************************************************************************/ | |
2224 | |
2225 T_MFW_HND SmsRead_R_READSMS_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) | |
2226 { | |
2227 /*SPR 2132, setting global var to keep track of options window*/ | |
2228 | |
2229 TRACE_FUNCTION ("SmsRead_R_OPT_start()"); | |
2230 | |
2231 option_mnu_win = SmsRead_R_OPT_create (parent_window); | |
2232 | |
2233 if (option_mnu_win NEQ NULL) | |
2234 { | |
2235 SEND_EVENT (option_mnu_win , E_INIT, SmsRead_R_READSMS_OPT_ID, (void *)menuAttr); | |
2236 } | |
2237 return option_mnu_win; | |
2238 } | |
2239 | |
2240 /*SPR 2132, removed obsolete function*/ | |
2241 /******************************************************************************* | |
2242 | |
2243 $Function: SmsRead_R_OPT_create | |
2244 | |
2245 $Description: Create the Options window | |
2246 | |
2247 $Returns: window handler | |
2248 | |
2249 $Arguments: parent_window- pointer to parent window | |
2250 *******************************************************************************/ | |
2251 | |
2252 static T_MFW_HND SmsRead_R_OPT_create(MfwHnd parent_window) | |
2253 { | |
2254 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)ALLOC_MEMORY (sizeof (T_SMSREAD_R_OPT)); | |
2255 T_MFW_WIN * win; | |
2256 | |
2257 TRACE_FUNCTION ("SmsRead_R_OPT_create()"); | |
2258 | |
2259 /* | |
2260 * Create window handler | |
2261 */ | |
2262 | |
2263 data->win = | |
2264 win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)SmsRead_R_OPT_win_cb); | |
2265 if (data->win EQ NULL) | |
2266 { | |
2267 return NULL; | |
2268 } | |
2269 /* | |
2270 * connect the dialog data to the MFW-window | |
2271 */ | |
2272 | |
2273 data->mmi_control.dialog = (T_DIALOG_FUNC)SmsRead_R_OPT_exec_cb; | |
2274 data->mmi_control.data = data; | |
2275 win = ((T_MFW_HDR *)data->win)->data; | |
2276 win->user = (void *)data; | |
2277 data->parent = parent_window; | |
2278 | |
2279 /* | |
2280 * return window handle | |
2281 */ | |
2282 | |
2283 return data->win; | |
2284 } | |
2285 | |
2286 /******************************************************************************* | |
2287 | |
2288 $Function: SmsRead_R_OPT_destroy | |
2289 | |
2290 $Description: Destroy the Option window | |
2291 | |
2292 $Returns: none | |
2293 | |
2294 $Arguments: own_window- current window | |
2295 *******************************************************************************/ | |
2296 | |
2297 static void SmsRead_R_OPT_destroy(MfwHnd own_window) | |
2298 { | |
2299 T_MFW_WIN * win_data; | |
2300 T_SMSREAD_R_OPT * data; | |
2301 | |
2302 TRACE_FUNCTION ("SmsRead_R_OPT_destroy()"); | |
2303 | |
2304 if (own_window) | |
2305 { | |
2306 win_data = ((T_MFW_HDR *)own_window)->data; | |
2307 data = (T_SMSREAD_R_OPT *)win_data->user; | |
2308 | |
2309 if (data) | |
2310 { | |
2311 /* | |
2312 * Delete WIN handler | |
2313 */ | |
2314 win_delete (data->win); | |
2315 | |
2316 /* | |
2317 * Free Memory | |
2318 */ | |
2319 FREE_MEMORY ((void *)data, sizeof (T_SMSREAD_R_OPT)); | |
2320 option_mnu_win =0;/*SPR2132, make sure window pointer is reset*/ | |
2321 } | |
2322 else | |
2323 { | |
2324 TRACE_EVENT ("SmsRead_R_OPT_destroy() called twice"); | |
2325 } | |
2326 } | |
2327 } | |
2328 | |
2329 /******************************************************************************* | |
2330 | |
2331 $Function: SmsRead_R_OPT_exec_cb | |
2332 | |
2333 $Description: Exec callback function for the Option window | |
2334 | |
2335 $Returns: none | |
2336 | |
2337 $Arguments: win- current window | |
2338 event - window event Id | |
2339 value - unique Id | |
2340 parameter- optional data. | |
2341 *******************************************************************************/ | |
2342 | |
2343 void SmsRead_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
2344 /* callback handler for events sent to to trigger execution */ | |
2345 { | |
2346 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
2347 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
2348 T_MFW_HND * l_parent = NULL; // RAVI | |
2349 SHORT l_id = 0; // RAVI | |
2350 | |
2351 T_MFW_EVENT MfwEvents; | |
2352 | |
2353 TRACE_FUNCTION ("SmsRead_R_OPT_exec_cb()"); | |
2354 | |
2355 | |
2356 switch (event) | |
2357 { | |
2358 case E_INIT: | |
2359 TRACE_EVENT(">> SmsRead_R_OPT_exec_cb(), E_INIT "); | |
2360 /* initialization of administrative data */ | |
2361 data->id = value; | |
2362 | |
2363 if(value == SmsRead_R_READSMS_OPT_ID) | |
2364 { | |
2365 data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)SmsRead_R_OPT_kbd_cb); | |
2366 data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)SmsRead_R_OPT_kbd_cb); | |
2367 //Sep 08, 2004 REF: CRR 24393 Deepa M. D | |
2368 //If the message is a saved/unsent message, then provide a different menu with the Reply option removed. | |
2369 if(read_status EQ MMI_SMS_MO) | |
2370 { | |
2371 data->menu = mnuCreate(data->win,(MfwMnuAttr *)&SmsRead_R_Unsent_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsRead_R_OPT_mnu_cb); | |
2372 } | |
2373 else | |
2374 { | |
2375 data->menu = mnuCreate(data->win,(MfwMnuAttr *)&SmsRead_R_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsRead_R_OPT_mnu_cb); | |
2376 } | |
2377 mnuLang(data->menu,mainMmiLng); | |
2378 | |
2379 /* put the (new) dialog window on top of the window stack */ | |
2380 mnuUnhide(data->menu); | |
2381 winShow(win); | |
2382 break; | |
2383 } | |
2384 else | |
2385 { | |
2386 // Catch the events concerning delete | |
2387 MfwEvents = E_SMS_ERR | E_SMS_OK; | |
2388 | |
2389 data->sms = sms_create(data->win,MfwEvents,(MfwCb)SmsRead_R_OPT_mfw_cb); | |
2390 data->sms_editor_data = (T_SMS_EDITOR_DATA *)parameter; | |
2391 } | |
2392 case E_RETURN: | |
2393 /* create the dialog handler */ | |
2394 data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)SmsRead_R_OPT_kbd_cb); | |
2395 data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)SmsRead_R_OPT_kbd_cb); | |
2396 //Sep 08, 2004 REF: CRR 24393 Deepa M. D | |
2397 //If the message is a saved/unsent message, then provide a different menu with the Reply option removed. | |
2398 if(read_status EQ MMI_SMS_MO) | |
2399 { | |
2400 data->menu = mnuCreate(data->win,(MfwMnuAttr *)&SmsRead_R_Unsent_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsRead_R_OPT_mnu_cb); | |
2401 } | |
2402 else | |
2403 { | |
2404 data->menu = mnuCreate(data->win,(MfwMnuAttr *)&SmsRead_R_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsRead_R_OPT_mnu_cb); | |
2405 } | |
2406 mnuLang(data->menu,mainMmiLng); | |
2407 | |
2408 /* put the (new) dialog window on top of the window stack */ | |
2409 mnuUnhide(data->menu); | |
2410 winShow(win); | |
2411 break; | |
2412 | |
2413 case E_BACK: | |
2414 l_parent = data->parent; | |
2415 l_id = data->id; | |
2416 SmsRead_R_OPT_destroy(data->win); | |
2417 SEND_EVENT (l_parent, E_RETURN, l_id, NULL); /* forward event to parent */ | |
2418 | |
2419 case E_ABORT: | |
2420 case E_EXIT: | |
2421 SmsRead_R_OPT_destroy(data->win); | |
2422 SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ | |
2423 break; | |
2424 default: | |
2425 return; | |
2426 } | |
2427 } | |
2428 | |
2429 /******************************************************************************* | |
2430 | |
2431 $Function: SmsRead_R_OPT_mfw_cb | |
2432 | |
2433 $Description: Exec callback function for the DEL_ALL_ACK window | |
2434 | |
2435 $Returns: status | |
2436 | |
2437 $Arguments: event - window event Id | |
2438 parameter- optional data. | |
2439 *******************************************************************************/ | |
2440 | |
2441 int SmsRead_R_OPT_mfw_cb (MfwEvt event, void *parameter) | |
2442 { | |
2443 T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); | |
2444 T_MFW_WIN * win_data = (T_MFW_WIN *)((T_MFW_HDR *)win)->data; | |
2445 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
2446 // T_MFW_EVENT MfwEvents; // RAVI | |
2447 | |
2448 | |
2449 TRACE_FUNCTION ("SmsRead_R_OPT_mfw_cb()"); | |
2450 | |
2451 switch (event) | |
2452 { | |
2453 | |
2454 case E_SMS_ERR: | |
2455 | |
2456 winDelete(data->dialog_win); | |
2457 | |
2458 /* Display "All SMS deleted" and after timeout go back to parent */ | |
2459 SmsRead_R_OPT_StandardDialog(win, "SMS not deleted", THREE_SECS); // TBD remplacer par ID | |
2460 | |
2461 break; | |
2462 | |
2463 case E_SMS_OK: | |
2464 | |
2465 /* go now back to the parent */ | |
2466 | |
2467 /* destroy the dialog at first */ | |
2468 winDelete(data->dialog_win); | |
2469 | |
2470 /* Display "All SMS deleted" and after timeout go back to parent */ | |
2471 SmsRead_R_OPT_StandardDialog(win, "SMS deleted", THREE_SECS); // TBD remplacer par ID | |
2472 break; | |
2473 } | |
2474 return 1; // ADDED BY RAVI - 28-11-2005 | |
2475 } | |
2476 | |
2477 /******************************************************************************* | |
2478 | |
2479 $Function: SmsRead_R_OPT_mnu_cb | |
2480 | |
2481 $Description: Menu callback function for the Option window | |
2482 | |
2483 $Returns: status | |
2484 | |
2485 $Arguments: e - mfw event Id | |
2486 m - menu handle | |
2487 *******************************************************************************/ | |
2488 | |
2489 static int SmsRead_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m) | |
2490 /* SmsRead_R_OPT menu event handler */ | |
2491 { | |
2492 T_MFW_HND win = mfwParent(mfw_header()); | |
2493 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
2494 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
2495 T_MFW_HND * l_parent; | |
2496 SHORT l_id; | |
2497 | |
2498 TRACE_FUNCTION ("SmsRead_R_OPT_mnu_cb()"); | |
2499 | |
2500 switch (e) | |
2501 { | |
2502 case E_MNU_ESCAPE: /* back to previous menu */ | |
2503 l_parent = data->parent; | |
2504 l_id = data->id; | |
2505 SmsRead_R_OPT_destroy(data->win); | |
2506 SEND_EVENT (l_parent, E_RETURN, data->id, NULL); | |
2507 break; | |
2508 default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */ | |
2509 return MFW_EVENT_REJECTED; | |
2510 } | |
2511 return MFW_EVENT_CONSUMED; | |
2512 } | |
2513 | |
2514 /******************************************************************************* | |
2515 | |
2516 $Function: SmsRead_R_OPT_win_cb | |
2517 | |
2518 $Description: Window callback function for the Option window | |
2519 | |
2520 $Returns: status | |
2521 | |
2522 $Arguments: e - mfw event Id | |
2523 w - window handler | |
2524 *******************************************************************************/ | |
2525 | |
2526 static int SmsRead_R_OPT_win_cb (MfwEvt e, MfwWin *w) | |
2527 /* SmsRead_R_OPT window event handler */ | |
2528 { | |
2529 TRACE_FUNCTION ("SmsRead_R_OPT_win_cb()"); | |
2530 | |
2531 switch (e) | |
2532 { | |
2533 case MfwWinVisible: /* window is visible */ | |
2534 displaySoftKeys(TxtSoftSelect,TxtSoftBack); | |
2535 break; | |
2536 case MfwWinFocussed: /* input focus / selected */ | |
2537 case MfwWinDelete: /* window will be deleted */ | |
2538 default: | |
2539 return MFW_EVENT_REJECTED; | |
2540 } | |
2541 return MFW_EVENT_CONSUMED; | |
2542 } | |
2543 | |
2544 /******************************************************************************* | |
2545 | |
2546 $Function: SmsRead_R_OPT_kbd_cb | |
2547 | |
2548 $Description: Exec callback function for the Option window | |
2549 | |
2550 $Returns: status | |
2551 | |
2552 $Arguments: e - keyboard event Id | |
2553 k - keyboard data | |
2554 *******************************************************************************/ | |
2555 | |
2556 static int SmsRead_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k) | |
2557 /* SmsRead_R_OPT keyboard event handler */ | |
2558 { | |
2559 T_MFW_HND win = mfwParent(mfw_header()); | |
2560 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
2561 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
2562 | |
2563 TRACE_FUNCTION ("SmsRead_R_OPT_kbd_cb()"); | |
2564 | |
2565 if (e & KEY_LONG) | |
2566 { | |
2567 switch (k->code) | |
2568 { | |
2569 case KCD_HUP: /* back to previous menu */ | |
2570 mnuEscape(data->menu); | |
2571 break; | |
2572 case KCD_RIGHT: /* Power Down */ | |
2573 return MFW_EVENT_REJECTED; /* handled by idle */ | |
2574 default: /* no response to all other keys */ | |
2575 return MFW_EVENT_CONSUMED; | |
2576 } | |
2577 } | |
2578 else | |
2579 { | |
2580 switch (k->code) | |
2581 { | |
2582 case KCD_MNUUP: /* highlight previous entry */ | |
2583 mnuUp(data->menu); | |
2584 break; | |
2585 case KCD_MNUDOWN: /* highlight next entry */ | |
2586 mnuDown(data->menu); | |
2587 break; | |
2588 case KCD_MNUSELECT: | |
2589 case KCD_LEFT: /* activate this entry */ | |
2590 mnuSelect(data->menu); | |
2591 break; | |
2592 case KCD_HUP: /* back to previous menu */ | |
2593 case KCD_RIGHT: /* back to previous menu */ | |
2594 mnuEscape(data->menu); | |
2595 break; | |
2596 default: /* no response to all other keys */ | |
2597 return MFW_EVENT_CONSUMED; | |
2598 } | |
2599 } | |
2600 return MFW_EVENT_CONSUMED; | |
2601 } | |
2602 | |
2603 /******************************************************************************* | |
2604 | |
2605 $Function: SmsRead_R_OPT_dialog_cb | |
2606 | |
2607 $Description: Dialog callback function of the SMS read window (dynamic list | |
2608 of all the SMS). Case where SMS has not been initialized yet. | |
2609 | |
2610 $Returns: status | |
2611 | |
2612 $Arguments: win - window handler. | |
2613 Identifier - unique identifier. | |
2614 Reason - cause of event. | |
2615 *******************************************************************************/ | |
2616 | |
2617 int SmsRead_R_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) | |
2618 { | |
2619 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
2620 T_SMSREAD_R_OPT *data = (T_SMSREAD_R_OPT *)win_data->user; | |
2621 T_MFW_HND *lparent = data->parent; | |
2622 | |
2623 TRACE_FUNCTION ("SmsRead_dialog_cb()"); | |
2624 | |
2625 switch (Reason) | |
2626 { | |
2627 case INFO_TIMEOUT: | |
2628 case INFO_KCD_HUP: | |
2629 // Commit suicide | |
2630 SmsRead_R_OPT_destroy(win); | |
2631 // Send E_RETURN event to parent window | |
2632 SEND_EVENT(lparent, E_RETURN, data->id, NULL); | |
2633 return MFW_EVENT_CONSUMED; | |
2634 | |
2635 default: | |
2636 return MFW_EVENT_REJECTED; | |
2637 } | |
2638 } | |
2639 | |
2640 /******************************************************************************* | |
2641 | |
2642 $Function: SmsRead_DisplayStandardDialog | |
2643 | |
2644 $Description: Display a standard dialog with no soft key and 3 seconds of display | |
2645 | |
2646 $Returns: none | |
2647 | |
2648 $Arguments: win - window handler. | |
2649 text - text string. | |
2650 duration - seconds | |
2651 *******************************************************************************/ | |
2652 | |
2653 void SmsRead_DisplayStandardDialog(T_MFW_HND win, int TextId, ULONG duration) | |
2654 { | |
2655 T_DISPLAY_DATA DisplayInfo; | |
2656 | |
2657 SmsMenu_loadDialogDefault(&DisplayInfo); | |
2658 | |
2659 DisplayInfo.TextId = TextId; | |
2660 DisplayInfo.Time = duration; | |
2661 DisplayInfo.Callback = (T_VOID_FUNC)SmsRead_R_dialog_cb; | |
2662 | |
2663 // Dec 15,2004 REF: CRR 24396 xkundadu | |
2664 // Description: Phone crashes when a message is received while the | |
2665 // 'List Empty' dialog is displayed. | |
2666 | |
2667 // set the variable to TRUE since 'List empty' dialog is going to display. | |
2668 SmsListEmptyDlgPresent = TRUE; | |
2669 info_dialog(win, &DisplayInfo); | |
2670 } | |
2671 | |
2672 /******************************************************************************* | |
2673 | |
2674 $Function: SmsRead_R_OPT_StandardDialog | |
2675 | |
2676 $Description: Display a standard dialog with no soft key and 3 seconds of display | |
2677 | |
2678 $Returns: none | |
2679 | |
2680 $Arguments: win - window handler. | |
2681 text - text string. | |
2682 duration - seconds | |
2683 *******************************************************************************/ | |
2684 | |
2685 void SmsRead_R_OPT_StandardDialog(T_MFW_HND win, char *text, ULONG duration) | |
2686 { | |
2687 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
2688 T_SMSREAD_R_OPT *data = (T_SMSREAD_R_OPT *)win_data->user; | |
2689 | |
2690 T_DISPLAY_DATA DisplayInfo; | |
2691 | |
2692 SmsMenu_loadDialogDefault(&DisplayInfo); | |
2693 | |
2694 DisplayInfo.TextId = 0; | |
2695 DisplayInfo.Time = duration; | |
2696 DisplayInfo.TextString = text; | |
2697 DisplayInfo.Callback = (T_VOID_FUNC)SmsRead_R_OPT_dialog_cb; //TBD | |
2698 | |
2699 data->dialog_win = info_dialog(win, &DisplayInfo); | |
2700 } | |
2701 | |
2702 | |
2703 /*SPR2175, removed unused function*/ | |
2704 | |
2705 | |
2706 /******************************************************************************* | |
2707 | |
2708 $Function: string_CopyW2W | |
2709 | |
2710 $Description: | |
2711 | |
2712 $Returns: none | |
2713 | |
2714 $Arguments: strDestination - destination string | |
2715 strSource - source string | |
2716 count -number of character. | |
2717 *******************************************************************************/ | |
2718 | |
2719 void string_CopyW2W(wstring_t *strDestination, charw_t *strSource, USHORT count ) | |
2720 // Copy characters of an ascii string to a wide counted string | |
2721 { | |
2722 charw_t *pout = strDestination; | |
2723 while(count!=0) | |
2724 { | |
2725 *pout++ = *strSource++; | |
2726 count--; | |
2727 } | |
2728 } | |
2729 | |
2730 /******************************************************************************* | |
2731 | |
2732 $Function: SmsRead_R_TEXTEDT2_start | |
2733 | |
2734 $Description: Start the creation of the SMS editor window (display of the text | |
2735 of one SMS) | |
2736 | |
2737 $Returns: win - window handler. | |
2738 | |
2739 $Arguments: parent_window - current window handler | |
2740 data - Menu attributes. | |
2741 | |
2742 *******************************************************************************/ | |
2743 | |
2744 T_MFW_HND SmsRead_R_TEXTEDT2_start(T_MFW_HND parent_window, MfwMnuAttr *data) | |
2745 { | |
2746 /*SPR 2132, use global var*/ | |
2747 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_start()"); | |
2748 | |
2749 message_win = SmsRead_R_TEXTEDT2_create (parent_window); | |
2750 | |
2751 if (message_win NEQ NULL) | |
2752 { | |
2753 SEND_EVENT (message_win, E_INIT, SmsRead_R_TEXTEDT2_ID, (void *)data); | |
2754 } | |
2755 return message_win; | |
2756 } | |
2757 | |
2758 /******************************************************************************* | |
2759 | |
2760 $Function: SmsRead_R_TEXTEDT2_create | |
2761 | |
2762 $Description: Create the SMS editor window (display of the text of one SMS) | |
2763 | |
2764 $Returns: window handler. | |
2765 | |
2766 $Arguments: parent_window - current window handler | |
2767 | |
2768 *******************************************************************************/ | |
2769 | |
2770 static T_MFW_HND SmsRead_R_TEXTEDT2_create(MfwHnd parent_window) | |
2771 { | |
2772 T_SMSREAD_R_TEXTEDT2 * data = (T_SMSREAD_R_TEXTEDT2 *)ALLOC_MEMORY (sizeof (T_SMSREAD_R_TEXTEDT2)); | |
2773 T_MFW_WIN * win; | |
2774 | |
2775 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_create()"); | |
2776 | |
2777 /* | |
2778 * Create window handler | |
2779 */ | |
2780 | |
2781 data->win = | |
2782 win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)SmsRead_R_TEXTEDT2_win_cb); | |
2783 if (data->win EQ NULL) | |
2784 { | |
2785 return NULL; | |
2786 } | |
2787 /* | |
2788 * connect the dialog data to the MFW-window | |
2789 */ | |
2790 | |
2791 data->mmi_control.dialog = (T_DIALOG_FUNC)SmsRead_R_TEXTEDT2_exec_cb; | |
2792 data->mmi_control.data = data; | |
2793 win = ((T_MFW_HDR *)data->win)->data; | |
2794 win->user = (void *)data; | |
2795 data->parent = parent_window; | |
2796 | |
2797 /* | |
2798 * return window handle | |
2799 */ | |
2800 winShow(data->win); | |
2801 return data->win; | |
2802 } | |
2803 | |
2804 /******************************************************************************* | |
2805 | |
2806 $Function: SmsRead_R_TEXTEDT2_destroy | |
2807 | |
2808 $Description: Destroy the SMS editor window (display of the text of one SMS) | |
2809 | |
2810 $Returns: none | |
2811 | |
2812 $Arguments: own_window - current window handler | |
2813 | |
2814 *******************************************************************************/ | |
2815 | |
2816 static void SmsRead_R_TEXTEDT2_destroy(MfwHnd own_window) | |
2817 { | |
2818 T_MFW_WIN * win_data; | |
2819 T_SMSREAD_R_TEXTEDT2 * data; | |
2820 | |
2821 // USHORT i; // RAVI | |
2822 | |
2823 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_destroy()"); | |
2824 | |
2825 if (own_window) | |
2826 { | |
2827 win_data = ((T_MFW_HDR *)own_window)->data; | |
2828 data = (T_SMSREAD_R_TEXTEDT2 *)win_data->user; | |
2829 | |
2830 if (data) | |
2831 { | |
2832 /* | |
2833 * Delete WIN handler | |
2834 */ | |
2835 | |
2836 /* SPR#1428 - SH - New Editor changes */ | |
2837 #ifdef NEW_EDITOR | |
2838 AUI_edit_Destroy(data->editor_win); | |
2839 #else /* NEW_EDITOR */ | |
2840 editor_destroy(data->editor_win); | |
2841 #endif /* NEW_EDITOR */ | |
2842 | |
2843 win_delete (data->win); | |
2844 | |
2845 | |
2846 | |
2847 FREE_MEMORY ((void *)data->sms_editor_data->sms_info, sizeof (T_MFW_SMS_PARA)); | |
2848 | |
2849 FREE_MEMORY ((void *)data, sizeof (T_SMSREAD_R_TEXTEDT2)); | |
2850 | |
2851 message_win = 0; /*SPR2132, make sure window pointer is reset*/ | |
2852 } | |
2853 else | |
2854 { | |
2855 TRACE_EVENT ("SmsRead_R_TEXTEDT2_destroy() called twice"); | |
2856 } | |
2857 } | |
2858 } | |
2859 | |
2860 /******************************************************************************* | |
2861 | |
2862 $Function: SmsRead_R_TEXT_editor_cb | |
2863 | |
2864 $Description: Callback function for the text editor | |
2865 | |
2866 $Returns: none | |
2867 | |
2868 $Arguments: win - current window handler | |
2869 Identifier -Unique identifier. | |
2870 reason - event | |
2871 *******************************************************************************/ | |
2872 | |
2873 static void SmsRead_R_TEXT_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) | |
2874 { | |
2875 T_MFW_PHB_ENTRY pb_data; | |
2876 | |
2877 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
2878 T_SMSREAD_R_TEXTEDT2 * data = (T_SMSREAD_R_TEXTEDT2 *)win_data->user; | |
2879 | |
2880 T_MFW_HDR * parent = data->parent; | |
2881 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
2882 // T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; // RAVI | |
2883 | |
2884 // T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; // RAVI | |
2885 | |
2886 | |
2887 TRACE_FUNCTION ("SmsRead_R_TEXT_editor_cb()"); | |
2888 | |
2889 switch (reason) | |
2890 { | |
2891 case INFO_KCD_LEFT: | |
2892 //x0pleela 08 Feb, 2006 DR: OMAPS00059261 | |
2893 //Replacing MT_STATUS_RPT with MFW_SMS_STATRPT as MT_STATUS_RPT is removed | |
2894 //x0pleela 30 Jan, 2006 DR: OMAPS00059261 | |
2895 //Displaying different options screen for normal MT text message. | |
2896 //whereas, for staus report message, the message is deleted, since the option is "Delete" in LSK | |
2897 if( data->sms_editor_data->sms_info->sms_mt.sms_msg_type EQ MFW_SMS_STATRPT) | |
2898 { | |
2899 if(sms_msg_delete((UBYTE)data->sms_editor_data->sms_info->sms_mt.index/*SPR 2686*/)== MFW_SMS_OK) | |
2900 { | |
2901 /* set the status that the user selected the delete item */ | |
2902 if(deleting_win == 0) | |
2903 deleting_win= mmi_dialog_information_screen_forever(0,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); | |
2904 | |
2905 SmsRead_R_TEXTEDT2_destroy(data->win); | |
2906 /*SPR 2530, Delete and recreate SMS list window to show updates*/ | |
2907 { T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; | |
2908 | |
2909 listsDestroy(list_win); | |
2910 list_win=0; | |
2911 SmsRead_R_destroy(sms_read_win); | |
2912 SmsRead_R_start(NULL, (MfwMnuAttr*)&sms_list_type); | |
2913 } | |
2914 | |
2915 } | |
2916 else | |
2917 { | |
2918 | |
2919 /*SPR2530, don't delete option and display windows, just show failure*/ | |
2920 mmi_dialog_information_screen(0,TxtFailed, NULL, NULL, COLOUR_STATUS_WAIT); | |
2921 } | |
2922 } | |
2923 //x0pleela 01 Feb, 2006 DR: OMAPS00059261 | |
2924 //Made changes as per review comments | |
2925 else //MT_TEXT | |
2926 { | |
2927 // Present the user with an Options menu from the Read SMS text screen.:16/2/01 | |
2928 SmsRead_R_READSMS_OPT_start(win, (MfwMnuAttr*)&data->sms_editor_data); | |
2929 } | |
2930 | |
2931 break; | |
2932 | |
2933 case INFO_KCD_RIGHT: | |
2934 case INFO_KCD_HUP: | |
2935 SmsRead_R_TEXTEDT2_destroy(data->win); | |
2936 /*SPR 2530, Delete and recreate SMS list window to show updates*/ | |
2937 { T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; | |
2938 | |
2939 listsDestroy(list_win); | |
2940 list_win=0; | |
2941 SmsRead_R_destroy(sms_read_win); | |
2942 SmsRead_R_start(NULL, (MfwMnuAttr*)&sms_list_type); | |
2943 } | |
2944 break; | |
2945 case INFO_KCD_DOWN: | |
2946 break; | |
2947 case INFO_KCD_CALL: | |
2948 /* Marcus: Issue 1041: 05/09/2002: Start */ | |
2949 strcpy((char *)pb_data.number, (char *)SmsData.NumberBuffer); | |
2950 /* Marcus: Issue 1041: 05/09/2002: End */ | |
2951 TRACE_EVENT_P1("Number is = %d",(int)pb_data.number); | |
2952 callNumber(pb_data.number); | |
2953 break; | |
2954 | |
2955 | |
2956 default: | |
2957 TRACE_EVENT("Err: Default No match found"); | |
2958 break; | |
2959 } | |
2960 } | |
2961 | |
2962 /******************************************************************************* | |
2963 | |
2964 $Function: SmsRead_R_TEXTEDT2_exec_cb | |
2965 | |
2966 $Description: Exec callback function of the SMS editor window (display of the | |
2967 text of one SMS) | |
2968 | |
2969 $Returns: none | |
2970 | |
2971 $Arguments: win - current window handler | |
2972 event - event id | |
2973 value - unique id | |
2974 parameter - optional data. | |
2975 *******************************************************************************/ | |
2976 | |
2977 void SmsRead_R_TEXTEDT2_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) | |
2978 /* callback handler for events sent to to trigger execution */ | |
2979 { | |
2980 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
2981 T_SMSREAD_R_TEXTEDT2 * data = (T_SMSREAD_R_TEXTEDT2 *)win_data->user; | |
2982 T_MFW_HND * l_parent; | |
2983 SHORT l_id; | |
2984 T_MFW_SMS_MO *SmsMo; | |
2985 T_MFW_SMS_MT *SmsMt; | |
2986 T_MFW_SMS_CB *SmsCb; | |
2987 | |
2988 /* SPR#1428 - SH - New Editor changes */ | |
2989 #ifdef NEW_EDITOR | |
2990 T_AUI_EDITOR_DATA sms_editor_info; | |
2991 USHORT size; | |
2992 /*SPR 2530*/ | |
2993 T_ATB_TEXT main_text; | |
2994 T_ATB_TEXT temp_text; | |
2995 // T_ATB_DCS atb_dcs; // RAVI | |
2996 #else /* NEW_EDITOR */ | |
2997 T_EDITOR_DATA sms_editor_info; | |
2998 #endif /* NEW_EDITOR */ | |
2999 | |
3000 // USHORT i, line_ret, line_nb; // RAVI | |
3001 USHORT msg_len; | |
3002 // div_t result; // RAVI | |
3003 /* JVJ SPR 1298 - Memory optimization. Converted to dynamic and size decreased*/ | |
3004 char* sms_text_buffer = (char*)ALLOC_MEMORY(MAX_EDITOR_HEADER_LENGTH); | |
3005 T_MFW_PHB_ENTRY pb_entry; | |
3006 USHORT index=0; | |
3007 T_MFW_SMS_IDX msg_info;/*SPR 2530*/ | |
3008 | |
3009 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_exec_cb()"); | |
3010 | |
3011 switch (event) | |
3012 { | |
3013 case E_INIT: | |
3014 { UBYTE input_type;/*MC SPR1242*/ | |
3015 /* initialization of administrative data */ | |
3016 data->id = value; | |
3017 | |
3018 data->sms_editor_data = (T_SMS_EDITOR_DATA *)parameter; | |
3019 | |
3020 switch (data->sms_editor_data->sms_type) | |
3021 { | |
3022 case MMI_SMS_MO: | |
3023 | |
3024 /* where does we need that: | |
3025 For editor when the user wants to editing the sms-message | |
3026 */ | |
3027 read_status = MMI_SMS_MO; | |
3028 | |
3029 SmsMo = (T_MFW_SMS_MO *)data->sms_editor_data->sms_info; | |
3030 | |
3031 sms_copy_idx(SmsMo->msg_ref, &msg_info);/*SPR 1830*/ | |
3032 // API Clear the buffers before showing the MO message. | |
3033 memset (sms_text_ascii, '\0', MAX_EDITOR_LEN); | |
3034 memset (sms_text_buffer, '\0', MAX_EDITOR_HEADER_LENGTH); | |
3035 /*SPR 2530, if new ediotr use nice string-handling functions*/ | |
3036 #ifdef NEW_EDITOR | |
3037 main_text.data = (UBYTE*)sms_text_ascii; | |
3038 /*if we are in chinese, then we need to display in Unicode, otherwise ASCII*/ | |
3039 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3040 main_text.dcs = ATB_DCS_UNICODE; | |
3041 else | |
3042 main_text.dcs = ATB_DCS_ASCII; | |
3043 ATB_string_Length(&main_text); | |
3044 /*if this isn't an invalid message*/ | |
3045 if (msg_info.stat != MFW_SMS_INVALID) | |
3046 { /*set text string dcs, according to alphabet used for message*/ | |
3047 if ( (SmsMo->dcs & 0x0c) == MFW_DCS_UCS2 || SmsMo->sms_msg[0] == 0x80) | |
3048 { | |
3049 temp_text.dcs = ATB_DCS_UNICODE; | |
3050 /* CQ 16780 15-01-04 MZ */ | |
3051 /*copy message text to string*/ | |
3052 temp_text.data = (UBYTE*)SmsMo->sms_msg; | |
3053 } | |
3054 else | |
3055 { | |
3056 temp_text.dcs = ATB_DCS_ASCII; | |
3057 /* CQ: 16780 Convert to Ascii format 15-01-04 MZ */ | |
3058 ATB_convert_String( SmsMo->sms_msg, MFW_DCS_8bits , SmsMo->msg_len, | |
3059 sms_text_ascii, MFW_ASCII, MAX_MSG_LEN, TRUE); | |
3060 /*copy message text to string*/ | |
3061 temp_text.data = (UBYTE*)sms_text_ascii; | |
3062 } | |
3063 | |
3064 ATB_string_Length(&temp_text); | |
3065 /*concat message text into display string*/ | |
3066 ATB_string_Concat(&main_text, &temp_text); | |
3067 /*if this is an incomplete concat message, add "Incomplete Message" to end of display text*/ | |
3068 if (msg_info.concat_status == MFW_SMS_CONC_PART) | |
3069 { | |
3070 ATB_string_SetChar(&main_text, ATB_string_Length(&main_text),(USHORT)":"); | |
3071 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3072 temp_text.dcs = ATB_DCS_UNICODE; | |
3073 else | |
3074 temp_text.dcs = ATB_DCS_ASCII; | |
3075 temp_text.data = (UBYTE*)MmiRsrcGetText(TxtIncompleteMessage); | |
3076 ATB_string_Length(&temp_text); | |
3077 ATB_string_Concat(&main_text, &temp_text); | |
3078 } | |
3079 | |
3080 } | |
3081 else | |
3082 {/*set display text to "Invalid Message"*/ | |
3083 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3084 temp_text.dcs = ATB_DCS_UNICODE; | |
3085 else | |
3086 temp_text.dcs = ATB_DCS_ASCII; | |
3087 temp_text.data = (UBYTE*)MmiRsrcGetText(TxtInvalidMessage); | |
3088 ATB_string_Length(&temp_text); | |
3089 ATB_string_Concat(&main_text, &temp_text); | |
3090 } | |
3091 #else | |
3092 | |
3093 /* SH - convert from original dcs once more */ | |
3094 | |
3095 /*MC,SPR1242 don't trust the DCS, check for Unicode tag*/ | |
3096 if (SmsMo->sms_msg[0] == 0x80||SmsMo->dcs == MFW_DCS_UCS2) | |
3097 { input_type = MFW_DCS_UCS2;} | |
3098 else | |
3099 { input_type = MFW_DCS_8bits;} | |
3100 | |
3101 /*mc end*/ | |
3102 if (input_type == MFW_DCS_UCS2/*MC SPR1242*/) | |
3103 {/*SPR2175, use new function for conversion*/ | |
3104 | |
3105 ATB_convert_String( SmsMo->sms_msg, /*SmsMo->dcs*/input_type/*MC SPR1242*/, SmsMo->msg_len, | |
3106 &sms_text_ascii[2], MFW_DCS_UCS2, MAX_MSG_LEN-2, TRUE); | |
3107 sms_text_ascii[0] = 0x80; | |
3108 sms_text_ascii[1] = 0x7F; | |
3109 } | |
3110 else | |
3111 {/*SPR2175, use new function for conversion*/ | |
3112 | |
3113 ATB_convert_String( SmsMo->sms_msg, /*SmsMo->dcs*/input_type/*MC SPR1242*/ , SmsMo->msg_len, | |
3114 sms_text_ascii, MFW_ASCII, MAX_MSG_LEN, TRUE); | |
3115 | |
3116 } | |
3117 | |
3118 #endif | |
3119 break; | |
3120 | |
3121 case MMI_SMS_MT: | |
3122 /* where does we need that: | |
3123 For editor when the user wants to editing the sms-message | |
3124 */ | |
3125 read_status = MMI_SMS_MT; | |
3126 | |
3127 SmsMt = (T_MFW_SMS_MT *)data->sms_editor_data->sms_info; | |
3128 sms_copy_idx(SmsMt->index, &msg_info);/*SPR 2530*/ | |
3129 memset (sms_text_ascii, '\0', MAX_EDITOR_LEN); | |
3130 memset (sms_text_buffer, '\0',MAX_EDITOR_HEADER_LENGTH); | |
3131 /*SPR 2530, if new editor use nice string-handling functions*/ | |
3132 #ifdef NEW_EDITOR | |
3133 main_text.data = (UBYTE*)sms_text_ascii; | |
3134 /*set up text data stucture for main display string*/ | |
3135 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3136 main_text.dcs = ATB_DCS_UNICODE; | |
3137 else | |
3138 main_text.dcs = ATB_DCS_ASCII; | |
3139 ATB_string_Length(&main_text); | |
3140 #endif | |
3141 if (msg_info.stat != MFW_SMS_INVALID)/*SPR 1830*/ | |
3142 { | |
3143 | |
3144 /* Marcus: Issue 1041: 05/09/2002: Start */ | |
3145 // API - Copy number into buffer so when Call key is pressed in editor call is generated | |
3146 strcpy((char *)SmsData.NumberBuffer,(char *)SmsMt->orig_addr.number); | |
3147 /* Marcus: Issue 1041: 05/09/2002: End */ | |
3148 | |
3149 /* Marcus: Issue 1489: 13/12/2002: Start */ | |
3150 /*API - 1053 - 09-09-02 Copy the number into this buffer so that when | |
3151 a call is generated from the editor it is connected. | |
3152 */ | |
3153 if(SmsMt->orig_addr.ton == MFW_TON_INTERNATIONAL) | |
3154 { | |
3155 if(SmsMt->orig_addr.number[0] == '+') | |
3156 { | |
3157 strcpy((char *)SmsData.NumberBuffer,(char *)SmsMt->orig_addr.number); | |
3158 } | |
3159 else | |
3160 { | |
3161 strcpy((char *)SmsData.NumberBuffer, "+"); | |
3162 strncat((char *)SmsData.NumberBuffer,(char *)SmsMt->orig_addr.number,sizeof(SmsData.NumberBuffer)-2); | |
3163 } | |
3164 } | |
3165 #ifndef NEW_EDITOR | |
3166 /* add the number or the name if he can find it in the phonebook*/ | |
3167 if (bookFindNameInPhonebook((const char*)SmsMt->orig_addr.number, &pb_entry) !=0) | |
3168 { | |
3169 #ifdef NO_ASCIIZ | |
3170 /*mc SPR 1257, unicode support*/ | |
3171 memcpy(sms_text_ascii, (char*)pb_entry.name.data,pb_entry.name.len ); | |
3172 #else | |
3173 strcpy(sms_text_ascii, (char*)pb_entry.name); | |
3174 #endif | |
3175 } | |
3176 else | |
3177 { | |
3178 | |
3179 strcpy(sms_text_ascii, (char *)SmsData.NumberBuffer); | |
3180 /* Marcus: Issue 1489: 13/12/2002: End */ | |
3181 } | |
3182 #else | |
3183 /*SPR 2530, if new editor use nice string-handling functions*/ | |
3184 /*see if the sender is in the phonebook*/ | |
3185 if (bookFindNameInPhonebook((const char*)SmsMt->orig_addr.number, &pb_entry) !=0) | |
3186 { char temp_string[PHB_MAX_LEN]; | |
3187 | |
3188 memset(temp_string, '\0', PHB_MAX_LEN); | |
3189 /*copy name into a text data structure*/ | |
3190 | |
3191 /* CQ: 16780 Check the phonebook string format by testing the dcs. NOT the dcs values are Enum types and not the true dcs | |
3192 values of the ADN store. 15-01-04 MZ */ | |
3193 if (pb_entry.name.dcs == MFW_DCS_UCS2 ||pb_entry.name.data[0] == 0x80 ) | |
3194 temp_text.dcs = ATB_DCS_UNICODE; | |
3195 else | |
3196 temp_text.dcs = ATB_DCS_ASCII; | |
3197 | |
3198 if (temp_text.dcs != ATB_DCS_UNICODE) | |
3199 { | |
3200 temp_text.data = (UBYTE*)pb_entry.name.data; | |
3201 } | |
3202 | |
3203 else | |
3204 { | |
3205 /* CQ:16780 Check for unicode string type 15-01-04 MZ*/ | |
3206 if(pb_entry.name.data[0] == 0x80) | |
3207 { | |
3208 pb_entry.name.len-=2; | |
3209 memcpy(temp_string, &pb_entry.name.data[2], pb_entry.name.len); | |
3210 } | |
3211 else | |
3212 { | |
3213 memcpy(temp_string, &pb_entry.name.data[0], pb_entry.name.len); | |
3214 } | |
3215 | |
3216 temp_text.data = (UBYTE*)temp_string; | |
3217 | |
3218 | |
3219 } | |
3220 ATB_string_Length(&temp_text); | |
3221 /*add name text into main display string*/ | |
3222 ATB_string_Concat(&main_text, &temp_text); | |
3223 | |
3224 } | |
3225 ATB_string_Length(&main_text); | |
3226 | |
3227 #endif | |
3228 #ifndef NEW_EDITOR | |
3229 /* SH - convert from original dcs once more */ | |
3230 /*MC,SPR1242 don't trust the DCS, check for Unicode tag*/ | |
3231 if (SmsMt->sms_msg[0] == 0x80||SmsMt->dcs == MFW_DCS_UCS2) | |
3232 { input_type = MFW_DCS_UCS2;} | |
3233 else | |
3234 { input_type = MFW_DCS_8bits;} | |
3235 | |
3236 /*mc end*/ | |
3237 if (/*SmsMt->dcs*/input_type == MFW_DCS_UCS2) | |
3238 { /*SPR2175, use new function for conversion*/ | |
3239 ATB_convert_String( SmsMt->sms_msg, input_type /*MC SPR1242*/, SmsMt->msg_len, | |
3240 &sms_text_ascii[2], MFW_DCS_UCS2, MAX_MSG_LEN-2, TRUE); | |
3241 sms_text_ascii[0] = 0x80; | |
3242 sms_text_ascii[1] = 0x7F; | |
3243 } | |
3244 else | |
3245 { | |
3246 | |
3247 #endif | |
3248 if(strlen(sms_text_ascii) != 14 ) // number of character that can be displayed on one line. | |
3249 sms_text_buffer[index++]='\n'; | |
3250 | |
3251 sms_text_buffer[index++]='0'+SmsMt->sctp.day[0]; | |
3252 sms_text_buffer[index++]='0'+SmsMt->sctp.day[1]; | |
3253 sms_text_buffer[index++]='/'; | |
3254 sms_text_buffer[index++]='0'+SmsMt->sctp.month[0]; | |
3255 sms_text_buffer[index++]='0'+SmsMt->sctp.month[1]; | |
3256 sms_text_buffer[index++]='/'; | |
3257 sms_text_buffer[index++]='0'+SmsMt->sctp.year[0]; | |
3258 sms_text_buffer[index++]='0'+SmsMt->sctp.year[1]; | |
3259 sms_text_buffer[index++]=','; | |
3260 sms_text_buffer[index++]='\n'; | |
3261 | |
3262 sms_text_buffer[index++] ='0'+SmsMt->sctp.hour[0]; | |
3263 sms_text_buffer[index++]='0'+SmsMt->sctp.hour[1]; | |
3264 sms_text_buffer[index++]=':'; | |
3265 sms_text_buffer[index++]='0'+SmsMt->sctp.minute[0]; | |
3266 sms_text_buffer[index++]='0'+SmsMt->sctp.minute[1]; | |
3267 sms_text_buffer[index++]='\n'; | |
3268 #ifndef NEW_EDITOR | |
3269 strcat(sms_text_ascii, sms_text_buffer); | |
3270 msg_len = strlen(sms_text_ascii); | |
3271 | |
3272 /* | |
3273 keep the length of the additional information (Date,Time & Number); | |
3274 need it later for editing the sms messages (user pressed-> EDIT) | |
3275 */ | |
3276 current_sms_len = msg_len; | |
3277 | |
3278 /* SH - convert from original dcs once more */ | |
3279 /*SPR2175, use new function for conversion*/ | |
3280 ATB_convert_String( SmsMt->sms_msg, /*SmsMt->dcs*/input_type /*MC SPR1242*/, SmsMt->msg_len, | |
3281 &sms_text_ascii[msg_len], MFW_ASCII /*SH*/, MAX_EDITOR_LEN-(msg_len+1), TRUE); | |
3282 | |
3283 } | |
3284 | |
3285 #else | |
3286 /*SPR 2530, if new editor use nice string-handling functions*/ | |
3287 /*Add date and time to main display string*/ | |
3288 temp_text.dcs = ATB_DCS_ASCII; | |
3289 temp_text.data = (UBYTE*)sms_text_buffer; | |
3290 ATB_string_Length(&temp_text); | |
3291 ATB_string_Concat(&main_text, &temp_text); | |
3292 | |
3293 | |
3294 if ((SmsMt->dcs&0x0c) == MFW_DCS_UCS2) | |
3295 { | |
3296 temp_text.dcs = ATB_DCS_UNICODE; | |
3297 temp_text.data = (UBYTE*)SmsMt->sms_msg; | |
3298 } | |
3299 else | |
3300 { | |
3301 temp_text.dcs = ATB_DCS_ASCII; | |
3302 | |
3303 /* CQ 16780 Convert incoming SMS text to ASCIII 15-01-04 MZ */ | |
3304 | |
3305 ATB_convert_String( SmsMt->sms_msg, MFW_DCS_8bits , SmsMt->msg_len, | |
3306 (char*)temp_text.data, MFW_ASCII, MAX_MSG_LEN, TRUE); | |
3307 } | |
3308 | |
3309 ATB_string_Length(&temp_text); | |
3310 ATB_string_Concat(&main_text, &temp_text); | |
3311 /*if the message is a fragment of a concat message*/ | |
3312 if (msg_info.concat_status == MFW_SMS_CONC_PART) | |
3313 { ATB_string_SetChar(&main_text, ATB_string_Length(&main_text),(USHORT)":"); | |
3314 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3315 temp_text.dcs = ATB_DCS_UNICODE; | |
3316 else | |
3317 temp_text.dcs = ATB_DCS_ASCII; | |
3318 /*append "Incomplete Message" onto display string*/ | |
3319 temp_text.data = (UBYTE*)MmiRsrcGetText(TxtIncompleteMessage); | |
3320 ATB_string_Length(&temp_text); | |
3321 ATB_string_Concat(&main_text, &temp_text); | |
3322 } | |
3323 #endif | |
3324 } | |
3325 else | |
3326 #ifdef NEW_EDITOR | |
3327 /*SPR 2530, if new editor use nice string-handling functions*/ | |
3328 { /*if invalid message just copy "Invalid message" into main display string*/ | |
3329 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3330 temp_text.dcs = ATB_DCS_UNICODE; | |
3331 else | |
3332 temp_text.dcs = ATB_DCS_ASCII; | |
3333 temp_text.data = (UBYTE*)MmiRsrcGetText(TxtInvalidMessage); | |
3334 ATB_string_Length(&temp_text); | |
3335 ATB_string_Concat(&main_text, &temp_text); | |
3336 } | |
3337 #endif | |
3338 sms_change_read_status(SmsMt->index); | |
3339 break; | |
3340 | |
3341 case MMI_SMS_CB: | |
3342 | |
3343 SmsCb = (T_MFW_SMS_CB *)data->sms_editor_data->sms_info; | |
3344 | |
3345 break; | |
3346 | |
3347 } | |
3348 | |
3349 /* | |
3350 Actually we have 2 different size of messages: | |
3351 1) SMS_MT with MAX_EDITOR_LEN because of the DATE,TIME,NUMBER | |
3352 2) SMS_MO with MAX_MSG_LEN, just the message itself | |
3353 */ | |
3354 | |
3355 /* SPR#1428 - SH - New Editor changes */ | |
3356 #ifdef NEW_EDITOR | |
3357 AUI_edit_SetDefault(&sms_editor_info); | |
3358 | |
3359 /* Include title for colour display */ | |
3360 #ifdef COLOURDISPLAY | |
3361 AUI_edit_SetDisplay(&sms_editor_info, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT); | |
3362 #else /* COLOURDISPLAY */ | |
3363 AUI_edit_SetDisplay(&sms_editor_info, ZONE_FULL_SK_SCROLL, COLOUR_EDITOR, EDITOR_FONT); | |
3364 #endif /* COLOURDISPLAY */ | |
3365 AUI_edit_SetMode(&sms_editor_info, ED_MODE_ALPHA | ED_MODE_READONLY, ED_CURSOR_NONE); | |
3366 AUI_edit_SetEvents(&sms_editor_info, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsRead_R_TEXT_editor_cb); | |
3367 | |
3368 //x0pleela 08 Feb, 2006 DR: OMAPS00059261 | |
3369 //Replacing MT_STATUS_RPT with MFW_SMS_STATRPT as MT_STATUS_RPT is removed | |
3370 | |
3371 //x0pleela 01 Feb, 2006 DR: OMAPS00059261 | |
3372 //Made changes as per review comments | |
3373 | |
3374 //x0pleela 30 Jan, 2006 DR: OMAPS00059261 | |
3375 //Displaying the LSK as "Delete" for MT Staus report and "Options" for normal MT Text message | |
3376 if (SmsMt->sms_msg_type EQ MFW_SMS_STATRPT) | |
3377 AUI_edit_SetTextStr(&sms_editor_info, TxtDelete, TxtSoftBack, TxtMessage, NULL); | |
3378 else | |
3379 AUI_edit_SetTextStr(&sms_editor_info, TxtSoftOptions, TxtSoftBack, TxtMessage, NULL); | |
3380 | |
3381 /* Check if concatenated sms is activated */ | |
3382 | |
3383 if (read_status EQ MMI_SMS_MO) | |
3384 size = MAX_MSG_LEN; | |
3385 else | |
3386 size = MAX_EDITOR_LEN; | |
3387 /*SPR 2530, copy display screen to editor, alphabet depends on current lanaguage*/ | |
3388 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
3389 { | |
3390 /* Unicode SMS message */ | |
3391 AUI_edit_SetBuffer(&sms_editor_info, ATB_DCS_UNICODE, (UBYTE *)&sms_text_ascii[0],size/2); | |
3392 } | |
3393 else | |
3394 { | |
3395 /* ASCII SMS message */ | |
3396 AUI_edit_SetBuffer(&sms_editor_info, ATB_DCS_ASCII, (UBYTE *)&sms_text_ascii[0],size); | |
3397 } | |
3398 | |
3399 data->editor_win = AUI_edit_Start(win,&sms_editor_info); /* start the editor */ | |
3400 | |
3401 #else /* NEW_EDITOR */ | |
3402 | |
3403 SmsSend_loadEditDefault(&sms_editor_info); | |
3404 sms_editor_info.editor_attr.text = (char *)sms_text_ascii; | |
3405 | |
3406 if (read_status EQ MMI_SMS_MO) | |
3407 sms_editor_info.editor_attr.size = MAX_MSG_LEN; | |
3408 else | |
3409 sms_editor_info.editor_attr.size = MAX_EDITOR_LEN; | |
3410 sms_editor_info.min_enter = 0; | |
3411 | |
3412 //x0pleela 08 Feb, 2006 DR: OMAPS00059261 | |
3413 //Replacing MT_STATUS_RPT with MFW_SMS_STATRPT as MT_STATUS_RPT is removed | |
3414 | |
3415 //x0pleela 30 Jan, 2006 DR: OMAPS00059261 | |
3416 //Displaying the LSK as "Delete" for MT Staus report and "Options" for normal MT Text message | |
3417 if (SmsMt->sms_msg_type EQ MFW_SMS_STATRPT ) | |
3418 { | |
3419 sms_editor_info.LeftSoftKey = TxtDelete; | |
3420 sms_editor_info.AlternateLeftSoftKey = TxtDelete; | |
3421 } | |
3422 //x0pleela 01 Feb, 2006 DR: OMAPS00059261 | |
3423 //Made changes as per review comments | |
3424 else //if( SmsMt->sms_msg_type EQ MT_TEXT ) | |
3425 { | |
3426 sms_editor_info.LeftSoftKey = TxtSoftOptions; | |
3427 sms_editor_info.AlternateLeftSoftKey = TxtSoftOptions; | |
3428 } | |
3429 sms_editor_info.RightSoftKey = TxtSoftBack; | |
3430 sms_editor_info.Identifier = 0 ; | |
3431 sms_editor_info.destroyEditor = FALSE ; | |
3432 sms_editor_info.Callback = (T_EDIT_CB)SmsRead_R_TEXT_editor_cb; | |
3433 sms_editor_info.mode = READ_ONLY_MODE; | |
3434 | |
3435 data->editor_win = editor_start(win,&sms_editor_info); /* start the editor */ | |
3436 #endif /* NEW_EDITOR */ | |
3437 | |
3438 | |
3439 if (info_win){ | |
3440 SEND_EVENT(info_win,DIALOG_DESTROY,0,0 ); | |
3441 info_win = 0; | |
3442 } | |
3443 | |
3444 | |
3445 break; | |
3446 } | |
3447 case E_BACK: | |
3448 l_parent = data->parent; | |
3449 l_id = data->id; | |
3450 /* The editor has sent an E_BACK event, we return to the previous window (E_RETURN) */ | |
3451 SEND_EVENT (l_parent, E_RETURN, l_id, NULL); | |
3452 SmsRead_R_TEXTEDT2_destroy(data->win); | |
3453 break; | |
3454 | |
3455 case E_ABORT: | |
3456 case E_EXIT: | |
3457 l_parent = data->parent; | |
3458 l_id = data->id; | |
3459 SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ | |
3460 SmsRead_R_TEXTEDT2_destroy(data->win); | |
3461 break; | |
3462 | |
3463 default: | |
3464 break; | |
3465 } | |
3466 | |
3467 FREE_MEMORY((void*)sms_text_buffer,MAX_EDITOR_HEADER_LENGTH); | |
3468 return; | |
3469 } | |
3470 | |
3471 /******************************************************************************* | |
3472 | |
3473 $Function: SmsRead_R_TEXTEDT2_win_cb | |
3474 | |
3475 $Description: Window callback function of the SMS editor window (display of | |
3476 the text of one SMS). | |
3477 | |
3478 $Returns: execution status | |
3479 | |
3480 $Arguments: w - mfw window handle | |
3481 e - event id | |
3482 value - unique id | |
3483 parameter - optional data. | |
3484 *******************************************************************************/ | |
3485 | |
3486 static int SmsRead_R_TEXTEDT2_win_cb (MfwEvt e, MfwWin *w) | |
3487 /* window event handler */ | |
3488 { | |
3489 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_win_cb()"); | |
3490 | |
3491 switch (e) | |
3492 { | |
3493 case MfwWinVisible: /* window is visible */ | |
3494 //JVJE displaySoftKeys(TxtSoftSelect,TxtSoftBack); | |
3495 break; | |
3496 case MfwWinFocussed: /* input focus / selected */ | |
3497 case MfwWinDelete: /* window will be deleted */ | |
3498 default: | |
3499 return MFW_EVENT_REJECTED; | |
3500 } | |
3501 return MFW_EVENT_CONSUMED; | |
3502 } | |
3503 | |
3504 /******************************************************************************* | |
3505 | |
3506 $Function: SmsRead_R_TEXTEDT2_smslist_cb | |
3507 | |
3508 $Description: Callback function of the SMS editor window (editor itself). | |
3509 | |
3510 $Returns: none | |
3511 | |
3512 $Arguments: Parent - parent window. | |
3513 ListData - Menu item list | |
3514 *******************************************************************************/ | |
3515 | |
3516 void SmsRead_R_TEXTEDT2_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData) | |
3517 { | |
3518 T_MFW_WIN * win_data = ((T_MFW_HDR *)Parent)->data; | |
3519 T_SMSREAD_R * data = (T_SMSREAD_R *)win_data->user; | |
3520 | |
3521 T_MFW_HND * l_parent; | |
3522 SHORT l_id; | |
3523 | |
3524 if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR) | |
3525 || (ListData->Reason EQ LISTS_REASON_HANGUP)) | |
3526 { | |
3527 l_parent = data->parent; | |
3528 l_id = data->id; | |
3529 SmsRead_R_destroy(data->win); | |
3530 //The editor has sent an back event, we return to the previous window (E_RETURN) | |
3531 SEND_EVENT (l_parent, E_RETURN, l_id, NULL); | |
3532 } | |
3533 } | |
3534 | |
3535 /******************************************************************************* | |
3536 | |
3537 $Function: check_assoc_name | |
3538 | |
3539 $Description: This function search if a phone number corresponds to any name in phonebook | |
3540 or to the voice mailbox or to the SMS center | |
3541 BE CAREFUL it allocates memory for the name, that has to be freed by the caller | |
3542 It returns the length of the associated name if found, else length is 0 and name is NULL | |
3543 | |
3544 $Returns: string length | |
3545 | |
3546 $Arguments: name - string | |
3547 sms_addr - phonenumber string. | |
3548 *******************************************************************************/ | |
3549 | |
3550 UBYTE check_assoc_name(char *name, T_MFW_SMS_ADDR sms_addr) | |
3551 { | |
3552 // MZ T_MFW_SMS_STAT pb_entry; | |
3553 T_MFW_SMS_ADDR pb_entry; | |
3554 USHORT i; | |
3555 | |
3556 | |
3557 | |
3558 // TBD: add international numbers management | |
3559 | |
3560 // Voice, fax... mailboxes data | |
3561 | |
3562 // USHORT max_rcd; // RAVI | |
3563 char mail_number[PHB_MAX_LEN + 1]; | |
3564 char mail_alpha[10]; // size hard coded in pcm.h | |
3565 UBYTE nlen; | |
3566 | |
3567 name = NULL; | |
3568 | |
3569 // First: look in phonebook | |
3570 | |
3571 if (bookFindNameInPhonebook((const char*)&sms_addr.number[0], (T_MFW_PHB_ENTRY*)&pb_entry)) | |
3572 { | |
3573 // A name has been found | |
3574 if ((name = (char*)ALLOC_MEMORY(strlen(pb_entry.tag) + 1)) != NULL) | |
3575 { | |
3576 /*Mc , unicode support*/ | |
3577 #ifdef NO_ASCIIZ | |
3578 memcpy(name, pb_entry.tag, pb_entry.len); | |
3579 return pb_entry.len; | |
3580 #else | |
3581 strcpy(name, pb_entry.tag); | |
3582 return strlen(name); | |
3583 #endif | |
3584 } | |
3585 } | |
3586 | |
3587 // Then the different mailboxes (voice, fax, data...) | |
3588 for (i = MFW_MB_LINE1; i <= MFW_MB_DATA; i++) | |
3589 { | |
3590 | |
3591 { | |
3592 cmhPHB_getAdrStr(mail_number, PHB_MAX_LEN - 1, FFS_flashData.mbn_Num, FFS_flashData.mbn_len); | |
3593 | |
3594 if (strcmp(sms_addr.number, mail_number) EQ 0) | |
3595 { | |
3596 // If the same number then we get the alpha identifier | |
3597 cmhPHB_getMfwTagNt ( FFS_flashData.mbn_AlphId, 10, (UBYTE*)mail_alpha, &nlen ); | |
3598 mail_alpha[nlen] = '\0'; | |
3599 | |
3600 if ((name = (char*)ALLOC_MEMORY(strlen(mail_alpha) + 1)) != NULL) | |
3601 { | |
3602 /*MC, yet more unicode support*/ | |
3603 #ifdef NO_ASCIIZ | |
3604 memcpy(name, mail_alpha, nlen); | |
3605 return nlen; | |
3606 #else | |
3607 strcpy(name, mail_alpha); | |
3608 return strlen(name); | |
3609 #endif | |
3610 } | |
3611 } | |
3612 } | |
3613 } | |
3614 return 1; // RAVI | |
3615 } | |
3616 | |
3617 /******************************************************************************* | |
3618 | |
3619 $Function: SmsRead_R_TEXTEDT2_editor_cb | |
3620 | |
3621 $Description: Callback function for the text editor. | |
3622 | |
3623 $Returns: void | |
3624 | |
3625 $Arguments: win - current window. | |
3626 Identifier - unique id | |
3627 Reason - event id | |
3628 *******************************************************************************/ | |
3629 | |
3630 void SmsRead_R_TEXTEDT2_editor_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) | |
3631 { | |
3632 | |
3633 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; | |
3634 T_SMSREAD_R_TEXTEDT2 * data = (T_SMSREAD_R_TEXTEDT2 *)win_data->user; | |
3635 | |
3636 TRACE_FUNCTION("SmsRead_R_TEXTEDT2_editor_cb"); | |
3637 switch (Reason) | |
3638 { | |
3639 case INFO_KCD_LEFT: | |
3640 case INFO_KCD_RIGHT: | |
3641 case INFO_KCD_HUP: | |
3642 SEND_EVENT (data->parent, E_RETURN, Identifier, NULL); /* forward event to parent */ | |
3643 break; | |
3644 default: | |
3645 break; | |
3646 } | |
3647 } | |
3648 | |
3649 /******************************************************************************* | |
3650 | |
3651 $Function: SmsRead_FindNextNumber_cb | |
3652 | |
3653 $Description: Exec callback function for searching the SMS text message. | |
3654 | |
3655 $Returns: none | |
3656 | |
3657 $Arguments: win - window handler | |
3658 event - mfw event | |
3659 value -optional id | |
3660 parameter - optional data. | |
3661 | |
3662 *******************************************************************************/ | |
3663 void SmsRead_FindNextNumber_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) | |
3664 { | |
3665 | |
3666 T_MFW_PHB_ENTRY pb_data; | |
3667 | |
3668 switch (Reason) | |
3669 { | |
3670 case INFO_KCD_RIGHT: | |
3671 case INFO_KCD_CLEAR: | |
3672 | |
3673 break; | |
3674 case INFO_KCD_LEFT: | |
3675 | |
3676 // Check for numbers in SMS text, check for '+' . | |
3677 | |
3678 if(Search_forNextNumber(&SmsData)) | |
3679 { | |
3680 | |
3681 if (bookFindNameInPhonebook((const char*)&SmsData.NumberBuffer[0], &pb_data) ) | |
3682 { | |
3683 //Display the tag and number dialog. | |
3684 #ifdef NO_ASCIIZ | |
3685 /* SPR888 - SH - parent_data->parent changed to win */ | |
3686 smsRead_NumberName_info_screen(win,(void *)&SmsData, (char*)pb_data.name.data); | |
3687 #else | |
3688 /* SPR888 - SH - parent_data->parent changed to win */ | |
3689 smsRead_NumberName_info_screen(win,(void *)&SmsData, (char*)pb_data.name); | |
3690 #endif | |
3691 } | |
3692 else | |
3693 { | |
3694 /* SPR888 - SH - parent_data->parent changed to win */ | |
3695 smsRead_NumberName_info_screen(win,(void *)&SmsData,NULL); | |
3696 } | |
3697 } | |
3698 break; | |
3699 case INFO_KCD_OFFHOOK: | |
3700 callNumber(SmsData.NumberBuffer); | |
3701 break; | |
3702 | |
3703 default: | |
3704 TRACE_EVENT(" >>> INFO Default "); | |
3705 //return MFW_EVENT_REJECTED; | |
3706 break; | |
3707 } | |
3708 | |
3709 } | |
3710 | |
3711 /******************************************************************************* | |
3712 | |
3713 $Function: smsRead_NumberName_info_screen | |
3714 | |
3715 $Description: Display the number and name of numbers found in the received SMS text. | |
3716 | |
3717 $Returns: window handle | |
3718 | |
3719 $Arguments: win - current window. | |
3720 UserData - Sms data info | |
3721 *******************************************************************************/ | |
3722 | |
3723 static MfwHnd smsRead_NumberName_info_screen(MfwHnd win,T_SmsUserData *UserData, char* nameTag) | |
3724 { | |
3725 | |
3726 T_DISPLAY_DATA DisplayInfo; | |
3727 TRACE_FUNCTION("smsRead_NumberName_info_screen() "); | |
3728 | |
3729 dlg_initDisplayData_TextStr( &DisplayInfo, TxtSoftNext, TxtSoftBack, nameTag, (char*)UserData->NumberBuffer, COLOUR_STATUS); | |
3730 dlg_initDisplayData_events( &DisplayInfo, (T_VOID_FUNC)SmsRead_FindNextNumber_cb, FOREVER, KEY_ALL ); | |
3731 | |
3732 TRACE_EVENT(">>>>> Display Information Screen "); | |
3733 return info_dialog(win, &DisplayInfo); | |
3734 | |
3735 } | |
3736 | |
3737 /******************************************************************************* | |
3738 | |
3739 $Function: Search_forNextNumber | |
3740 | |
3741 $Description: Search through the SMS text and find a telephone number, the number | |
3742 may start with the '+' prefix. | |
3743 | |
3744 $Returns: Boolean | |
3745 | |
3746 $Arguments: UserData - SMS data info | |
3747 *******************************************************************************/ | |
3748 static BOOL Search_forNextNumber(T_SmsUserData *UserData) | |
3749 { | |
3750 /* SPR888 - SH - Rewritten, old function below */ | |
3751 /* Use search_index so we can start looking where we left off last time. | |
3752 Set to 0 in SMSRead_R_OPTExeStoreNumber */ | |
3753 | |
3754 int sms_length; | |
3755 int number_index; | |
3756 char number_buffer[NUMBER_LENGTH*2+4]; | |
3757 char *sms_buffer; | |
3758 char character; | |
3759 UBYTE found_status; | |
3760 | |
3761 TRACE_FUNCTION("Search_forNextNumber()"); | |
3762 sms_buffer = (char*)UserData->TextBuffer; | |
3763 #ifdef NO_ASCIIZ | |
3764 if (sms_buffer[0] == 0x80) | |
3765 { | |
3766 #ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */ | |
3767 sms_length = ATB_string_UCLength((U16*)sms_buffer)*sizeof(USHORT); | |
3768 #else /* NEW_EDITOR */ | |
3769 sms_length = strlenUnicode((U16*)sms_buffer); | |
3770 #endif /* NEW_EDITOR */ | |
3771 } | |
3772 else | |
3773 { | |
3774 sms_length = strlen(sms_buffer); | |
3775 } | |
3776 #else /* NO_ASCIIZ */ | |
3777 sms_length = strlen(sms_buffer); | |
3778 #endif /* NO_ASCIIZ */ | |
3779 | |
3780 number_index = 0; | |
3781 found_status = 0; | |
3782 | |
3783 memset (number_buffer, '\0', NUMBER_LENGTH*2+4); | |
3784 | |
3785 | |
3786 while (search_index<sms_length && found_status<2 && number_index<NUMBER_LENGTH*2+4) | |
3787 { | |
3788 character = sms_buffer[search_index]; | |
3789 | |
3790 search_index++; | |
3791 #ifdef NO_ASCIIZ | |
3792 if (character=='+' || ( character>='0' && character<='9' ) || (character==0)) | |
3793 #else | |
3794 if (character=='+' || ( character>='0' && character<='9' ) ) | |
3795 #endif | |
3796 { if (character != 0) /*MC, only copy non-Null chars*/ | |
3797 number_buffer[number_index++] = character; | |
3798 if (found_status==0) | |
3799 { | |
3800 found_status = 1; /* Found start of number */ | |
3801 } | |
3802 } | |
3803 else | |
3804 { | |
3805 if (found_status==1) | |
3806 found_status = 2; /* Have reached end of number */ | |
3807 } | |
3808 TRACE_EVENT_P1("Extract number string:%s", number_buffer); | |
3809 } | |
3810 | |
3811 if(strlen(number_buffer) > 10) | |
3812 | |
3813 { | |
3814 | |
3815 memcpy((char*)UserData->NumberBuffer, number_buffer, sizeof(UserData->NumberBuffer)); | |
3816 return TRUE; | |
3817 } | |
3818 | |
3819 return FALSE; | |
3820 } | |
3821 | |
3822 | |
3823 /* api Store number for calling when reading SMS - 04/03/2002 | |
3824 */ | |
3825 | |
3826 /******************************************************************************* | |
3827 | |
3828 $Function: Search_forNextNumber | |
3829 | |
3830 $Description: Search through the SMS text and find a telephone number, the number | |
3831 may start with the '+' prefix. | |
3832 | |
3833 $Returns: Boolean | |
3834 | |
3835 $Arguments: UserData - SMS data info | |
3836 *******************************************************************************/ | |
3837 void SmsRead_StoreNumber(void) | |
3838 { | |
3839 T_MFW_HND win = mfwParent(mfw_header()); | |
3840 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; | |
3841 T_SMSREAD_R_OPT * data = (T_SMSREAD_R_OPT *)win_data->user; | |
3842 | |
3843 T_MFW_HDR * parent = data->parent; | |
3844 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; | |
3845 T_SMSREAD_R_TEXTEDT2 * parent_data = (T_SMSREAD_R_TEXTEDT2 *)win_data2->user; | |
3846 T_MFW_PHB_ENTRY pb_data; | |
3847 | |
3848 TRACE_FUNCTION("SmsRead_StoreNumber"); | |
3849 | |
3850 TRACE_EVENT_P1("TON = %d",parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.ton); | |
3851 /* Marcus: Issue 1489: 13/12/2002: Start */ | |
3852 if(parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.ton == MFW_TON_INTERNATIONAL) | |
3853 { | |
3854 if(parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number[0] == '+') | |
3855 { | |
3856 strcpy((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
3857 } | |
3858 else | |
3859 { | |
3860 strcpy((char *)SmsData.NumberBuffer,"+"); | |
3861 strncat((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number,sizeof(SmsData.NumberBuffer)-2); | |
3862 } | |
3863 } | |
3864 else | |
3865 { | |
3866 | |
3867 TRACE_EVENT_P1("Number = %s",parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
3868 strcpy((char *)SmsData.NumberBuffer,(char *)parent_data->sms_editor_data->sms_info->sms_mt.orig_addr.number); | |
3869 } | |
3870 /* Marcus: Issue 1489: 13/12/2002: End */ | |
3871 /*MC, unicode support*/ | |
3872 memcpy((char*)pb_data.number, (char*)SmsData.NumberBuffer, sizeof(pb_data.number)); | |
3873 | |
3874 | |
3875 SmsRead_R_TEXTEDT2_destroy(message_win); | |
3876 /* Destroy the Options Menu and text editor.before starting the Send Editor.*/ | |
3877 SmsRead_R_OPT_destroy(option_mnu_win); | |
3878 | |
3879 /*SPR 2686 destroy the SMS read window to free memory*/ | |
3880 /*destroy the built list window*/ | |
3881 listsDestroy(list_win); | |
3882 list_win=0; | |
3883 /*destroy the main control window*/ | |
3884 if (sms_read_win)/*check window exists before destroying it*/ | |
3885 { | |
3886 SmsRead_R_destroy(sms_read_win); | |
3887 sms_read_win = NULL; | |
3888 } | |
3889 | |
3890 callNumber(pb_data.number); | |
3891 | |
3892 } | |
3893 | |
3894 //x0035544 Mar 23, 2006 DR:OMAPS00047813 | |
3895 /******************************************************************************* | |
3896 | |
3897 $Function: Search_forNumberInSMS | |
3898 | |
3899 $Description: Search through the SMS text and find the numbers | |
3900 | |
3901 $Returns: void | |
3902 | |
3903 $Arguments: UserData - SMS data info | |
3904 *******************************************************************************/ | |
3905 void Search_forNumberInSMS(T_SmsUserData *UserData) | |
3906 { | |
3907 int num_row, num_col, i; | |
3908 int len, sms_length = 0; | |
3909 char character; | |
3910 char *sms_buffer, *sender_num; | |
3911 BOOL mesg_end=FALSE; | |
3912 | |
3913 TRACE_FUNCTION("Search_forNumberInSMS()"); | |
3914 | |
3915 sms_buffer = (char*)UserData->TextBuffer; | |
3916 sender_num = (char*)UserData->NumberBuffer; | |
3917 | |
3918 #ifdef NO_ASCIIZ | |
3919 if (sms_buffer[0] == 0x80) | |
3920 { | |
3921 #ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */ | |
3922 sms_length = ATB_string_UCLength((U16*)sms_buffer)*sizeof(USHORT); | |
3923 #else /* NEW_EDITOR */ | |
3924 sms_length = strlenUnicode((U16*)sms_buffer); | |
3925 #endif /* NEW_EDITOR */ | |
3926 } | |
3927 else | |
3928 { | |
3929 sms_length = strlen(sms_buffer); | |
3930 } | |
3931 #else /* NO_ASCIIZ */ | |
3932 sms_length = strlen(sms_buffer); | |
3933 #endif /* NO_ASCIIZ */ | |
3934 sms_length--; | |
3935 len= num_row=num_col=0; | |
3936 smsread_num_ctr =0; | |
3937 num_buffer = (char**)ALLOC_MEMORY(sizeof(char*)*MAX_NUMBER_SIZE); | |
3938 if (num_buffer == NULL) | |
3939 { | |
3940 TRACE_EVENT("sms number list alloc failed"); | |
3941 return; | |
3942 } | |
3943 | |
3944 for(i=0; i<MAX_NUMBER_SIZE; i++) | |
3945 num_buffer[i] = (char*)ALLOC_MEMORY(sizeof(char)*NUMBER_LENGTH); | |
3946 if (num_buffer[i] == NULL) | |
3947 { | |
3948 TRACE_EVENT(" sms number string alloc failed"); | |
3949 return; | |
3950 } | |
3951 | |
3952 | |
3953 while (len <= sms_length) | |
3954 { | |
3955 character = sms_buffer[len]; | |
3956 | |
3957 if(len == sms_length) | |
3958 { | |
3959 mesg_end = TRUE; | |
3960 } | |
3961 | |
3962 #ifdef NO_ASCIIZ | |
3963 if (character=='+' || ( character>='0' && character<='9' ) || (character==0)) | |
3964 #else | |
3965 if (character=='+' || ( character>='0' && character<='9' ) ) | |
3966 #endif | |
3967 { | |
3968 if (character != 0) /*MC, only copy non-Null chars*/ | |
3969 { | |
3970 if(num_col <= NUMBER_LENGTH) | |
3971 { | |
3972 num_buffer[num_row][num_col] = character; | |
3973 num_col++; | |
3974 } | |
3975 if(mesg_end && (strlen(num_buffer[num_row]) >= MIN_NUM_LENGTH))//copy if number is at end of the message | |
3976 { | |
3977 smsread_num_ctr++; | |
3978 num_row++; | |
3979 } | |
3980 } | |
3981 } | |
3982 else | |
3983 { | |
3984 if(num_col != 0 ) | |
3985 { | |
3986 num_buffer[num_row][num_col] = '\0'; | |
3987 if(strlen(num_buffer[num_row]) < MIN_NUM_LENGTH ) | |
3988 { | |
3989 num_col=0; | |
3990 } | |
3991 else | |
3992 { | |
3993 smsread_num_ctr++; | |
3994 num_row++; | |
3995 if( num_row >= MAX_NUMBER_SIZE) | |
3996 break; | |
3997 num_col = 0; | |
3998 } | |
3999 } | |
4000 } | |
4001 len++; | |
4002 } | |
4003 | |
4004 if( num_row < 10 )//copy the sender number | |
4005 { | |
4006 memcpy((char*)num_buffer[num_row], (char*)sender_num, NUMBER_LENGTH); | |
4007 smsread_num_ctr++; | |
4008 } | |
4009 | |
4010 return ; | |
4011 } | |
4012 | |
4013 //Mar 23, 2006 DR:OMAPS00047813 x0035544 | |
4014 /******************************************************************************* | |
4015 | |
4016 $Function: smsread_numlist_win_cb | |
4017 | |
4018 $Description: Window event handler | |
4019 | |
4020 $Returns: MFW_EVENT_REJECTED: | |
4021 MFW_EVENT_CONSUMED: | |
4022 | |
4023 $Arguments: | |
4024 | |
4025 *******************************************************************************/ | |
4026 static int smsread_numlist_win_cb (MfwEvt e, MfwWin *w) | |
4027 { | |
4028 TRACE_FUNCTION ("smsread_numlist_win_cb()"); | |
4029 switch (e) | |
4030 { | |
4031 case MfwWinVisible: /* window is visible */ | |
4032 break; | |
4033 case MfwWinFocussed: /* input focus / selected */ | |
4034 case MfwWinDelete: /* window will be deleted */ | |
4035 | |
4036 default: | |
4037 return MFW_EVENT_REJECTED; | |
4038 } | |
4039 return MFW_EVENT_CONSUMED; | |
4040 } | |
4041 | |
4042 //Mar 23, 2006 DR:OMAPS00047813 x0035544 | |
4043 /******************************************************************************* | |
4044 | |
4045 $Function: SmsRead_BuildNumList_Menu | |
4046 | |
4047 $Description: creates dynamic menu | |
4048 | |
4049 $Returns: | |
4050 | |
4051 $Arguments: | |
4052 | |
4053 *******************************************************************************/ | |
4054 static T_MFW_HND SmsRead_BuildNumList_Menu(T_MFW_HND parent_window) | |
4055 { | |
4056 T_SMSREAD_R * data = (T_SMSREAD_R *)mfwAlloc(sizeof (T_SMSREAD_R)); | |
4057 T_MFW_WIN * win; | |
4058 | |
4059 TRACE_FUNCTION ("SmsRead_BuildNumList_Menu"); | |
4060 | |
4061 /* | |
4062 * Create window handler | |
4063 */ | |
4064 | |
4065 data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)smsread_numlist_win_cb); | |
4066 if (data->win EQ NULL) | |
4067 { | |
4068 FREE_MEMORY( (void *)data, sizeof( T_SMSREAD_R ) ); | |
4069 return NULL; | |
4070 } | |
4071 | |
4072 TRACE_EVENT("list holder window created: " ); | |
4073 /* | |
4074 * connect the dialog data to the MFW-window | |
4075 */ | |
4076 | |
4077 data->mmi_control.dialog = (T_DIALOG_FUNC)smsread_numlist_exec_cb; | |
4078 data->mmi_control.data = data; | |
4079 win = ((T_MFW_HDR *)data->win)->data; | |
4080 win->user = (void *)data; | |
4081 data->parent = parent_window; | |
4082 winShow(data->win); | |
4083 /* | |
4084 * return window handle | |
4085 */ | |
4086 | |
4087 return data->win; | |
4088 } | |
4089 | |
4090 //Mar 23, 2006 DR:OMAPS00047813 x0035544 | |
4091 /******************************************************************************* | |
4092 | |
4093 $Function: smsread_numlist_exec_cb | |
4094 | |
4095 $Description: callback function | |
4096 | |
4097 $Returns: | |
4098 | |
4099 $Arguments: | |
4100 | |
4101 *******************************************************************************/ | |
4102 void smsread_numlist_exec_cb (T_MFW_HND win, USHORT event) | |
4103 { | |
4104 T_MFW_WIN * win_data; | |
4105 T_SMSREAD_R * data; | |
4106 | |
4107 /* List is complete so present menu. */ | |
4108 USHORT i; | |
4109 | |
4110 TRACE_FUNCTION("smsread_numlist_exec_cb"); | |
4111 | |
4112 | |
4113 win_data = ((T_MFW_HDR *) win)->data; | |
4114 data = (T_SMSREAD_R *)win_data->user; | |
4115 | |
4116 switch (event) | |
4117 { | |
4118 case E_INIT: | |
4119 data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); | |
4120 | |
4121 if(data->menu_list_data == 0) | |
4122 { | |
4123 TRACE_EVENT("Failed memory alloc 1 "); | |
4124 return; | |
4125 } | |
4126 /*SPR 2686, only allocate memory for the number of messages displayed*/ | |
4127 data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( smsread_num_ctr * sizeof(T_MFW_MNU_ITEM) );//JVJE | |
4128 | |
4129 if(data->menu_list_data->List == 0) | |
4130 { | |
4131 TRACE_EVENT("Failed memory alloc 2"); | |
4132 return; | |
4133 } | |
4134 | |
4135 for (i = 0; i < smsread_num_ctr; i++) | |
4136 { | |
4137 mnuInitDataItem(&data->menu_list_data->List[i]); | |
4138 data->menu_list_data->List[i].str = (char *)num_buffer[i]; | |
4139 TRACE_EVENT_P1("Menu Tags:%s", data->menu_list_data->List[i].str); | |
4140 data->menu_list_data->List[i].flagFunc = item_flag_none; | |
4141 } | |
4142 | |
4143 data->menu_list_data->ListLength =smsread_num_ctr; | |
4144 data->menu_list_data->ListPosition = 1; | |
4145 data->menu_list_data->CursorPosition = 1; | |
4146 data->menu_list_data->SnapshotSize =smsread_num_ctr; | |
4147 data->menu_list_data->Font = 0; | |
4148 data->menu_list_data->LeftSoftKey = TxtSoftSelect; | |
4149 /*NM p032*/ | |
4150 if(test_sim EQ TRUE) | |
4151 data->menu_list_data->RightSoftKey = TxtNull; | |
4152 else | |
4153 data->menu_list_data->RightSoftKey = TxtSoftBack; | |
4154 | |
4155 data->menu_list_data->KeyEvents = KEY_ALL; | |
4156 data->menu_list_data->Reason = 0; | |
4157 data->menu_list_data->Strings = TRUE; | |
4158 data->menu_list_data->Attr = (MfwMnuAttr*)&menuSearchNumListAttr; | |
4159 data->menu_list_data->autoDestroy = FALSE; | |
4160 | |
4161 /* Create the dynamic menu window */ | |
4162 listDisplayListMenu(win, data->menu_list_data, (ListCbFunc_t)SmsRead_numlist_cb ,0); | |
4163 break; | |
4164 default: | |
4165 break; | |
4166 } | |
4167 | |
4168 } | |
4169 | |
4170 //Mar 23, 2006 DR:OMAPS00047813 x0035544 | |
4171 /******************************************************************************* | |
4172 | |
4173 $Function: SmsRead_numlist_cb | |
4174 | |
4175 $Description: destroy lists and menu in case of back softkey or menu exit | |
4176 | |
4177 $Returns: | |
4178 | |
4179 $Arguments: | |
4180 | |
4181 *******************************************************************************/ | |
4182 static void SmsRead_numlist_cb(T_MFW_HND Parent, ListMenuData * ListData) | |
4183 { | |
4184 T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data; | |
4185 T_SMSREAD_R *data = (T_SMSREAD_R *)win_data->user; | |
4186 char *pb_number; | |
4187 int i; | |
4188 | |
4189 TRACE_FUNCTION ("SmsRead_numlist_cb()"); | |
4190 | |
4191 | |
4192 if ((ListData->Reason EQ LISTS_REASON_BACK) || | |
4193 (ListData->Reason EQ LISTS_REASON_CLEAR) || | |
4194 (ListData->Reason EQ LISTS_REASON_HANGUP)) | |
4195 { | |
4196 /* | |
4197 ** Destroy the window --- Not sure if this is required! ... leave it out for now | |
4198 */ | |
4199 listsDestroy(ListData->win); | |
4200 | |
4201 /* | |
4202 ** Free the memory set aside for ALL the devices to be listed. | |
4203 */ | |
4204 for(i=0; i<MAX_NUMBER_SIZE;i++) | |
4205 { | |
4206 FREE_MEMORY((U8*)num_buffer[i], sizeof(char)*NUMBER_LENGTH); | |
4207 num_buffer[i] = NULL; | |
4208 } | |
4209 | |
4210 /*deallocate memory for the array of pointer to numbers*/ | |
4211 FREE_MEMORY((U8*)num_buffer, sizeof(char*)*MAX_NUMBER_SIZE); | |
4212 | |
4213 if (data->menu_list_data->List != NULL) | |
4214 { | |
4215 FREE_MEMORY ((void *)data->menu_list_data->List, (U16)((data->menu_list_data->ListLength) * | |
4216 sizeof(T_MFW_MNU_ITEM))); | |
4217 } | |
4218 if (data->menu_list_data != NULL) | |
4219 { | |
4220 FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); | |
4221 } | |
4222 | |
4223 SmsRead_numlist_destroy(data->win); | |
4224 | |
4225 | |
4226 | |
4227 } | |
4228 | |
4229 else if(ListData->Reason EQ LISTS_REASON_SELECT) | |
4230 { | |
4231 pb_number = ListData->List[ListData->ListPosition].str; | |
4232 callNumber((UBYTE*)pb_number); | |
4233 | |
4234 } | |
4235 | |
4236 return; | |
4237 } | |
4238 | |
4239 //Mar 23, 2006 DR:OMAPS00047813 x0035544 | |
4240 /******************************************************************************* | |
4241 | |
4242 $Function: SmsRead_numlist_destroy | |
4243 | |
4244 $Description: Destroy the Extr Number window. | |
4245 | |
4246 $Returns: none | |
4247 | |
4248 $Arguments: own_window - window handler | |
4249 | |
4250 *******************************************************************************/ | |
4251 | |
4252 static void SmsRead_numlist_destroy(MfwHnd own_window) | |
4253 { | |
4254 T_MFW_WIN * win_data = ((T_MFW_HDR *)own_window)->data; | |
4255 T_SMSREAD_R * data = (T_SMSREAD_R *)win_data->user; | |
4256 | |
4257 TRACE_FUNCTION ("SmsRead_numlist_destroy"); | |
4258 | |
4259 if (own_window == NULL) | |
4260 { | |
4261 return; | |
4262 } | |
4263 | |
4264 if (data) | |
4265 { | |
4266 win_delete(data->win); | |
4267 | |
4268 /* | |
4269 ** Free Memory | |
4270 */ | |
4271 mfwFree((void *)data, sizeof (T_SMSREAD_R)); | |
4272 } | |
4273 } | |
4274 #undef MMI_SMSREAD_C |