FreeCalypso > hg > fc-magnetite
comparison src/aci2/bmi/MmiBookUtils.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 (6349) | |
| 14 $Module: PhoneBook | |
| 15 $File: MmiBookUtils.c | |
| 16 $Revision: 1.0 | |
| 17 | |
| 18 $Author: Condat(UK) | |
| 19 $Date: 25/10/00 | |
| 20 | |
| 21 ******************************************************************************** | |
| 22 | |
| 23 Description: | |
| 24 | |
| 25 This module provides utility function for use in the | |
| 26 phone book application | |
| 27 | |
| 28 ******************************************************************************** | |
| 29 | |
| 30 $History: MmiBookUtils.c | |
| 31 | |
| 32 Feb 20, 2006 REF: OMAPS00061948 x0039928 | |
| 33 Bug:PhoneBook-My number menu -failed. | |
| 34 Fix: phb_read_entries is called with used entries as the no of entries if used entries are less than | |
| 35 MAX_SEARCH_NAME. | |
| 36 | |
| 37 Jan 27, 2006 REF: OMAPS00061925 x0039928 | |
| 38 Bug:Phonebook-Changing an entry and Immidiately deleting the entry failed. | |
| 39 Fix: Phonebook is populated with phone numbers after some time and not immediately after deleting an entry. | |
| 40 | |
| 41 Jan 22, 2006 REF: OMAPS00061930 x0039928 | |
| 42 Bug:PhoneBook -Change entry and view entry through Change option-failed | |
| 43 Fix: Phonebook is populated with phone numbers after some time and not immediately while saving the changed entries. | |
| 44 | |
| 45 25/10/00 Original Condat(UK) BMI version. | |
| 46 | |
| 47 $End | |
| 48 | |
| 49 // Issue Number : SPR#15671 on 24/03/04 by Ajith K.P | |
| 50 | |
| 51 *******************************************************************************/ | |
| 52 | |
| 53 | |
| 54 | |
| 55 /******************************************************************************* | |
| 56 | |
| 57 Include Files | |
| 58 | |
| 59 *******************************************************************************/ | |
| 60 #define ENTITY_MFW | |
| 61 | |
| 62 /* includes */ | |
| 63 #include <string.h> | |
| 64 #include <stdio.h> | |
| 65 #include <stdlib.h> | |
| 66 | |
| 67 #if defined (NEW_FRAME) | |
| 68 | |
| 69 #include "typedefs.h" | |
| 70 #include "vsi.h" | |
| 71 #include "pei.h" | |
| 72 #include "custom.h" | |
| 73 #include "gsm.h" | |
| 74 | |
| 75 #else | |
| 76 | |
| 77 #include "STDDEFS.H" | |
| 78 #include "custom.h" | |
| 79 #include "gsm.h" | |
| 80 #include "vsi.h" | |
| 81 | |
| 82 #endif | |
| 83 | |
| 84 #include "mfw_sys.h" | |
| 85 | |
| 86 #include "mfw_mfw.h" | |
| 87 #include "mfw_win.h" | |
| 88 #include "mfw_kbd.h" | |
| 89 #include "mfw_lng.h" | |
| 90 /* SPR#1428 - SH - New Editor changes */ | |
| 91 #ifndef NEW_EDITOR | |
| 92 #include "mfw_edt.h" | |
| 93 #endif | |
| 94 #include "mfw_icn.h" | |
| 95 #include "mfw_mnu.h" | |
| 96 #include "mfw_tim.h" | |
| 97 | |
| 98 #include "mfw_sim.h" | |
| 99 #include "mfw_cm.h" | |
| 100 #include "mfw_nm.h" | |
| 101 #include "mfw_phb.h" | |
| 102 #include "mfw_mme.h" | |
| 103 #include "mfw_sat.h" | |
| 104 #include "mfw_sms.h" | |
| 105 | |
| 106 #include "dspl.h" | |
| 107 | |
| 108 #include "ksd.h" | |
| 109 #include "psa.h" | |
| 110 | |
| 111 #include "MmiMain.h" | |
| 112 #include "MmiBookController.h" | |
| 113 #include "MmiDummy.h" | |
| 114 #include "MmiDialogs.h" | |
| 115 #include "MmiLists.h" | |
| 116 | |
| 117 | |
| 118 | |
| 119 #include "MmiMenu.h" | |
| 120 #include "mmiCall.h" | |
| 121 #include "Mmiicons.h" | |
| 122 #include "MmiIdle.h" | |
| 123 | |
| 124 #include "MmiSoftKeys.h" | |
| 125 #include "MmiSounds.h" | |
| 126 #include "MmiIdle.h" | |
| 127 #include "MmiNetwork.h" | |
| 128 #include "mmiSat_i.h" | |
| 129 #include "MmiAoc.h" | |
| 130 | |
| 131 #include "gdi.h" | |
| 132 #include "audio.h" | |
| 133 | |
| 134 #include "cus_aci.h" | |
| 135 #include "mfw_ffs.h" | |
| 136 #include "MmiTimers.h" | |
| 137 | |
| 138 #include "MmiBookShared.h" | |
| 139 | |
| 140 #include "mmiColours.h" | |
| 141 #include "mmiSmsRead.h"/*MC , SPR 1242 */ | |
| 142 | |
| 143 | |
| 144 // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P | |
| 145 // Issue description: Followup from 15623, this is the BMI part of this Issue. | |
| 146 // At last, in the record "SSC09" the number is displayed with the "+" | |
| 147 // character at the beginning of the number instead of "**21*+014543877989#". | |
| 148 | |
| 149 | |
| 150 extern int menuFDN; | |
| 151 extern T_call call_data; | |
| 152 // Jan 27, 2006 REF: OMAPS00061925 x0039928 | |
| 153 // Fix : Declare a extern phonebook timer handler | |
| 154 extern T_MFW_HND PhbSearchTim; | |
| 155 | |
| 156 /******************************************************************************* | |
| 157 | |
| 158 Private data elements | |
| 159 | |
| 160 *******************************************************************************/ | |
| 161 | |
| 162 static T_MFW_UPN_LIST *upnList = NULL; | |
| 163 | |
| 164 /* SPR#1112 - SH - This is redundant */ | |
| 165 //static T_phbk *GlobalPhoneBookHandle = NULL; | |
| 166 | |
| 167 /* SPR#1112 - SH - Internal phonebook flag */ | |
| 168 #ifdef INT_PHONEBOOK | |
| 169 static UBYTE ipbCopyIndex = 0; | |
| 170 static UBYTE ipbMove = FALSE; | |
| 171 static T_MFW_HND ipbWin = NULL; | |
| 172 #endif | |
| 173 | |
| 174 // ADDED BY RAVI - 28-11-2005 | |
| 175 EXTERN T_MFW mfw_Ucs2SIMStr(T_MFW_DCS outMode, U16 *inUcsStr, UBYTE maxOutSize, | |
| 176 UBYTE *outMfwStr, UBYTE *outLen); | |
| 177 | |
| 178 EXTERN T_MFW mfw_Gsm2SIMStr(T_MFW_DCS outMode, UBYTE *inGsmStr, UBYTE maxOutSize, | |
| 179 UBYTE *outMfwStr,UBYTE *outLen); | |
| 180 // END RAVI - 28-11-2005 | |
| 181 /******************************************************************************* | |
| 182 | |
| 183 Private Methods | |
| 184 | |
| 185 *******************************************************************************/ | |
| 186 | |
| 187 /******************************************************************************* | |
| 188 | |
| 189 $Function: changeName | |
| 190 | |
| 191 $Description: Change a phone book entry if we have a valid book selected | |
| 192 | |
| 193 $Returns: status of change, or MWB_PHB_FAIL if an error occurs | |
| 194 | |
| 195 $Arguments: book, to be updated | |
| 196 entry, to update | |
| 197 currentStatus, pointer to status word | |
| 198 | |
| 199 *******************************************************************************/ | |
| 200 | |
| 201 static UBYTE changeName( UBYTE book, T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *currentStatus ) | |
| 202 { | |
| 203 TRACE_FUNCTION( "changeName()" ); | |
| 204 | |
| 205 if ( book == PHB_SDN ) | |
| 206 return MFW_PHB_FAIL; | |
| 207 | |
| 208 return phb_store_entry( book, entry, currentStatus ); | |
| 209 } | |
| 210 | |
| 211 | |
| 212 | |
| 213 | |
| 214 | |
| 215 | |
| 216 | |
| 217 /******************************************************************************* | |
| 218 | |
| 219 $Function: deleteName | |
| 220 | |
| 221 $Description: Delete a phone book entry | |
| 222 | |
| 223 $Returns: status of delete, or MWB_PHB_FAIL if an error occurs | |
| 224 | |
| 225 $Arguments: book, to be updated | |
| 226 index, index of entry to delete | |
| 227 currentStatus, pointer to status word | |
| 228 | |
| 229 *******************************************************************************/ | |
| 230 | |
| 231 static UBYTE deleteName( UBYTE book, UBYTE index, T_MFW_PHB_STATUS *currentStatus ) | |
| 232 { | |
| 233 TRACE_FUNCTION( "deleteName()" ); | |
| 234 | |
| 235 if ( book == PHB_SDN ) | |
| 236 return MFW_PHB_FAIL; | |
| 237 | |
| 238 return phb_delete_entry( book, index, currentStatus ); | |
| 239 } | |
| 240 | |
| 241 | |
| 242 | |
| 243 | |
| 244 | |
| 245 | |
| 246 | |
| 247 | |
| 248 | |
| 249 | |
| 250 /******************************************************************************* | |
| 251 | |
| 252 $Function: addName | |
| 253 | |
| 254 $Description: Add a new name to the phone book | |
| 255 | |
| 256 $Returns: status of change, or MWB_PHB_FAIL if an error occurs | |
| 257 | |
| 258 $Arguments: book, to be updated | |
| 259 entry, to update | |
| 260 currentStatus, pointer to status word | |
| 261 | |
| 262 *******************************************************************************/ | |
| 263 | |
| 264 static UBYTE addName( UBYTE book, T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *currentStatus ) | |
| 265 { | |
| 266 TRACE_FUNCTION( "addName()" ); | |
| 267 | |
| 268 //MC-- Commented out UPN-specific code as it causes the name string in a UPN | |
| 269 //entry to be stored incorrectly and doesn't seem to be neccessary. | |
| 270 //Generic code here seems to work fine for UPN | |
| 271 { | |
| 272 /* normal store operation | |
| 273 */ | |
| 274 { | |
| 275 char temp[120]; | |
| 276 memset(temp,'\0',100); | |
| 277 #ifdef NO_ASCIIZ | |
| 278 { | |
| 279 T_MFW_PHB_TEXT buf; | |
| 280 | |
| 281 /*SPR 1752 check for unicode*/ | |
| 282 if (entry->name.data[0] ==0x80) | |
| 283 { | |
| 284 /*MC, don't do any conversions!!*/ | |
| 285 TRACE_EVENT("Converting Unicode 2 SIM"); | |
| 286 | |
| 287 sprintf(temp,"Book: %d Name %s Number %s", | |
| 288 book, | |
| 289 (char*)buf.data,(char*)entry->number); | |
| 290 | |
| 291 } | |
| 292 else | |
| 293 | |
| 294 { | |
| 295 // convert from GSM to Alpha characters | |
| 296 bookGsm2Alpha( (UBYTE *) entry->name.data ); | |
| 297 | |
| 298 sprintf(temp,"Book: %d Name %s Number %s", | |
| 299 book, | |
| 300 (char*)entry->name.data,(char*)entry->number); | |
| 301 } | |
| 302 } | |
| 303 #else | |
| 304 sprintf(temp,"Book: %d Name %s Number %s", | |
| 305 book, | |
| 306 (char*)entry->name,(char*)entry->number); | |
| 307 #endif | |
| 308 TRACE_EVENT(temp); | |
| 309 } | |
| 310 entry->index = 0; | |
| 311 return phb_store_entry( book, entry, currentStatus ); | |
| 312 } | |
| 313 } | |
| 314 | |
| 315 | |
| 316 | |
| 317 | |
| 318 | |
| 319 | |
| 320 | |
| 321 | |
| 322 /******************************************************************************* | |
| 323 | |
| 324 File Handling Utilities | |
| 325 | |
| 326 *******************************************************************************/ | |
| 327 | |
| 328 /******************************************************************************* | |
| 329 | |
| 330 $Function: storeInFile | |
| 331 | |
| 332 $Description: Converts the name to a storeable format and stores it | |
| 333 in the phone book | |
| 334 | |
| 335 $Returns: None | |
| 336 | |
| 337 $Arguments: phbk, pointer to phonebook structure | |
| 338 | |
| 339 *******************************************************************************/ | |
| 340 | |
| 341 void storeInFile( T_phbk *phbk ) | |
| 342 { int i; | |
| 343 UBYTE actual_length = 0; | |
| 344 char debug[20]; | |
| 345 TRACE_FUNCTION( "storeInFile()" ); | |
| 346 | |
| 347 /* Convert the name | |
| 348 */ | |
| 349 #ifdef NO_ASCIIZ | |
| 350 | |
| 351 /* if the pattern is GSM default format, use the function mfw_Gsm2SIMStr() here | |
| 352 */ | |
| 353 | |
| 354 | |
| 355 if (phbk->edt_buf_name[0] == 0x80)//if unicode | |
| 356 { | |
| 357 for (i =0; i < PHB_MAX_LEN; i+=2) //work out string length | |
| 358 { if (phbk->edt_buf_name[i] == 0 && phbk->edt_buf_name[i+1] == 0) | |
| 359 { if (i== 0) | |
| 360 actual_length =0; | |
| 361 else | |
| 362 actual_length = i -2; | |
| 363 break; | |
| 364 } | |
| 365 } | |
| 366 phbk->edt_buf_name[0] = (UBYTE)(actual_length/2);//add string length to beginning of string | |
| 367 phbk->edt_buf_name[1] = 0x00; | |
| 368 /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN*/ | |
| 369 memset(phbk->newEntry.name.data, 0,MAX_ALPHA_LEN); | |
| 370 //convert to SIM string | |
| 371 | |
| 372 mfw_Ucs2SIMStr( MFW_DCS_UCS2 , (U16*)phbk->edt_buf_name, MAX_ALPHA_LEN, | |
| 373 | |
| 374 phbk->newEntry.name.data, &phbk->newEntry.name.len ); | |
| 375 TRACE_EVENT( (char*)phbk->newEntry.name.data); | |
| 376 sprintf(debug, "length:%d", phbk->newEntry.name.len); | |
| 377 TRACE_EVENT(debug); | |
| 378 } | |
| 379 else | |
| 380 { | |
| 381 mfw_Gsm2SIMStr( MFW_DCS_7bits, (U8*)phbk->edt_buf_name, MAX_ALPHA_LEN, | |
| 382 phbk->newEntry.name.data, &phbk->newEntry.name.len ); | |
| 383 } | |
| 384 | |
| 385 #else | |
| 386 /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN*/ | |
| 387 strncpy( (char *)phbk->newEntry.name, (char *)phbk->edt_buf_name, MAX_ALPHA_LEN ); | |
| 388 | |
| 389 #endif | |
| 390 | |
| 391 /* update the number | |
| 392 */ | |
| 393 strncpy( (char *) phbk->newEntry.number, (char *) phbk->edt_buf_number, PHB_MAX_LEN ); | |
| 394 /*SPR 1327, copy current phonebook type to new entry*/ | |
| 395 phbk->newEntry.book = phbk->current.status.book; | |
| 396 /*If current phonebook UPN, don't overwrite phonebook type*/ | |
| 397 // Feb 20, 2006 REF: OMAPS00061948 x0039928 | |
| 398 // Fix : A check is made with enum PHB_UPN of MFW instead of UPN of ACI | |
| 399 if( phbk->newEntry.book != PHB_UPN) | |
| 400 phbk->newEntry.book = bookActiveBook(WRITE); | |
| 401 phbk->newEntry.index = 0; | |
| 402 | |
| 403 /* Add the name/number combination to the phone book and setup | |
| 404 the current text status string | |
| 405 */ | |
| 406 switch ( addName( phbk->newEntry.book, &phbk->newEntry, &phbk->current.status ) ) | |
| 407 { | |
| 408 case MFW_PHB_OK : | |
| 409 { | |
| 410 /* Entry saved okay | |
| 411 */ | |
| 412 MmiBookSetCurrentText( TxtSaved ); | |
| 413 } | |
| 414 break; | |
| 415 | |
| 416 case MFW_PHB_FULL : | |
| 417 { | |
| 418 /* Phone book full | |
| 419 */ | |
| 420 MmiBookSetCurrentText( TxtPhbkFull ); | |
| 421 } | |
| 422 break; | |
| 423 | |
| 424 case MFW_PHB_FAIL : | |
| 425 { | |
| 426 /* Write failure | |
| 427 */ | |
| 428 MmiBookSetCurrentText( TxtWriteError ); | |
| 429 } | |
| 430 break; | |
| 431 | |
| 432 default: | |
| 433 { | |
| 434 /* No other returns possible | |
| 435 */ | |
| 436 } | |
| 437 break; | |
| 438 } | |
| 439 } | |
| 440 | |
| 441 | |
| 442 | |
| 443 | |
| 444 | |
| 445 | |
| 446 | |
| 447 /******************************************************************************* | |
| 448 | |
| 449 $Function: changeInFile | |
| 450 | |
| 451 $Description: change the phone book entry | |
| 452 | |
| 453 $Returns: none | |
| 454 | |
| 455 $Arguments: phbk, pointer to phonebook structure | |
| 456 | |
| 457 *******************************************************************************/ | |
| 458 | |
| 459 void changeInFile( T_phbk *phbk ) | |
| 460 { int i; | |
| 461 int actual_length; | |
| 462 TRACE_FUNCTION( "changeInFile()" ); | |
| 463 | |
| 464 if(phbk->current.status.book == PHB_ADN_FDN) | |
| 465 phbk->current.status.book = PHB_ADN; //JVJE We can only store in ADN/FDN | |
| 466 else | |
| 467 phbk->current.status.book = phbk->current.status.book; | |
| 468 | |
| 469 TRACE_EVENT_P1("Current Book = %d", phbk->current.status.book); | |
| 470 TRACE_EVENT_P1("Current Name = %s", phbk->current.selectedName); | |
| 471 TRACE_EVENT_P1("Current Buf Name = %s", phbk->edt_buf_name); | |
| 472 | |
| 473 | |
| 474 /* Convert the name | |
| 475 */ | |
| 476 #ifdef NO_ASCIIZ | |
| 477 /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ | |
| 478 if (phbk->edt_buf_name[0] == 0x80)//if unicode | |
| 479 { | |
| 480 for (i =0; i < MAX_ALPHA_LEN; i+=2) //work out string length | |
| 481 { if (phbk->edt_buf_name[i] == 0 && phbk->edt_buf_name[i+1] == 0) | |
| 482 { if (i== 0) | |
| 483 actual_length =0; | |
| 484 else | |
| 485 actual_length = i -2; | |
| 486 break; | |
| 487 } | |
| 488 } | |
| 489 phbk->edt_buf_name[0] = (UBYTE)(actual_length/2);//add string length to beginning of string | |
| 490 phbk->edt_buf_name[1] = 0x00; | |
| 491 | |
| 492 memset(phbk->current.entry[phbk->current.selectedName].name.data, 0, MAX_ALPHA_LEN); | |
| 493 //convert to SIM string | |
| 494 mfw_Ucs2SIMStr( MFW_DCS_UCS2, (U16*)phbk->edt_buf_name, MAX_ALPHA_LEN, | |
| 495 phbk->current.entry[phbk->current.selectedName].name.data, | |
| 496 &phbk->current.entry[phbk->current.selectedName].name.len ); | |
| 497 } | |
| 498 else | |
| 499 { mfw_Gsm2SIMStr( MFW_DCS_7bits, (U8*)phbk->edt_buf_name, MAX_ALPHA_LEN, | |
| 500 phbk->current.entry[phbk->current.selectedName].name.data, &phbk->current.entry[phbk->current.selectedName].name.len ); | |
| 501 } | |
| 502 #else | |
| 503 | |
| 504 strncpy( (char *) phbk->current.entry[ phbk->current.selectedName ].name, | |
| 505 (char *) phbk->edt_buf_name, MAX_ALPHA_LEN ); | |
| 506 | |
| 507 #endif | |
| 508 | |
| 509 | |
| 510 /* update the number | |
| 511 */ | |
| 512 strncpy( (char *) phbk->current.entry[ phbk->current.selectedName ].number, | |
| 513 (char *) phbk->edt_buf_number, PHB_MAX_LEN ); | |
| 514 | |
| 515 /* Add the name/number combination to the phone book and setup | |
| 516 the current text status string | |
| 517 */ | |
| 518 switch ( changeName( phbk->current.status.book, | |
| 519 &phbk->current.entry[ phbk->current.selectedName ], &phbk->current.status ) ) | |
| 520 { | |
| 521 case MFW_PHB_OK : | |
| 522 { | |
| 523 /* Entry saved okay | |
| 524 */ | |
| 525 MmiBookSetCurrentText( TxtSaved ); | |
| 526 } | |
| 527 break; | |
| 528 | |
| 529 case MFW_PHB_FAIL : | |
| 530 { | |
| 531 /* Write failure | |
| 532 */ | |
| 533 MmiBookSetCurrentText( TxtWriteError ); | |
| 534 } | |
| 535 break; | |
| 536 | |
| 537 default: | |
| 538 { | |
| 539 /* No other returns possible | |
| 540 */ | |
| 541 } | |
| 542 break; | |
| 543 } | |
| 544 } | |
| 545 | |
| 546 | |
| 547 | |
| 548 | |
| 549 | |
| 550 | |
| 551 | |
| 552 | |
| 553 | |
| 554 /******************************************************************************* | |
| 555 | |
| 556 $Function: deleteFromFile | |
| 557 | |
| 558 $Description: delete an entry from a phone book | |
| 559 | |
| 560 $Returns: None | |
| 561 | |
| 562 $Arguments: phbk, phone book handle, | |
| 563 book, book to update, | |
| 564 | |
| 565 *******************************************************************************/ | |
| 566 | |
| 567 void deleteFromFile( T_phbk *phbk, UBYTE book ) | |
| 568 { | |
| 569 int index; | |
| 570 TRACE_FUNCTION( "deleteFromFile()" ); | |
| 571 | |
| 572 index = phbk->current.selectedName - phbk->current.missedCallsOffset; | |
| 573 switch ( deleteName( book, | |
| 574 phbk->current.entry[index].index, &phbk->current.status ) ) | |
| 575 { | |
| 576 case MFW_PHB_OK : | |
| 577 { | |
| 578 /* Entry saved okay | |
| 579 */ | |
| 580 MmiBookSetCurrentText( TxtEntryDeleted ); | |
| 581 | |
| 582 #ifdef NO_ASCIIZ | |
| 583 phbk->current.entry[index].name.len = 0; | |
| 584 memset((char*)phbk->current.entry[index].number, '\0', PHB_MAX_LEN); | |
| 585 | |
| 586 #else | |
| 587 /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ | |
| 588 memset((char*)phbk->current.entry[index].name, '\0', MAX_ALPHA_LEN); | |
| 589 memset((char*)phbk->current.entry[index].number, '\0', PHB_MAX_LEN); | |
| 590 #endif | |
| 591 /* Move the current index to the next valid entry | |
| 592 */ | |
| 593 if(phbk->current.selectedName > 0) | |
| 594 phbk->current.selectedName --; | |
| 595 else | |
| 596 phbk->current.selectedName = 0; | |
| 597 | |
| 598 if(phbk->current.index > 1) | |
| 599 phbk->current.index--; | |
| 600 else | |
| 601 phbk->current.index = 1; | |
| 602 | |
| 603 /* And if we have a search window, perform the search to | |
| 604 update the current valid entry | |
| 605 */ | |
| 606 if ( phbk->search_win ) | |
| 607 { | |
| 608 bookGetCurrentStatus( &phbk->current.status ); | |
| 609 if ( ! phbk->current.status.used_entries ) | |
| 610 { | |
| 611 /* empty phone book | |
| 612 */ | |
| 613 bookSearchDestroy( phbk->search_win ); | |
| 614 phbk->search_win = 0; | |
| 615 } | |
| 616 else | |
| 617 { | |
| 618 /* perform the search | |
| 619 */ | |
| 620 //Jan 27, 2006 REF: OMAPS00061925 x0039928 | |
| 621 // Fix : Start the phonebook timer for populating the list | |
| 622 timStart(PhbSearchTim); | |
| 623 } | |
| 624 } | |
| 625 } | |
| 626 break; | |
| 627 | |
| 628 case MFW_PHB_FAIL : | |
| 629 { | |
| 630 /* Write failure | |
| 631 */ | |
| 632 MmiBookSetCurrentText( TxtWriteError ); | |
| 633 } | |
| 634 break; | |
| 635 | |
| 636 default: | |
| 637 { | |
| 638 /* No other action required | |
| 639 */ | |
| 640 } | |
| 641 break; | |
| 642 } | |
| 643 } | |
| 644 | |
| 645 | |
| 646 /* SPR#1112 - SH - Internal phonebook use */ | |
| 647 #ifdef INT_PHONEBOOK | |
| 648 | |
| 649 /******************************************************************************* | |
| 650 | |
| 651 $Function: bookChangePB | |
| 652 | |
| 653 $Description: Change the phonebook | |
| 654 | |
| 655 $Returns: None | |
| 656 | |
| 657 $Arguments: None. | |
| 658 | |
| 659 *******************************************************************************/ | |
| 660 | |
| 661 void bookChangePB(T_MFW_HND win, UBYTE identifier, UBYTE reason) | |
| 662 { | |
| 663 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; | |
| 664 T_phbk *Phbk = (T_phbk *) win_data->user; | |
| 665 | |
| 666 GI_pb_SetPhonebook(identifier); | |
| 667 bookShowInfoScreen( Phbk->win, TxtPhonebook, TxtChanged, NULL, NULL, 3000); | |
| 668 return; | |
| 669 } | |
| 670 | |
| 671 | |
| 672 /******************************************************************************* | |
| 673 | |
| 674 $Function: bookCopy | |
| 675 | |
| 676 $Description: Copy or move a phonebook entry from one book to another | |
| 677 | |
| 678 $Returns: status of change, or MWB_PHB_FAIL if an error occurs | |
| 679 | |
| 680 $Arguments: entry - the entry to be moved or copied | |
| 681 srcStatus - Status information about the source phonebook | |
| 682 destStatus - Status information about the destination phonebook | |
| 683 move - TRUE if the original record is to be deleted | |
| 684 | |
| 685 *******************************************************************************/ | |
| 686 | |
| 687 UBYTE bookCopy( T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *destStatus, T_MFW_PHB_STATUS *srcStatus, UBYTE move ) | |
| 688 { | |
| 689 T_MFW ret; | |
| 690 UBYTE srcIndex; | |
| 691 UBYTE srcBook; | |
| 692 | |
| 693 TRACE_FUNCTION("bookCopy"); | |
| 694 | |
| 695 if (!destStatus->avail_entries) | |
| 696 { | |
| 697 /* There's no room in the destination phonebook to add the entry */ | |
| 698 TRACE_EVENT("bookCopy: dest phonebook full"); | |
| 699 return MFW_PHB_FULL; | |
| 700 } | |
| 701 | |
| 702 srcIndex = entry->index; | |
| 703 entry->index = 0; | |
| 704 | |
| 705 if (entry->name.len>destStatus->tag_len) | |
| 706 { | |
| 707 TRACE_EVENT("bookCopy: Alpha tag cropped"); | |
| 708 entry->name.len = destStatus->tag_len; | |
| 709 entry->name.data[entry->name.len] = NULL; | |
| 710 } | |
| 711 | |
| 712 ret = phb_store_entry( destStatus->book, entry, destStatus ); | |
| 713 TRACE_EVENT_P2("bookCopy: phb_store_entry book %d result %d", destStatus->book, ret); | |
| 714 | |
| 715 if (ret!=MFW_PHB_OK) | |
| 716 return ret; | |
| 717 | |
| 718 /* Only try to delete the entry if we are moving an entry from one book | |
| 719 * to another. Don't try if it is an FDN entry */ | |
| 720 | |
| 721 TRACE_EVENT_P2("move %d, entry->book %d", move, entry->book); | |
| 722 | |
| 723 if (move && entry->book!=PHB_FDN) | |
| 724 { | |
| 725 if (( srcStatus->book == PHB_UPN) || (srcStatus->book == PHB_FDN )) | |
| 726 srcBook = srcStatus->book; | |
| 727 else | |
| 728 srcBook = bookActiveBook(WRITE); | |
| 729 | |
| 730 ret = phb_delete_entry(srcBook, srcIndex, srcStatus); | |
| 731 TRACE_EVENT_P3("bookCopy: phb_delete_entry book %d index %d result %d", srcStatus->book, srcIndex, ret); | |
| 732 } | |
| 733 | |
| 734 TRACE_EVENT("bookCopy: leaving function"); | |
| 735 | |
| 736 return ret; | |
| 737 } | |
| 738 | |
| 739 | |
| 740 /******************************************************************************* | |
| 741 | |
| 742 $Function: bookCopySingle | |
| 743 | |
| 744 $Description: Copy or move a single phonebook entry | |
| 745 | |
| 746 $Returns: None | |
| 747 | |
| 748 $Arguments: None. | |
| 749 | |
| 750 *******************************************************************************/ | |
| 751 | |
| 752 void bookCopySingle(T_MFW_HND win, UBYTE identifier, UBYTE reason) | |
| 753 { | |
| 754 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; | |
| 755 T_phbk *Phbk = (T_phbk *) win_data->user; | |
| 756 BOOL oldBook; | |
| 757 int txtId; | |
| 758 T_MFW_PHB_STATUS destStatus; | |
| 759 tMmiPhbData *current = &Phbk->phbk->current; | |
| 760 | |
| 761 TRACE_FUNCTION("bookCopySingle"); | |
| 762 | |
| 763 oldBook = bookGetBookSelected(); | |
| 764 // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) | |
| 765 // While doing a copy from the FDN menu the destination should always be internal phonebook | |
| 766 | |
| 767 if(menuFDN && (call_data.calls.numCalls==0)) | |
| 768 { | |
| 769 destStatus.book = PHB_IPB; | |
| 770 } | |
| 771 else | |
| 772 { | |
| 773 bookSetBookSelected(!oldBook); | |
| 774 destStatus.book = bookActiveBook(WRITE); | |
| 775 } | |
| 776 bookGetCurrentStatus( &destStatus ); | |
| 777 | |
| 778 bookSetBookSelected(oldBook); | |
| 779 txtId = TxtStored; | |
| 780 | |
| 781 if (destStatus.avail_entries) | |
| 782 { | |
| 783 switch (bookCopy(¤t->entry[current->selectedName], &destStatus, ¤t->status, identifier)) | |
| 784 { | |
| 785 case MFW_PHB_OK: | |
| 786 txtId = TxtStored; | |
| 787 break; | |
| 788 case MFW_PHB_FULL: | |
| 789 txtId = TxtPhbkFull; | |
| 790 break; | |
| 791 default: | |
| 792 txtId = TxtFailed; | |
| 793 break; | |
| 794 } | |
| 795 } | |
| 796 else | |
| 797 { | |
| 798 txtId = TxtPhbkFull; | |
| 799 } | |
| 800 | |
| 801 bookShowInformation( win, txtId, NULL, NULL ); | |
| 802 | |
| 803 if (identifier) | |
| 804 { | |
| 805 /* Destroy options menu and regenerate address list */ | |
| 806 | |
| 807 bookMenuDestroy(Phbk->menu_options_win); | |
| 808 if(Phbk->current.status.used_entries > 0) | |
| 809 SEND_EVENT(Phbk->search_win, SEARCH_SCROLL_UP, 0, 0 ); | |
| 810 SEND_EVENT(Phbk->search_win, SEARCH_UPDATE, 0, (void*)Phbk->current.status.book ); | |
| 811 } | |
| 812 | |
| 813 return; | |
| 814 } | |
| 815 | |
| 816 | |
| 817 /******************************************************************************* | |
| 818 | |
| 819 $Function: bookCopyMultiple | |
| 820 | |
| 821 $Description: Copy or move multiple phonebook entries | |
| 822 | |
| 823 $Returns: None | |
| 824 | |
| 825 $Arguments: None. | |
| 826 | |
| 827 *******************************************************************************/ | |
| 828 | |
| 829 void bookCopyMultiple(T_MFW_HND win, UBYTE move, UBYTE reason) | |
| 830 { | |
| 831 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; | |
| 832 T_phbk *Phbk = (T_phbk *) win_data->user; | |
| 833 UBYTE oldBook; | |
| 834 T_MFW_PHB_STATUS destStatus; | |
| 835 T_MFW_PHB_STATUS srcStatus; | |
| 836 T_MFW_PHB_LIST entries; | |
| 837 T_MFW_PHB_ENTRY entry; | |
| 838 UBYTE readIndex; | |
| 839 int txtId; | |
| 840 // T_MFW_HND info_win; // RAVI | |
| 841 static T_MFW_HND waitWin = NULL; | |
| 842 /* Set up some data */ | |
| 843 | |
| 844 TRACE_FUNCTION("bookCopyMultiple"); | |
| 845 | |
| 846 entries.entry = &entry; | |
| 847 | |
| 848 srcStatus.book = bookActiveBook(WRITE); | |
| 849 bookGetCurrentStatus( &srcStatus ); | |
| 850 | |
| 851 oldBook = bookGetBookSelected(); | |
| 852 bookSetBookSelected(!oldBook); | |
| 853 | |
| 854 destStatus.book = bookActiveBook(WRITE); | |
| 855 bookGetCurrentStatus( &destStatus ); | |
| 856 | |
| 857 bookSetBookSelected(oldBook); | |
| 858 | |
| 859 /* First time entering function, set up values. | |
| 860 * Store information so this function can be called again | |
| 861 * when the phonebook is ready */ | |
| 862 | |
| 863 if (ipbCopyIndex==0) | |
| 864 { | |
| 865 ipbCopyIndex = srcStatus.used_entries; | |
| 866 ipbWin = win; | |
| 867 ipbMove = move; | |
| 868 | |
| 869 if (!bookGetBookSelected() && !move) | |
| 870 { | |
| 871 /* We need to drop out of this function briefly in order to get the dialog to display | |
| 872 * for this particular case! Show info screen very briefly, which calls this function as | |
| 873 * a callback. The info screen remains until we drop out of this function a second | |
| 874 * time */ | |
| 875 waitWin = NULL; | |
| 876 bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopyMultiple, NULL, 100); | |
| 877 return; | |
| 878 } | |
| 879 waitWin = bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, NULL, NULL, FOREVER); | |
| 880 } | |
| 881 | |
| 882 TRACE_EVENT_P1("Entries in list: %d", srcStatus.used_entries); | |
| 883 | |
| 884 /* For special case where SIM will give no E_PHB_READY response, the | |
| 885 * do...while operates as a loop below. Otherwise, it will only go through | |
| 886 * once, and this function will be called repeatedly every E_PHB_READY */ | |
| 887 | |
| 888 do | |
| 889 { | |
| 890 txtId = TxtStored; | |
| 891 | |
| 892 if (!destStatus.avail_entries) | |
| 893 { | |
| 894 txtId = TxtPhbkFull; | |
| 895 } | |
| 896 else if (ipbCopyIndex==0) | |
| 897 { | |
| 898 txtId = TxtEmpty; | |
| 899 } | |
| 900 else | |
| 901 { | |
| 902 /* For moving, always delete first entry alphabetically, list moves down. | |
| 903 * For copying, move through the list */ | |
| 904 | |
| 905 if (move) | |
| 906 readIndex = 1; | |
| 907 else | |
| 908 readIndex = ipbCopyIndex; | |
| 909 | |
| 910 TRACE_EVENT_P1("Moving entry %d", readIndex); | |
| 911 | |
| 912 /* Read in entry and copy/move it */ | |
| 913 | |
| 914 phb_read_entries(srcStatus.book, readIndex, MFW_PHB_ALPHA, 1, &entries); | |
| 915 | |
| 916 switch (bookCopy(entries.entry, &destStatus, &srcStatus, move)) | |
| 917 { | |
| 918 case MFW_PHB_OK: | |
| 919 txtId = TxtStored; | |
| 920 break; | |
| 921 case MFW_PHB_FULL: | |
| 922 txtId = TxtPhbkFull; | |
| 923 break; | |
| 924 default: | |
| 925 txtId = TxtFailed; | |
| 926 break; | |
| 927 } | |
| 928 | |
| 929 ipbCopyIndex--; | |
| 930 } | |
| 931 }/* Is a loop in special case - see above */ | |
| 932 while (!bookGetBookSelected() && !move && txtId==TxtStored && ipbCopyIndex>0); | |
| 933 | |
| 934 /* If we've finished, or an error has occurred, show info dialog */ | |
| 935 | |
| 936 if (ipbCopyIndex==0 || txtId!=TxtStored) | |
| 937 { | |
| 938 ipbCopyIndex = 0; | |
| 939 | |
| 940 /* Destroy the Please Wait window and show the result message */ | |
| 941 | |
| 942 bookShowInformation( win, txtId, NULL, NULL ); | |
| 943 if (waitWin) | |
| 944 { | |
| 945 SEND_EVENT(waitWin, DIALOG_DESTROY,0,0); | |
| 946 } | |
| 947 | |
| 948 if (move) | |
| 949 { | |
| 950 /* Destroy options menu and regenerate address list */ | |
| 951 | |
| 952 bookMenuDestroy(Phbk->menu_options_win); | |
| 953 bookGetCurrentStatus( &Phbk->current.status ); | |
| 954 if(Phbk->current.status.used_entries > 0) | |
| 955 { | |
| 956 SEND_EVENT(Phbk->search_win, SEARCH_SCROLL_UP, 0, 0 ); | |
| 957 SEND_EVENT(Phbk->search_win, SEARCH_UPDATE, 0, (void*)Phbk->current.status.book ); | |
| 958 } | |
| 959 else | |
| 960 bookSearchDestroy(Phbk->search_win); | |
| 961 } | |
| 962 } | |
| 963 | |
| 964 return; | |
| 965 } | |
| 966 #endif | |
| 967 | |
| 968 | |
| 969 | |
| 970 /******************************************************************************* | |
| 971 | |
| 972 Public Methods | |
| 973 | |
| 974 *******************************************************************************/ | |
| 975 | |
| 976 | |
| 977 | |
| 978 | |
| 979 /******************************************************************************* | |
| 980 | |
| 981 $Function: bookCurrentWindow | |
| 982 | |
| 983 $Description: | |
| 984 | |
| 985 This returns the window handle associated with the current | |
| 986 MFW element | |
| 987 | |
| 988 $Returns: window handle of current MFW item | |
| 989 | |
| 990 $Arguments: none. | |
| 991 | |
| 992 *******************************************************************************/ | |
| 993 | |
| 994 tBookMfwHnd bookCurrentWindow( void ) | |
| 995 { | |
| 996 return mfwParent( mfwHeader() ); | |
| 997 } | |
| 998 | |
| 999 | |
| 1000 | |
| 1001 | |
| 1002 | |
| 1003 | |
| 1004 | |
| 1005 /******************************************************************************* | |
| 1006 | |
| 1007 $Function: bookDefaultCallBack | |
| 1008 | |
| 1009 $Description: | |
| 1010 | |
| 1011 This is a simple call back function which is invoked when | |
| 1012 a not implemented dialog is displayed. We don't want anyone | |
| 1013 outside of this module using it so define it as static, | |
| 1014 this will still be callable from the info dialogs as it | |
| 1015 will use the reference we set up. | |
| 1016 | |
| 1017 $Returns: zero, always | |
| 1018 | |
| 1019 $Arguments: win, parent window | |
| 1020 identifier, of the window | |
| 1021 reason, for the window | |
| 1022 | |
| 1023 *******************************************************************************/ | |
| 1024 | |
| 1025 static tBookStatus bookDefaultCallBack( tBookMfwHnd win, UBYTE identifier, UBYTE reason ) | |
| 1026 { | |
| 1027 if ( win ) | |
| 1028 winShow( win ); | |
| 1029 | |
| 1030 return 0; | |
| 1031 } | |
| 1032 | |
| 1033 | |
| 1034 | |
| 1035 | |
| 1036 | |
| 1037 | |
| 1038 | |
| 1039 | |
| 1040 /******************************************************************************* | |
| 1041 | |
| 1042 $Function: bookWindowData | |
| 1043 | |
| 1044 $Description: | |
| 1045 | |
| 1046 This routine is designed to be invoked from within a menu | |
| 1047 handler or call back function and will return a pointer to | |
| 1048 the window data associated with the current MFW element. | |
| 1049 | |
| 1050 $Returns: pointer to the data area | |
| 1051 | |
| 1052 $Arguments: none. | |
| 1053 | |
| 1054 *******************************************************************************/ | |
| 1055 | |
| 1056 void *bookWindowData( void ) | |
| 1057 { | |
| 1058 tBookMfwHnd WinPtr; | |
| 1059 | |
| 1060 if ( ( WinPtr = bookCurrentWindow() ) == NULL ) | |
| 1061 return (void *) NULL; | |
| 1062 | |
| 1063 return (void *)((tBookMfwHdr *) WinPtr)->data; | |
| 1064 } | |
| 1065 | |
| 1066 | |
| 1067 | |
| 1068 | |
| 1069 | |
| 1070 | |
| 1071 | |
| 1072 | |
| 1073 | |
| 1074 /******************************************************************************* | |
| 1075 | |
| 1076 $Function: bookMenuSelectedNumber | |
| 1077 | |
| 1078 $Description: | |
| 1079 | |
| 1080 This will return the currently selected entry in the phone | |
| 1081 book, when the routine is being called from a menu handler | |
| 1082 | |
| 1083 $Returns: pointer to the selected number buffer | |
| 1084 | |
| 1085 $Arguments: none. | |
| 1086 | |
| 1087 *******************************************************************************/ | |
| 1088 | |
| 1089 char *bookMenuSelectedNumber( void ) | |
| 1090 { | |
| 1091 tBookMfwHnd WinData; | |
| 1092 | |
| 1093 /* Have we got a valid window ? | |
| 1094 */ | |
| 1095 if ( ( WinData = (tBookMfwHnd) bookWindowData() ) == NULL ) | |
| 1096 return NULL; | |
| 1097 | |
| 1098 return NULL; | |
| 1099 } | |
| 1100 | |
| 1101 | |
| 1102 | |
| 1103 | |
| 1104 | |
| 1105 | |
| 1106 | |
| 1107 | |
| 1108 | |
| 1109 /******************************************************************************* | |
| 1110 | |
| 1111 $Function: bookPhoneBookLoading | |
| 1112 | |
| 1113 $Description: access routine for the local static menu area | |
| 1114 | |
| 1115 Utility functions to determine if the phone book is | |
| 1116 still in the loading state | |
| 1117 | |
| 1118 $Returns: BOOK_FAILURE if loading, otherwise BOOK_SUCCESS | |
| 1119 | |
| 1120 $Arguments: none. | |
| 1121 | |
| 1122 *******************************************************************************/ | |
| 1123 | |
| 1124 tBookStatus bookPhoneBookLoading( void ) | |
| 1125 { | |
| 1126 int temp; | |
| 1127 char tempst[20]; | |
| 1128 TRACE_FUNCTION("bookPhoneBookLoading"); | |
| 1129 temp = phb_get_mode(); | |
| 1130 sprintf(tempst,"phb_get_mode %d",temp); | |
| 1131 TRACE_EVENT(tempst); | |
| 1132 return ( (phb_get_mode() == PHB_LOADING)||(phb_get_mode() == MFW_PHB_FAIL) ) ? BOOK_FAILURE : BOOK_SUCCESS; | |
| 1133 } | |
| 1134 | |
| 1135 | |
| 1136 | |
| 1137 | |
| 1138 | |
| 1139 | |
| 1140 | |
| 1141 | |
| 1142 | |
| 1143 /******************************************************************************* | |
| 1144 | |
| 1145 $Function: bookInfoDialog | |
| 1146 | |
| 1147 $Description: | |
| 1148 | |
| 1149 Utility functions just to throw a string onto the screen | |
| 1150 primarily for debug purposes, the modal version will wait | |
| 1151 for a user input before removing the message, the non-modal | |
| 1152 will clear after three seconds | |
| 1153 | |
| 1154 $Returns: One. | |
| 1155 | |
| 1156 $Arguments: String1, String2, character strings to be displayed. | |
| 1157 | |
| 1158 *******************************************************************************/ | |
| 1159 | |
| 1160 tBookStatus bookInfoDialog( char *String1, char *String2 ) | |
| 1161 { | |
| 1162 tBookMfwHnd Win = bookCurrentWindow(); | |
| 1163 tBookDialogData Dialog; | |
| 1164 | |
| 1165 /* Initialise the dialog control block with default information | |
| 1166 */ | |
| 1167 dlg_initDisplayData_TextStr( &Dialog, TxtNull, TxtNull, String1, String2, COLOUR_STATUS); | |
| 1168 dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)bookDefaultCallBack, THREE_SECS, KEY_CLEAR); | |
| 1169 | |
| 1170 /* Show the dialog | |
| 1171 */ | |
| 1172 info_dialog( Win, &Dialog ); | |
| 1173 | |
| 1174 return 1; | |
| 1175 } | |
| 1176 | |
| 1177 | |
| 1178 | |
| 1179 | |
| 1180 | |
| 1181 | |
| 1182 | |
| 1183 | |
| 1184 | |
| 1185 /******************************************************************************* | |
| 1186 | |
| 1187 $Function: bookNotImplemented | |
| 1188 | |
| 1189 $Description: | |
| 1190 | |
| 1191 This will present an information dialog indicating the current | |
| 1192 feature is still under development. This routine will use the | |
| 1193 current MFW element to detect the handle of the parent window | |
| 1194 if the incoming window handle is NULL. | |
| 1195 | |
| 1196 $Returns: One | |
| 1197 | |
| 1198 $Arguments: Parent, window, can be NULL | |
| 1199 | |
| 1200 *******************************************************************************/ | |
| 1201 | |
| 1202 tBookStatus bookNotImplemented( tBookMfwHnd Parent ) | |
| 1203 { | |
| 1204 tBookMfwHnd Win = ( Parent ) ? Parent : bookCurrentWindow(); | |
| 1205 tBookDialogData Dialog; | |
| 1206 | |
| 1207 /* Initialise the dialog control block with default information | |
| 1208 */ | |
| 1209 dlg_initDisplayData_TextStr( &Dialog, TxtNull, TxtNull, MmiRsrcGetText( TxtNotImplemented ), NULL, COLOUR_STATUS); | |
| 1210 dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)bookDefaultCallBack, THREE_SECS, KEY_CLEAR); | |
| 1211 | |
| 1212 /* Show the dialog | |
| 1213 */ | |
| 1214 info_dialog( Win, &Dialog ); | |
| 1215 | |
| 1216 return 1; | |
| 1217 | |
| 1218 } | |
| 1219 | |
| 1220 /* Menu handler to invoke the routine above | |
| 1221 */ | |
| 1222 tBookStatus bookMenuNotImplemented( tBookMfwMenu *Menu, tBookMfwMenuItem *Item ) | |
| 1223 { | |
| 1224 return bookNotImplemented( NULL ); | |
| 1225 } | |
| 1226 | |
| 1227 | |
| 1228 | |
| 1229 | |
| 1230 | |
| 1231 | |
| 1232 /* SPR#1428 - SH - New Editor changes: No longer required */ | |
| 1233 #ifndef NEW_EDITOR | |
| 1234 | |
| 1235 /******************************************************************************* | |
| 1236 | |
| 1237 $Function: set_edt_attr | |
| 1238 | |
| 1239 $Description: | |
| 1240 | |
| 1241 Sets up the edit attribute structure with the provided parameters | |
| 1242 | |
| 1243 $Returns: None | |
| 1244 | |
| 1245 $Arguments: winPx, winPy, winSx, winSy, positioning information | |
| 1246 fgColor, colour for foreground | |
| 1247 font, mode, controls, pretty much what they say | |
| 1248 *text, initial text to be edited | |
| 1249 size, of the text (in bytes) | |
| 1250 attr, the block to be set up with the other parameters | |
| 1251 | |
| 1252 GW - Changed colour from 8 bits (foreground) to 2x32bits fgd and bgd | |
| 1253 For the colour display we pass a 32 bit word that defines the size and position of the editor. | |
| 1254 This can be either a specific size or a more generic ('middle of the screen'/full width of display) | |
| 1255 *******************************************************************************/ | |
| 1256 void bookSetEditAttributes( | |
| 1257 int zone_id, | |
| 1258 U32 colIndex, | |
| 1259 U8 font, U8 mode, U8 *controls, | |
| 1260 char *text, U16 size, | |
| 1261 MfwEdtAttr* attr) | |
| 1262 { | |
| 1263 /* Populate the structure with the parameters | |
| 1264 */ | |
| 1265 calculateWindow(attr, zone_id ); | |
| 1266 attr->edtCol = colIndex; | |
| 1267 attr->font = font; | |
| 1268 attr->mode = mode; | |
| 1269 attr->controls = controls; | |
| 1270 attr->text = text; | |
| 1271 attr->size = size; | |
| 1272 } | |
| 1273 #endif /* NEW_EDITOR */ | |
| 1274 | |
| 1275 | |
| 1276 | |
| 1277 | |
| 1278 | |
| 1279 | |
| 1280 | |
| 1281 | |
| 1282 | |
| 1283 | |
| 1284 /******************************************************************************* | |
| 1285 | |
| 1286 Name Handling Functions | |
| 1287 | |
| 1288 *******************************************************************************/ | |
| 1289 | |
| 1290 /******************************************************************************* | |
| 1291 | |
| 1292 $Function: bookGetCurrentStatus | |
| 1293 | |
| 1294 $Description: Determines the current status of the phone book | |
| 1295 | |
| 1296 $Returns: status byte | |
| 1297 | |
| 1298 $Arguments: currentStatus, pointer to structure to be populated with | |
| 1299 status information | |
| 1300 | |
| 1301 *******************************************************************************/ | |
| 1302 | |
| 1303 UBYTE bookGetCurrentStatus( T_MFW_PHB_STATUS *currentStatus ) | |
| 1304 { | |
| 1305 UBYTE temp; | |
| 1306 TRACE_FUNCTION( "bookGetCurrentStatus()" ); | |
| 1307 | |
| 1308 | |
| 1309 temp = phb_get_status( currentStatus ); | |
| 1310 { | |
| 1311 char temp[255]; | |
| 1312 sprintf(temp,"book %d max_entries %d used_entries %d aval_entries %d", | |
| 1313 currentStatus->book,currentStatus->max_entries, | |
| 1314 currentStatus->used_entries, | |
| 1315 currentStatus->avail_entries); | |
| 1316 TRACE_EVENT(temp); | |
| 1317 } | |
| 1318 return temp; | |
| 1319 } | |
| 1320 | |
| 1321 | |
| 1322 | |
| 1323 | |
| 1324 | |
| 1325 | |
| 1326 | |
| 1327 | |
| 1328 /******************************************************************************* | |
| 1329 | |
| 1330 $Function: bookFindNames | |
| 1331 | |
| 1332 $Description: Fine name in phone book | |
| 1333 | |
| 1334 $Returns: status of search | |
| 1335 | |
| 1336 $Arguments: number, number of entries to search, current, | |
| 1337 pointer to structure containing search context | |
| 1338 | |
| 1339 *******************************************************************************/ | |
| 1340 | |
| 1341 UBYTE bookFindName( UBYTE number, tMmiPhbData *current ) | |
| 1342 { | |
| 1343 UBYTE ret; | |
| 1344 int index; // , Count = 0; // RAVI | |
| 1345 UBYTE l_name[MAX_ALPHA_LEN];/*MC SPR 1257, name strings should use MAX_ALPHA_LEN*/ | |
| 1346 UBYTE book_type, index_type; | |
| 1347 int i; | |
| 1348 char debug[22]; | |
| 1349 | |
| 1350 // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P | |
| 1351 // Added these variables to Fix the Issue MMI-SPR-15813 | |
| 1352 // nondigitindex => index after which '+' sign to be added | |
| 1353 // numlength = lenght of the number array. | |
| 1354 // nondigitFound = Checks whether nondigit is present in the number array or not. | |
| 1355 | |
| 1356 int nondigitindex = -1,j,numlength = 0, nondigitFound = -1; | |
| 1357 | |
| 1358 | |
| 1359 TRACE_FUNCTION( "bookFindName()" ); | |
| 1360 | |
| 1361 /* Firstly, check for an empty book | |
| 1362 */ | |
| 1363 bookGetCurrentStatus( ¤t->status ); | |
| 1364 if ( current->status.used_entries < 1 ) | |
| 1365 { | |
| 1366 current->index = 0; | |
| 1367 return MFW_PHB_OK; | |
| 1368 } | |
| 1369 | |
| 1370 // Feb 20, 2006 REF: OMAPS00061948 x0039928 | |
| 1371 // Fix : If used entries are less than MAX_SARCH_NAME then no. of entries | |
| 1372 // passed to the phb_read_entries is used entries. | |
| 1373 if(current->status.used_entries < MAX_SEARCH_NAME) | |
| 1374 number = current->status.used_entries; | |
| 1375 | |
| 1376 /* Okay, we have some entries to search, so initialise the current | |
| 1377 entry buffer to empty | |
| 1378 */ | |
| 1379 memset( current->entry, 0, MAX_SEARCH_CALL_LIST * sizeof( T_MFW_PHB_ENTRY ) ); | |
| 1380 | |
| 1381 | |
| 1382 | |
| 1383 current->list.entry = current->entry; | |
| 1384 current->list.num_entries = number; | |
| 1385 | |
| 1386 /* Sort out how we index the information | |
| 1387 */ | |
| 1388 book_type = current->status.book; | |
| 1389 index_type = MFW_PHB_INDEX; | |
| 1390 if ( ( book_type == bookActiveBook(WRITE) ) || ( book_type == PHB_SDN ) ) | |
| 1391 index_type = MFW_PHB_ALPHA; | |
| 1392 | |
| 1393 /* Sort out the type of search we are performing | |
| 1394 */ | |
| 1395 if ((book_type == PHB_LDN) || (book_type == PHB_LRN)|| (book_type == PHB_LMN)) | |
| 1396 index_type = MFW_PHB_INDEX; | |
| 1397 else | |
| 1398 { | |
| 1399 if ( current->KindOfSearch == SEARCH_BY_NAME ) | |
| 1400 index_type = MFW_PHB_ALPHA; | |
| 1401 else if ( current->KindOfSearch == SEARCH_BY_NUMBER ) | |
| 1402 index_type = MFW_PHB_NUMBER; | |
| 1403 else if ( current->KindOfSearch == SEARCH_BY_LOCATION ) | |
| 1404 index_type = MFW_PHB_INDEX; | |
| 1405 } | |
| 1406 | |
| 1407 | |
| 1408 /* read the appropriate entries from the phone book | |
| 1409 */ | |
| 1410 { | |
| 1411 char temp[255]; | |
| 1412 sprintf(temp,"book %d index %d indextype %d number %d", | |
| 1413 book_type,current->index,index_type,number); | |
| 1414 TRACE_EVENT(temp); | |
| 1415 } | |
| 1416 // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) | |
| 1417 //When book is ADN, we need to read only ADN entries. no need to display ADN and FDN together | |
| 1418 | |
| 1419 if (book_type == PHB_ADN) /*Quick test */ | |
| 1420 { | |
| 1421 TRACE_EVENT("book_type == PHB_ADN"); | |
| 1422 ret = phb_read_entries( PHB_ADN, current->index, index_type, number, ¤t->list ); | |
| 1423 } | |
| 1424 else | |
| 1425 { | |
| 1426 TRACE_EVENT("book_type == OTHER"); | |
| 1427 ret = phb_read_entries( book_type, current->index, index_type, number, ¤t->list ); | |
| 1428 } | |
| 1429 | |
| 1430 /* Populate the output structures | |
| 1431 */ | |
| 1432 if (current->list.result == MFW_NO_ENTRY) | |
| 1433 current->index = 0; | |
| 1434 | |
| 1435 for ( index = 0; index < number; index++ ) | |
| 1436 #ifdef NO_ASCIIZ | |
| 1437 | |
| 1438 #ifdef EASY_TEXT_ENABLED | |
| 1439 {/*MC , SPR 1242 merged in this section from b-sample build*/ | |
| 1440 | |
| 1441 /* GSM character sets | |
| 1442 */ | |
| 1443 TRACE_EVENT( (char*)current->entry[index].name.data); | |
| 1444 TRACE_EVENT("Convert from SIM to UCS2"); | |
| 1445 | |
| 1446 TRACE_EVENT_P1("length of name string: %d", current->entry[index].name.len); | |
| 1447 /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ | |
| 1448 if (current->entry[index].name.data[0] == 0x80 ) | |
| 1449 { for (i=1; i<MAX_ALPHA_LEN; i+=1) | |
| 1450 { | |
| 1451 l_name[i+1] = current->entry[index].name.data[i]; | |
| 1452 } | |
| 1453 l_name[0] = current->entry[index].name.data[0]; | |
| 1454 l_name[1] = MAX_ALPHA_LEN; | |
| 1455 | |
| 1456 memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); | |
| 1457 /*MC, we'll just use the length provided by the MFW*/ | |
| 1458 if (current->entry[index].name.len%2 == 1)/*if length of string odd*/ | |
| 1459 current->entry[index].name.len++;/* INCREASE LENGTH BY 1*/ | |
| 1460 | |
| 1461 /*make sure all chars after length are 0*/ | |
| 1462 for (i=current->entry[index].name.len; i<MAX_ALPHA_LEN; i++) | |
| 1463 { current->entry[index].name.data[i] = 0; } | |
| 1464 | |
| 1465 for (i=0; i < MAX_ALPHA_LEN;i++) | |
| 1466 { | |
| 1467 if ( current->entry[index].name.data[i]== 0 && current->entry[index].name.data[i+1] != 0) | |
| 1468 debug[i] = '0'; | |
| 1469 else | |
| 1470 debug[i] = (char)current->entry[index].name.data[i]; | |
| 1471 } | |
| 1472 | |
| 1473 | |
| 1474 TRACE_EVENT("Decoded entry"); | |
| 1475 TRACE_EVENT(debug); | |
| 1476 | |
| 1477 } | |
| 1478 | |
| 1479 else | |
| 1480 | |
| 1481 { /*SPR2175, use new function to convert from GSM to ASCII*/ | |
| 1482 { ATB_convert_String((char*)current->entry[index].name.data, MFW_DCS_8bits, current->entry[index].name.len, | |
| 1483 (char*)l_name, MFW_ASCII, PHB_MAX_LEN, FALSE); | |
| 1484 current->entry[index].name.dcs = MFW_ASCII; | |
| 1485 memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); | |
| 1486 } | |
| 1487 | |
| 1488 | |
| 1489 } | |
| 1490 } | |
| 1491 | |
| 1492 #endif | |
| 1493 /*MC end*/ | |
| 1494 #else | |
| 1495 { TRACE_EVENT_P1("length of name string: %d", current->entry[index].name.len); | |
| 1496 /*SPR2175, use new function to convert from GSM to ASCII*/ | |
| 1497 { ATB_convert_String((char*)current->entry[index].name.data, MFW_DCS_8bits, current->entry[index].name.data.len, | |
| 1498 l_name.data, MFW_ASCII, PHB_MAX_LEN); | |
| 1499 current->entry[index].name.dcs = MFW_ASCII; | |
| 1500 memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); | |
| 1501 } | |
| 1502 } | |
| 1503 #endif | |
| 1504 | |
| 1505 /* Needed to make international calls from the phonebook | |
| 1506 */ | |
| 1507 for ( index = 0; index < number; index++ ) | |
| 1508 { | |
| 1509 if ( current->entry[index].ton ) | |
| 1510 { | |
| 1511 | |
| 1512 // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P | |
| 1513 | |
| 1514 // Issue description: Followup from 15623, this is the BMI part of this Issue. | |
| 1515 // At last, in the record "SSC09" the number is displayed with the "+" | |
| 1516 // character at the beginning of the number instead of "**21*+014543877989#" | |
| 1517 | |
| 1518 // Solution: Find the location of nondigit(e.g:*, #) in the number array | |
| 1519 // and put '+' to next position if the index is less than numlength-8. This is done | |
| 1520 // as there can be ss strings(like *11*20#) attached to the number in the end. | |
| 1521 // For eg: **61#+9844093515*11*20# | |
| 1522 // If the total length is less than 8 assign this index to nondigitindex. | |
| 1523 // This solution is based on special sequences we have encountered till now. | |
| 1524 | |
| 1525 // Finds the length of the number array. | |
| 1526 numlength = strlen((char*)current->entry[ index ].number); | |
| 1527 //checks whether the length is within the limit. | |
| 1528 if(numlength <=PHB_MAX_LEN) | |
| 1529 { | |
| 1530 for( j=0; j< numlength ; j++) | |
| 1531 { | |
| 1532 if( !isdigit((char*)current->entry[ index ].number[j]) ) | |
| 1533 { | |
| 1534 // Found a nondigit can be */# | |
| 1535 nondigitFound = j; | |
| 1536 // Checking , whether the nondigit index is not at the end | |
| 1537 // part of the number array. | |
| 1538 if(j < (numlength-8)) | |
| 1539 { | |
| 1540 // Current index is less than numlength-8 | |
| 1541 nondigitindex = j; | |
| 1542 } | |
| 1543 else | |
| 1544 { | |
| 1545 if(numlength <8) | |
| 1546 { | |
| 1547 // If lenght of the number array is less than 8 | |
| 1548 // assign the index to nondigitindex | |
| 1549 // This condition might occur when the user | |
| 1550 // presses invalid short sequence | |
| 1551 nondigitindex = j; | |
| 1552 } | |
| 1553 } | |
| 1554 } | |
| 1555 } | |
| 1556 | |
| 1557 if((nondigitindex == -1) && (nondigitFound> -1) && (nondigitFound < 4)) | |
| 1558 { | |
| 1559 // Nondigit is existing and it's position is less than 4 and not met | |
| 1560 // any of the above conditions. | |
| 1561 nondigitindex = nondigitFound; | |
| 1562 } | |
| 1563 | |
| 1564 // Move the contents accordingly. | |
| 1565 memmove((char *) &(current->entry[ index ].number[ nondigitindex+2]), | |
| 1566 (char *) &(current->entry[ index ].number[nondigitindex+1]), numlength - nondigitindex+1); | |
| 1567 | |
| 1568 // Add the '+' sign after the appropriate nondigit character, if any. | |
| 1569 current->entry[index].number[nondigitindex+1] = '+'; | |
| 1570 } | |
| 1571 | |
| 1572 } | |
| 1573 } | |
| 1574 | |
| 1575 return current->result = ret; | |
| 1576 } | |
| 1577 | |
| 1578 | |
| 1579 | |
| 1580 | |
| 1581 | |
| 1582 | |
| 1583 | |
| 1584 | |
| 1585 | |
| 1586 /******************************************************************************* | |
| 1587 | |
| 1588 $Function: bookEvent | |
| 1589 | |
| 1590 $Description: Event handler for a phone book event | |
| 1591 | |
| 1592 $Returns: MFW_EVENT_CONSUMED if recognised message, otherwise | |
| 1593 MFW_EVENT_PASSED | |
| 1594 | |
| 1595 $Arguments: e, event, para, general parameter giving context of call | |
| 1596 | |
| 1597 *******************************************************************************/ | |
| 1598 | |
| 1599 int bookEvent( MfwEvt e, void *para ) | |
| 1600 { | |
| 1601 T_MFW_PHB_STATUS *status; | |
| 1602 | |
| 1603 TRACE_FUNCTION( "bookEvent" ); | |
| 1604 | |
| 1605 /* deal with the incoming event | |
| 1606 */ | |
| 1607 switch( e ) | |
| 1608 { | |
| 1609 case E_PHB_UPN_LIST : | |
| 1610 { | |
| 1611 upnList = (T_MFW_UPN_LIST *)para; | |
| 1612 /* tbd */ | |
| 1613 } | |
| 1614 break; | |
| 1615 | |
| 1616 case E_PHB_STATUS: | |
| 1617 { | |
| 1618 status = (T_MFW_PHB_STATUS *)para; | |
| 1619 if ( ( status->book == PHB_FDN ) || ( status->book == PHB_ADN ) ) | |
| 1620 { | |
| 1621 if ( pinsSetIsFocussed() == FOCUSSED_PINS ) | |
| 1622 backpinFDNactdeact(); | |
| 1623 } | |
| 1624 } | |
| 1625 break; | |
| 1626 | |
| 1627 case E_PHB_ERROR: | |
| 1628 { | |
| 1629 /* tbd */ | |
| 1630 } | |
| 1631 break; | |
| 1632 | |
| 1633 /* SPR#1112 - SH - New events to indicate status of phonebook */ | |
| 1634 | |
| 1635 case E_PHB_READY: | |
| 1636 { | |
| 1637 TRACE_EVENT("E_PHB_READY"); | |
| 1638 #ifdef INT_PHONEBOOK | |
| 1639 /* SPR#1112 - SH - If we're copying or moving a list, | |
| 1640 * the current operation has been successful - keep copying. */ | |
| 1641 if (ipbCopyIndex) | |
| 1642 { | |
| 1643 TRACE_EVENT("Copying/moving in progress."); | |
| 1644 bookCopyMultiple(ipbWin, ipbMove, 0); | |
| 1645 } | |
| 1646 #endif | |
| 1647 } | |
| 1648 break; | |
| 1649 | |
| 1650 case E_PHB_BUSY: | |
| 1651 { | |
| 1652 TRACE_EVENT("E_PHB_BUSY"); | |
| 1653 } | |
| 1654 break; | |
| 1655 | |
| 1656 /* end SPR#1112 */ | |
| 1657 | |
| 1658 default: | |
| 1659 { | |
| 1660 /* indicate we haven't dealt with event | |
| 1661 */ | |
| 1662 return MFW_EVENT_PASSED; | |
| 1663 } | |
| 1664 // break; // RAVI | |
| 1665 } | |
| 1666 | |
| 1667 /* got to here, we have dealt with the event | |
| 1668 */ | |
| 1669 return MFW_EVENT_CONSUMED; | |
| 1670 } | |
| 1671 | |
| 1672 | |
| 1673 | |
| 1674 | |
| 1675 | |
| 1676 /******************************************************************************* | |
| 1677 | |
| 1678 $Function: bookCopyPhbName | |
| 1679 | |
| 1680 $Description: Copiers a phonebook name structure (for NO_ASCII set or cleared) | |
| 1681 | |
| 1682 $Returns: None | |
| 1683 | |
| 1684 $Arguments: destEntry - destination phonebook entry structure | |
| 1685 srcEntry - source phonebook entry structure | |
| 1686 maxLen - max number oc chars to be copied | |
| 1687 | |
| 1688 *******************************************************************************/ | |
| 1689 //GW Created function to copy name (and length when required). | |
| 1690 void bookCopyPhbName( T_MFW_PHB_ENTRY* destEntry, T_MFW_PHB_ENTRY* srcEntry, int maxLen ) | |
| 1691 { | |
| 1692 int len; //length of string to be copied | |
| 1693 if ((destEntry==NULL) || (srcEntry==NULL)) | |
| 1694 return; | |
| 1695 #ifdef NO_ASCIIZ | |
| 1696 //Ensure we do not copy more than the PHB array can hold. | |
| 1697 if ((maxLen < PHB_MAX_LEN) && (maxLen >0)) | |
| 1698 len = maxLen; | |
| 1699 else | |
| 1700 len = PHB_MAX_LEN; | |
| 1701 | |
| 1702 #else | |
| 1703 /*MC SPR1319, name string is only up to MAX_ALPHA_LEN in length*/ | |
| 1704 //Ensure we do not copy more than the PHB array can hold. | |
| 1705 if ((maxLen < MAX_ALPHA_LEN) && (maxLen >0)) | |
| 1706 len = maxLen; | |
| 1707 else | |
| 1708 len = MAX_ALPHA_LEN; | |
| 1709 #endif | |
| 1710 #ifdef NO_ASCIIZ | |
| 1711 memset (destEntry->name.data, 0, PHB_MAX_LEN); | |
| 1712 memcpy( destEntry->name.data, srcEntry->name.data, len); | |
| 1713 if (srcEntry->name.len < len) | |
| 1714 destEntry->name.len = srcEntry->name.len; | |
| 1715 else | |
| 1716 { //we have truncated the name - add termination (if possible) | |
| 1717 destEntry->name.len = len; | |
| 1718 if (len < PHB_MAX_LEN) | |
| 1719 { // there is space in array for termination - add it. | |
| 1720 destEntry->name.data[len] = 0x00; | |
| 1721 | |
| 1722 } | |
| 1723 } | |
| 1724 #else | |
| 1725 | |
| 1726 memcpy( destEntry->name, srcEntry->name, maxLen); | |
| 1727 #endif | |
| 1728 } | |
| 1729 | |
| 1730 | |
| 1731 | |
| 1732 /******************************************************************************* | |
| 1733 | |
| 1734 End of File | |
| 1735 | |
| 1736 *******************************************************************************/ | |
| 1737 | 
