FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiBookUtils.c @ 123:2d8124accc74
mmiSimToolkit.h: bogotab fixes
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 10 Nov 2020 06:01:15 +0000 |
parents | c0052fe355d3 |
children | ec9f955fc487 |
line wrap: on
line source
/******************************************************************************* CONDAT (UK) ******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Basic MMI $Project code: BMI (6349) $Module: PhoneBook $File: MmiBookUtils.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: This module provides utility function for use in the phone book application ******************************************************************************** $History: MmiBookUtils.c $History: MmiBookUtils.c Aug 09, 2007 DR:OMAPS00140447 x0056422(Srilekha) Description: PhoneBook: Unexpected confirmation message when making changes to entries in SIM storage. Solution: Added a new flag changename_flag to handle the Phonebook-SIM Memory entry changed event. 17 Aug, 2007 DR: OMAPS00141963 x0066814(Geetha) Description: PhoneBook: The "Options" menu is not returned after a current entry is copied. Solution: After copying, the menu control was not being returned back to the right window. Added a callback, that will be called after copying an entry, where the control wil be returned to correct window. July 11, 2007 DR:OMAPS00137908 x00666692(Asha) Description:PHONEBOOK: changing name or number under SIM storage, Please Wait message appears instead of Saved Solution :Changes made to handle the condition MFW_PHB_EXCT in the function changeInFile() which modifies the phone book entry. 27 June, 2007 DR: OMAPS00136608 x0073106(sundeep) Description:PHONEBOOK-Unexpected behavior when copying all entries from Phone to SIM Solution :Updated the execution state(MFW_PHB_EXCT) in the phonebook. June 27, 2007 DR:OMAPS00136627 x0062172(Syed) Description:PHONEBOOK: Unexpected behavior when moving all entries from Phone to SIM Solution : Return Proper Value after phb_store_entry() in bookCopy to move all the entries properly. June 05, 2007 DR:OMAPS00133241 x0061560(sateeshg) Description:ASTEC29607,SIM:The sim card should not return 9240 still. Solution :MMI should not display "Saved" after db is updated but has to wait until SIM is updated with the entry and RAT_OK is received from ACI. June 06, 2007 DR:OMAPS00132045 x0073106 Sundeep Description : Phonebook- behaviour inconsistency in the MMI when move contact Solution : changed a if condition in function bookCopyMultiple(), in the if(move). JUNE 4,07 (sateeshg) OMAPS00131777, x0061560 Phonebook - Delete all command for phonebook contacts answer "list empty" even if there are contacts in the list Solution:Updated the current status of the phonebook Apr 30,2007, OMAPS00129173, x0066814(Geetha) Description : Phone crashes if 'Delete All' is done on SIM contacts when SIM memory is empty Solution: Added a condition in bookDeleteBook to check the number of used entries in the seleted phonebook. If the condition is satified then the delete operation will proceed else an 'Empty List' dialog is displayed. Nov 17, 2006 DR:OMAPS00104376 a0393213(R.Prabakar) Description : When tried to delete the last entry either incase of SIM or Phone book (i.e. last deletion), the board resets. Solution : The crash happens because of race condition between actual deletion by ACI and status check in BMI. Now the status before deletion is stored and status check is done on this previous status. Aug 18, 2006 ER: OMAPS00089840 x0039928 Description: Changes to be made in MMI for the functionality "Delete all" ADN entries Solution: A new menu item "Delete All" is added in the phone book menu and bookDeleteBook is called to delete all the phone book entries. July 17, 2006 DR: OMAPS00082792 x0039928 Description:Changes to be done in MMI for Move all entries from SIM to FFS (Defect 76492) Solution: Condition to delete search window in deleteFromFile is modified. June 01, 2006 DR: OMAPS00079716 Description:Phonebook: List of entries is not refreshed after a phonebook entry move Solution: Added a new callback function to handle the populating of phonebook entries Feb 20, 2006 REF: OMAPS00061948 x0039928 Bug:PhoneBook-My number menu -failed. Fix: phb_read_entries is called with used entries as the no of entries if used entries are less than MAX_SEARCH_NAME. Jan 27, 2006 REF: OMAPS00061925 x0039928 Bug:Phonebook-Changing an entry and Immidiately deleting the entry failed. Fix: Phonebook is populated with phone numbers after some time and not immediately after deleting an entry. Jan 22, 2006 REF: OMAPS00061930 x0039928 Bug:PhoneBook -Change entry and view entry through Change option-failed Fix: Phonebook is populated with phone numbers after some time and not immediately while saving the changed entries. 25/10/00 Original Condat(UK) BMI version. $End // Issue Number : SPR#15671 on 24/03/04 by Ajith K.P *******************************************************************************/ /******************************************************************************* Include Files *******************************************************************************/ #define ENTITY_MFW /* includes */ #include <string.h> #include <stdio.h> #include <stdlib.h> #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "gsm.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "mfw_sys.h" #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_kbd.h" #include "mfw_lng.h" /* SPR#1428 - SH - New Editor changes */ #ifndef NEW_EDITOR #include "mfw_edt.h" #endif #include "mfw_icn.h" #include "mfw_mnu.h" #include "mfw_tim.h" #include "mfw_sim.h" #include "mfw_cm.h" #include "mfw_nm.h" #include "mfw_phb.h" #include "mfw_mme.h" #include "mfw_sat.h" #include "mfw_sms.h" #include "dspl.h" #include "ksd.h" #include "psa.h" #include "MmiMain.h" #include "MmiBookController.h" #include "MmiDummy.h" #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiMenu.h" #include "mmiCall.h" #include "Mmiicons.h" #include "MmiIdle.h" #include "MmiSoftKeys.h" #include "MmiSounds.h" #include "MmiIdle.h" #include "MmiNetwork.h" #include "mmiSat_i.h" #include "MmiAoc.h" #include "gdi.h" #include "audio.h" #include "cus_aci.h" #include "mfw_ffs.h" #include "MmiTimers.h" #include "MmiBookShared.h" #include "mmiColours.h" #include "mmiSmsRead.h"/*MC , SPR 1242 */ // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P // Issue description: Followup from 15623, this is the BMI part of this Issue. // At last, in the record "SSC09" the number is displayed with the "+" // character at the beginning of the number instead of "**21*+014543877989#". extern int menuFDN; extern T_call call_data; // Jan 27, 2006 REF: OMAPS00061925 x0039928 // Fix : Declare a extern phonebook timer handler extern T_MFW_HND PhbSearchTim; // Aug 18, 2006 ER: OMAPS00089840 x0039928 // Fix : Initialize Delete All flag and a window handler of please wait dialog. BOOL DeleteAll_flag = FALSE; T_MFW_HND waitWindel = NULL; //x0061560 Date May17,07 (sateeshg) OMAPS00133241 BOOL addname_flag = FALSE; /* Aug 09, 2007 DR:OMAPS00140447 x0056422(Srilekha) Added a new flag changename_flag to handle the Phonebook-SIM Memory entry changed event. */ BOOL changename_flag = FALSE; /******************************************************************************* Private data elements *******************************************************************************/ /* x0039928 - Lint warnings fix static T_MFW_UPN_LIST *upnList = NULL; */ /* SPR#1112 - SH - This is redundant */ //static T_phbk *GlobalPhoneBookHandle = NULL; /* SPR#1112 - SH - Internal phonebook flag */ #ifdef INT_PHONEBOOK static UBYTE ipbCopyIndex = 0; static UBYTE ipbMove = FALSE; static T_MFW_HND ipbWin = NULL; #endif // ADDED BY RAVI - 28-11-2005 EXTERN T_MFW mfw_Ucs2SIMStr(T_MFW_DCS outMode, U16 *inUcsStr, UBYTE maxOutSize, UBYTE *outMfwStr, UBYTE *outLen); EXTERN T_MFW mfw_Gsm2SIMStr(T_MFW_DCS outMode, UBYTE *inGsmStr, UBYTE maxOutSize, UBYTE *outMfwStr,UBYTE *outLen); // END RAVI - 28-11-2005 /******************************************************************************* Private Methods *******************************************************************************/ /******************************************************************************* $Function: changeName $Description: Change a phone book entry if we have a valid book selected $Returns: status of change, or MWB_PHB_FAIL if an error occurs $Arguments: book, to be updated entry, to update currentStatus, pointer to status word *******************************************************************************/ static UBYTE changeName( UBYTE book, T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *currentStatus ) { TRACE_FUNCTION( "changeName()" ); /* Aug 09, 2007 DR:OMAPS00140447 x0056422(Srilekha) */ changename_flag = TRUE; if ( book == PHB_SDN ) return MFW_PHB_FAIL; return phb_store_entry( book, entry, currentStatus ); } /******************************************************************************* $Function: deleteName $Description: Delete a phone book entry $Returns: status of delete, or MWB_PHB_FAIL if an error occurs $Arguments: book, to be updated index, index of entry to delete currentStatus, pointer to status word *******************************************************************************/ static UBYTE deleteName( UBYTE book, UBYTE index, T_MFW_PHB_STATUS *currentStatus ) { TRACE_FUNCTION( "deleteName()" ); if ( book == PHB_SDN ) return MFW_PHB_FAIL; return phb_delete_entry( book, index, currentStatus ); } /******************************************************************************* $Function: addName $Description: Add a new name to the phone book $Returns: status of change, or MWB_PHB_FAIL if an error occurs $Arguments: book, to be updated entry, to update currentStatus, pointer to status word *******************************************************************************/ static UBYTE addName( UBYTE book, T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *currentStatus ) { TRACE_FUNCTION( "addName()" ); //MC-- Commented out UPN-specific code as it causes the name string in a UPN //entry to be stored incorrectly and doesn't seem to be neccessary. //Generic code here seems to work fine for UPN { /* normal store operation */ { char temp[120]; memset(temp,'\0',100); //x0061560 Date May17,07 (sateeshg) OMAPS00133241 addname_flag = TRUE; #ifdef NO_ASCIIZ { T_MFW_PHB_TEXT buf; /*SPR 1752 check for unicode*/ if (entry->name.data[0] ==0x80) { /*MC, don't do any conversions!!*/ TRACE_EVENT("Converting Unicode 2 SIM"); sprintf(temp,"Book: %d Name %s Number %s", book, (char*)buf.data,(char*)entry->number); } else { // convert from GSM to Alpha characters bookGsm2Alpha( (UBYTE *) entry->name.data ); sprintf(temp,"Book: %d Name %s Number %s", book, (char*)entry->name.data,(char*)entry->number); } } #else sprintf(temp,"Book: %d Name %s Number %s", book, (char*)entry->name,(char*)entry->number); #endif TRACE_EVENT(temp); } entry->index = 0; return phb_store_entry( book, entry, currentStatus ); } } /******************************************************************************* File Handling Utilities *******************************************************************************/ /******************************************************************************* $Function: storeInFile $Description: Converts the name to a storeable format and stores it in the phone book $Returns: None $Arguments: phbk, pointer to phonebook structure *******************************************************************************/ void storeInFile( T_phbk *phbk ) { int i; UBYTE actual_length = 0; char debug[20]; TRACE_FUNCTION( "storeInFile()" ); /* Convert the name */ #ifdef NO_ASCIIZ /* if the pattern is GSM default format, use the function mfw_Gsm2SIMStr() here */ if (phbk->edt_buf_name[0] == 0x80)//if unicode { /*a0393213 lint warning:Possible creation of out-of-bounds pointer soln:PHB_MAX_LEN changed to MAX_ALPHA_LEN-1*/ for (i =0; i < (MAX_ALPHA_LEN-1); i+=2) //work out string length { if (phbk->edt_buf_name[i] == 0 && phbk->edt_buf_name[i+1] == 0) { if (i== 0) actual_length =0; else actual_length = i -2; break; } } phbk->edt_buf_name[0] = (UBYTE)(actual_length/2);//add string length to beginning of string phbk->edt_buf_name[1] = 0x00; /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN*/ memset(phbk->newEntry.name.data, 0,MAX_ALPHA_LEN); //convert to SIM string mfw_Ucs2SIMStr( MFW_DCS_UCS2 , (U16*)phbk->edt_buf_name, MAX_ALPHA_LEN, phbk->newEntry.name.data, &phbk->newEntry.name.len ); TRACE_EVENT( (char*)phbk->newEntry.name.data); sprintf(debug, "length:%d", phbk->newEntry.name.len); TRACE_EVENT(debug); } else { mfw_Gsm2SIMStr( MFW_DCS_7bits, (U8*)phbk->edt_buf_name, MAX_ALPHA_LEN, phbk->newEntry.name.data, &phbk->newEntry.name.len ); } #else /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN*/ strncpy( (char *)phbk->newEntry.name, (char *)phbk->edt_buf_name, MAX_ALPHA_LEN ); #endif /* update the number */ strncpy( (char *) phbk->newEntry.number, (char *) phbk->edt_buf_number, PHB_MAX_LEN ); /*SPR 1327, copy current phonebook type to new entry*/ phbk->newEntry.book = phbk->current.status.book; /*If current phonebook UPN, don't overwrite phonebook type*/ // Feb 20, 2006 REF: OMAPS00061948 x0039928 // Fix : A check is made with enum PHB_UPN of MFW instead of UPN of ACI if( phbk->newEntry.book != PHB_UPN) phbk->newEntry.book = bookActiveBook(WRITE); phbk->newEntry.index = 0; /* Add the name/number combination to the phone book and setup the current text status string */ switch ( addName( phbk->newEntry.book, &phbk->newEntry, &phbk->current.status ) ) { case MFW_PHB_OK : { /* Entry saved okay */ MmiBookSetCurrentText( TxtSaved ); } break; //x0061560 Date May16,07 (sateeshg) OMAPS00133241 case MFW_PHB_EXCT : { /* Entry saved okay */ MmiBookSetCurrentText( TxtPleaseWait ); // MmiBookSetCurrentText( TxtSaved ); } //end break; case MFW_PHB_FULL : { /* Phone book full */ MmiBookSetCurrentText( TxtPhbkFull ); } break; case MFW_PHB_FAIL : { /* Write failure */ MmiBookSetCurrentText( TxtWriteError ); } break; default: { /* No other returns possible */ } break; } } /******************************************************************************* $Function: changeInFile $Description: change the phone book entry $Returns: none $Arguments: phbk, pointer to phonebook structure *******************************************************************************/ void changeInFile( T_phbk *phbk ) { int i; int actual_length=0; TRACE_FUNCTION( "changeInFile()" ); if(phbk->current.status.book == PHB_ADN_FDN) phbk->current.status.book = PHB_ADN; //JVJE We can only store in ADN/FDN else phbk->current.status.book = phbk->current.status.book; TRACE_EVENT_P1("Current Book = %d", phbk->current.status.book); TRACE_EVENT_P1("Current Name = %d", phbk->current.selectedName); TRACE_EVENT_P1("Current Buf Name = %s", phbk->edt_buf_name); /* Convert the name */ #ifdef NO_ASCIIZ /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ if (phbk->edt_buf_name[0] == 0x80)//if unicode { /*a0393213 lint warning:Possible access of out-of-bounds pointer soln:MAX_ALPHA_LEN-1*/ for (i =0; i < MAX_ALPHA_LEN-1; i+=2) //work out string length { if (phbk->edt_buf_name[i] == 0 && phbk->edt_buf_name[i+1] == 0) { if (i== 0) actual_length =0; else actual_length = i -2; break; } } phbk->edt_buf_name[0] = (UBYTE)(actual_length/2);//add string length to beginning of string phbk->edt_buf_name[1] = 0x00; memset(phbk->current.entry[phbk->current.selectedName].name.data, 0, MAX_ALPHA_LEN); //convert to SIM string mfw_Ucs2SIMStr( MFW_DCS_UCS2, (U16*)phbk->edt_buf_name, MAX_ALPHA_LEN, phbk->current.entry[phbk->current.selectedName].name.data, &phbk->current.entry[phbk->current.selectedName].name.len ); } else { mfw_Gsm2SIMStr( MFW_DCS_7bits, (U8*)phbk->edt_buf_name, MAX_ALPHA_LEN, phbk->current.entry[phbk->current.selectedName].name.data, &phbk->current.entry[phbk->current.selectedName].name.len ); } #else strncpy( (char *) phbk->current.entry[ phbk->current.selectedName ].name, (char *) phbk->edt_buf_name, MAX_ALPHA_LEN ); #endif /* update the number */ strncpy( (char *) phbk->current.entry[ phbk->current.selectedName ].number, (char *) phbk->edt_buf_number, PHB_MAX_LEN ); /* Add the name/number combination to the phone book and setup the current text status string */ switch ( changeName( phbk->current.status.book, &phbk->current.entry[ phbk->current.selectedName ], &phbk->current.status ) ) { case MFW_PHB_OK : { /* Entry saved okay */ MmiBookSetCurrentText( TxtSaved ); } break; case MFW_PHB_FAIL : { /* Write failure */ MmiBookSetCurrentText( TxtWriteError ); } break; /* x0056422 on Aug 02,2007 for OMAPS00140447 - PhoneBook: Unexpected confirmation message when making changes to entries in SIM storage. */ // July 11, 2007 DR:OMAPS00137908 x00666692(Asha) //PHONEBOOK: changing name or number under SIM storage, Please Wait //message appears instead of Saved case MFW_PHB_EXCT : { /* Operation in progress */ MmiBookSetCurrentText( TxtPleaseWait ); // MmiBookSetCurrentText( TxtSaved ); } //end break; default: { /* No other returns possible */ } break; } } /******************************************************************************* $Function: deleteFromFile $Description: delete an entry from a phone book $Returns: None $Arguments: phbk, phone book handle, book, book to update, *******************************************************************************/ void deleteFromFile( T_phbk *phbk, UBYTE book ) { int index; T_MFW_PHB_STATUS phb_status_before_delete; /*OMAPS00104376 a0393213(R.Prabakar)*/ TRACE_FUNCTION( "deleteFromFile()" ); index = phbk->current.selectedName - phbk->current.missedCallsOffset; /*OMAPS00104376 a0393213(R.Prabakar)- getting the status of the phonebook before deletion*/ phb_status_before_delete.book=book; bookGetCurrentStatus( &phb_status_before_delete ); switch ( deleteName( book, phbk->current.entry[index].index, &phbk->current.status ) ) { case MFW_PHB_OK : { /* Entry saved okay */ MmiBookSetCurrentText( TxtEntryDeleted ); #ifdef NO_ASCIIZ phbk->current.entry[index].name.len = 0; memset((char*)phbk->current.entry[index].number, '\0', PHB_MAX_LEN); #else /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ memset((char*)phbk->current.entry[index].name, '\0', MAX_ALPHA_LEN); memset((char*)phbk->current.entry[index].number, '\0', PHB_MAX_LEN); #endif /* Move the current index to the next valid entry */ if(phbk->current.selectedName > 0) phbk->current.selectedName --; else phbk->current.selectedName = 0; if(phbk->current.index > 1) phbk->current.index--; else phbk->current.index = 1; /* And if we have a search window, perform the search to update the current valid entry */ if ( phbk->search_win ) { // July 17, 2006 DR: OMAPS00082792 x0039928 // Check used entry is 1 as delete is not complete yet as it is asynchronous. /*Nov 17,2006 OMAPS00104376 a0393213(R.Prabakar) Now the check is done with the status got before deletion instead of the status got after deletion*/ if (phb_status_before_delete.used_entries == 1) { /* empty phone book */ bookSearchDestroy( phbk->search_win ); phbk->search_win = 0; } else { /* perform the search */ //Jan 27, 2006 REF: OMAPS00061925 x0039928 // Fix : Start the phonebook timer for populating the list timStart(PhbSearchTim); } } } break; case MFW_PHB_FAIL : { /* Write failure */ MmiBookSetCurrentText( TxtWriteError ); } break; default: { /* No other action required */ } break; } } /* SPR#1112 - SH - Internal phonebook use */ #ifdef INT_PHONEBOOK /******************************************************************************* $Function: bookChangePB $Description: Change the phonebook $Returns: None $Arguments: None. *******************************************************************************/ void bookChangePB(T_MFW_HND win, UBYTE identifier, UBYTE reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; T_phbk *Phbk = (T_phbk *) win_data->user; GI_pb_SetPhonebook(identifier); bookShowInfoScreen( Phbk->win, TxtPhonebook, TxtChanged, NULL, NULL, 3000); return; } /******************************************************************************* $Function: bookCopy $Description: Copy or move a phonebook entry from one book to another $Returns: status of change, or MWB_PHB_FAIL if an error occurs $Arguments: entry - the entry to be moved or copied srcStatus - Status information about the source phonebook destStatus - Status information about the destination phonebook move - TRUE if the original record is to be deleted *******************************************************************************/ UBYTE bookCopy( T_MFW_PHB_ENTRY *entry, T_MFW_PHB_STATUS *destStatus, T_MFW_PHB_STATUS *srcStatus, UBYTE move ) { T_MFW ret; UBYTE srcIndex; UBYTE srcBook; TRACE_FUNCTION("bookCopy"); if (!destStatus->avail_entries) { /* There's no room in the destination phonebook to add the entry */ TRACE_EVENT("bookCopy: dest phonebook full"); return MFW_PHB_FULL; } srcIndex = entry->index; entry->index = 0; if (entry->name.len>destStatus->tag_len) { TRACE_EVENT("bookCopy: Alpha tag cropped"); entry->name.len = destStatus->tag_len; entry->name.data[entry->name.len] = NULL; } ret = phb_store_entry( destStatus->book, entry, destStatus ); TRACE_EVENT_P2("bookCopy: phb_store_entry book %d result %d", destStatus->book, ret); // 27 June, 2007 DR:OMAPS00136627 x0062172 Syed if ( (ret!=MFW_PHB_OK) && (ret!=MFW_PHB_EXCT) ) return ret; /* Only try to delete the entry if we are moving an entry from one book * to another. Don't try if it is an FDN entry */ TRACE_EVENT_P2("move %d, entry->book %d", move, entry->book); if (move && entry->book!=PHB_FDN) { if (( srcStatus->book == PHB_UPN) || (srcStatus->book == PHB_FDN )) srcBook = srcStatus->book; else srcBook = bookActiveBook(WRITE); ret = phb_delete_entry(srcBook, srcIndex, srcStatus); TRACE_EVENT_P3("bookCopy: phb_delete_entry book %d index %d result %d", srcStatus->book, srcIndex, ret); } /* 30 Aug ,2007 DR:OMAPS00143539 ,x0081909 ( Deepak ) */ /* If we copy an entry and then try to delete it from either SIM or Phone storage,before delete opertaion Index of an entry is restored */ entry->index = srcIndex; TRACE_EVENT("bookCopy: leaving function"); return ret; } /******************************************************************************* $Function: bookDelMoveCB $Description: callback after moving a phonebook entry $Returns: $Arguments: *******************************************************************************/ //x0pleela 01 june, 2006 DR: OMAPS00079716 static void bookDelMoveCB( T_MFW_HND win, USHORT Identifier,UBYTE reason) { T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; T_phbk *Phbk = (T_phbk *) win_data->user; bookGetCurrentStatus(&Phbk->current.status); bookMenuDestroy(Phbk->menu_options_win); if( Phbk->current.status.used_entries > 0 ) { SEND_EVENT( Phbk->search_win, SEARCH_STRING, 1, 0); winShow(Phbk->search_win ); } else { if( Phbk->search_win) { //destroy current window bookSearchDestroy(Phbk->search_win ); } } } /******************************************************************************* $Function: bookCopyCB $Description: callback after Copying a phonebook entry $Returns: $Arguments: *******************************************************************************/ //x0066814(Geetha) 17 Aug, 2007 DR: OMAPS00141963 static void bookCopyCB( T_MFW_HND win, USHORT Identifier,UBYTE reason) { T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; T_phbk *Phbk = (T_phbk *) win_data->user; bookMenuDestroy(Phbk->menu_options_win); } /******************************************************************************* $Function: bookCopySingle $Description: Copy or move a single phonebook entry $Returns: None $Arguments: None. *******************************************************************************/ void bookCopySingle(T_MFW_HND win, UBYTE identifier, UBYTE reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; T_phbk *Phbk = (T_phbk *) win_data->user; BOOL oldBook; int txtId; T_MFW_PHB_STATUS destStatus; tMmiPhbData *current = &Phbk->phbk->current; TRACE_FUNCTION("bookCopySingle"); oldBook = bookGetBookSelected(); // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) // While doing a copy from the FDN menu the destination should always be internal phonebook if(menuFDN && (call_data.calls.numCalls==0)) { destStatus.book = PHB_IPB; } else { bookSetBookSelected(!oldBook); destStatus.book = bookActiveBook(WRITE); } bookGetCurrentStatus( &destStatus ); bookSetBookSelected(oldBook); txtId = TxtStored; if (destStatus.avail_entries) { switch (bookCopy(¤t->entry[current->selectedName], &destStatus, ¤t->status, identifier)) { case MFW_PHB_OK: //27 June, 2007 DR: OMAPS00136608 x0073106(sundeep) case MFW_PHB_EXCT: txtId = TxtStored; break; case MFW_PHB_FULL: txtId = TxtPhbkFull; break; default: txtId = TxtFailed; break; } } else { txtId = TxtPhbkFull; } //x0pleela 01 June, 2006 DR: OMAPS00079716 //Calling a callback for move operation if(identifier) bookShowInformation( win, txtId, NULL, (T_VOID_FUNC)bookDelMoveCB ); else //x0066814(Geetha) 17 Aug, 2007 DR: OMAPS00141963 bookShowInformation( win, txtId, NULL, (T_VOID_FUNC)bookCopyCB ); /*if (identifier) { // Destroy options menu and regenerate address list if(Phbk->current.status.used_entries > 0) SEND_EVENT(Phbk->search_win, SEARCH_SCROLL_UP, 0, 0 ); SEND_EVENT(Phbk->search_win, SEARCH_UPDATE, 0, (void*)Phbk->current.status.book ); }*/ return; } /******************************************************************************* $Function: bookCopyMultiple $Description: Copy or move multiple phonebook entries $Returns: None $Arguments: None. *******************************************************************************/ void bookCopyMultiple(T_MFW_HND win, UBYTE move, UBYTE reason) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; T_phbk *Phbk = (T_phbk *) win_data->user; UBYTE oldBook; T_MFW_PHB_STATUS destStatus; T_MFW_PHB_STATUS srcStatus; T_MFW_PHB_LIST entries; T_MFW_PHB_ENTRY entry; UBYTE readIndex; int txtId; // T_MFW_HND info_win; // RAVI static T_MFW_HND waitWin = NULL; /* Set up some data */ TRACE_FUNCTION("bookCopyMultiple"); entries.entry = &entry; srcStatus.book = bookActiveBook(WRITE); bookGetCurrentStatus( &srcStatus ); oldBook = bookGetBookSelected(); bookSetBookSelected(!oldBook); destStatus.book = bookActiveBook(WRITE); bookGetCurrentStatus( &destStatus ); bookSetBookSelected(oldBook); /* First time entering function, set up values. * Store information so this function can be called again * when the phonebook is ready */ if (ipbCopyIndex==0) { ipbCopyIndex = srcStatus.used_entries; ipbWin = win; ipbMove = move; if (!bookGetBookSelected() && !move) { /* We need to drop out of this function briefly in order to get the dialog to display * for this particular case! Show info screen very briefly, which calls this function as * a callback. The info screen remains until we drop out of this function a second * time */ waitWin = NULL; bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, (T_VOID_FUNC)bookCopyMultiple, NULL, 100); return; } waitWin = bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, NULL, NULL, FOREVER); } TRACE_EVENT_P1("Entries in list: %d", srcStatus.used_entries); /* For special case where SIM will give no E_PHB_READY response, the * do...while operates as a loop below. Otherwise, it will only go through * once, and this function will be called repeatedly every E_PHB_READY */ do { txtId = TxtStored; if (!destStatus.avail_entries) { txtId = TxtPhbkFull; } else if (ipbCopyIndex==0) { txtId = TxtEmpty; } else { /* For moving, always delete first entry alphabetically, list moves down. * For copying, move through the list */ if (move) readIndex = 1; else readIndex = ipbCopyIndex; TRACE_EVENT_P1("Moving entry %d", readIndex); /* Read in entry and copy/move it */ phb_read_entries(srcStatus.book, readIndex, MFW_PHB_ALPHA, 1, &entries); switch (bookCopy(entries.entry, &destStatus, &srcStatus, move)) { case MFW_PHB_OK: //27 June, 2007 DR: OMAPS00136608 x0073106(sundeep) case MFW_PHB_EXCT: txtId = TxtStored; break; case MFW_PHB_FULL: txtId = TxtPhbkFull; break; default: txtId = TxtFailed; break; } ipbCopyIndex--; } }/* Is a loop in special case - see above */ while (!bookGetBookSelected() && !move && txtId==TxtStored && ipbCopyIndex>0); /* If we've finished, or an error has occurred, show info dialog */ if (ipbCopyIndex==0 || txtId!=TxtStored) { ipbCopyIndex = 0; /* Destroy the Please Wait window and show the result message */ bookShowInformation( win, txtId, NULL, NULL ); if (waitWin) { SEND_EVENT(waitWin, DIALOG_DESTROY,0,0); } if (move) { /* Destroy options menu and regenerate address list */ bookMenuDestroy(Phbk->menu_options_win); bookGetCurrentStatus( &Phbk->current.status ); //06 June, 2007 DR: OMAPS00132045 //changed the condition from used_entries to ipbCopyIndex if((ipbCopyIndex > 0)) { SEND_EVENT(Phbk->search_win, SEARCH_SCROLL_UP, 0, 0 ); SEND_EVENT(Phbk->search_win, SEARCH_UPDATE, 0, (void*)Phbk->current.status.book ); } else bookSearchDestroy(Phbk->search_win); } } return; } #endif /******************************************************************************* Public Methods *******************************************************************************/ /******************************************************************************* $Function: bookCurrentWindow $Description: This returns the window handle associated with the current MFW element $Returns: window handle of current MFW item $Arguments: none. *******************************************************************************/ tBookMfwHnd bookCurrentWindow( void ) { return mfwParent( mfwHeader() ); } /******************************************************************************* $Function: bookDefaultCallBack $Description: This is a simple call back function which is invoked when a not implemented dialog is displayed. We don't want anyone outside of this module using it so define it as static, this will still be callable from the info dialogs as it will use the reference we set up. $Returns: zero, always $Arguments: win, parent window identifier, of the window reason, for the window *******************************************************************************/ static tBookStatus bookDefaultCallBack( tBookMfwHnd win, UBYTE identifier, UBYTE reason ) { if ( win ) winShow( win ); return 0; } /******************************************************************************* $Function: bookWindowData $Description: This routine is designed to be invoked from within a menu handler or call back function and will return a pointer to the window data associated with the current MFW element. $Returns: pointer to the data area $Arguments: none. *******************************************************************************/ void *bookWindowData( void ) { tBookMfwHnd WinPtr; if ( ( WinPtr = bookCurrentWindow() ) == NULL ) return (void *) NULL; return (void *)((tBookMfwHdr *) WinPtr)->data; } /******************************************************************************* $Function: bookMenuSelectedNumber $Description: This will return the currently selected entry in the phone book, when the routine is being called from a menu handler $Returns: pointer to the selected number buffer $Arguments: none. *******************************************************************************/ char *bookMenuSelectedNumber( void ) { /* Have we got a valid window ? */ if ( ( (tBookMfwHnd) bookWindowData() ) == NULL ) return NULL; return NULL; } /******************************************************************************* $Function: bookPhoneBookLoading $Description: access routine for the local static menu area Utility functions to determine if the phone book is still in the loading state $Returns: BOOK_FAILURE if loading, otherwise BOOK_SUCCESS $Arguments: none. *******************************************************************************/ tBookStatus bookPhoneBookLoading( void ) { int temp; char tempst[20]; TRACE_FUNCTION("bookPhoneBookLoading"); temp = phb_get_mode(); sprintf(tempst,"phb_get_mode %d",temp); TRACE_EVENT(tempst); return ( (phb_get_mode() == PHB_LOADING)||(phb_get_mode() == MFW_PHB_FAIL) ) ? BOOK_FAILURE : BOOK_SUCCESS; } /******************************************************************************* $Function: bookInfoDialog $Description: Utility functions just to throw a string onto the screen primarily for debug purposes, the modal version will wait for a user input before removing the message, the non-modal will clear after three seconds $Returns: One. $Arguments: String1, String2, character strings to be displayed. *******************************************************************************/ tBookStatus bookInfoDialog( char *String1, char *String2 ) { tBookMfwHnd Win = bookCurrentWindow(); tBookDialogData Dialog; /* Initialise the dialog control block with default information */ dlg_initDisplayData_TextStr( &Dialog, TxtNull, TxtNull, String1, String2, COLOUR_STATUS); dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)bookDefaultCallBack, THREE_SECS, KEY_CLEAR); /* Show the dialog */ info_dialog( Win, &Dialog ); return 1; } /******************************************************************************* $Function: bookNotImplemented $Description: This will present an information dialog indicating the current feature is still under development. This routine will use the current MFW element to detect the handle of the parent window if the incoming window handle is NULL. $Returns: One $Arguments: Parent, window, can be NULL *******************************************************************************/ tBookStatus bookNotImplemented( tBookMfwHnd Parent ) { tBookMfwHnd Win = ( Parent ) ? Parent : bookCurrentWindow(); tBookDialogData Dialog; /* Initialise the dialog control block with default information */ dlg_initDisplayData_TextStr( &Dialog, TxtNull, TxtNull, MmiRsrcGetText( TxtNotImplemented ), NULL, COLOUR_STATUS); dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)bookDefaultCallBack, THREE_SECS, KEY_CLEAR); /* Show the dialog */ info_dialog( Win, &Dialog ); return 1; } /* Menu handler to invoke the routine above */ tBookStatus bookMenuNotImplemented( tBookMfwMenu *Menu, tBookMfwMenuItem *Item ) { return bookNotImplemented( NULL ); } /* SPR#1428 - SH - New Editor changes: No longer required */ #ifndef NEW_EDITOR /******************************************************************************* $Function: set_edt_attr $Description: Sets up the edit attribute structure with the provided parameters $Returns: None $Arguments: winPx, winPy, winSx, winSy, positioning information fgColor, colour for foreground font, mode, controls, pretty much what they say *text, initial text to be edited size, of the text (in bytes) attr, the block to be set up with the other parameters GW - Changed colour from 8 bits (foreground) to 2x32bits fgd and bgd For the colour display we pass a 32 bit word that defines the size and position of the editor. This can be either a specific size or a more generic ('middle of the screen'/full width of display) *******************************************************************************/ void bookSetEditAttributes( int zone_id, U32 colIndex, U8 font, U8 mode, U8 *controls, char *text, U16 size, MfwEdtAttr* attr) { /* Populate the structure with the parameters */ calculateWindow(attr, zone_id ); attr->edtCol = colIndex; attr->font = font; attr->mode = mode; attr->controls = controls; attr->text = text; attr->size = size; } #endif /* NEW_EDITOR */ /******************************************************************************* Name Handling Functions *******************************************************************************/ /******************************************************************************* $Function: bookGetCurrentStatus $Description: Determines the current status of the phone book $Returns: status byte $Arguments: currentStatus, pointer to structure to be populated with status information *******************************************************************************/ UBYTE bookGetCurrentStatus( T_MFW_PHB_STATUS *currentStatus ) { UBYTE temp; TRACE_FUNCTION( "bookGetCurrentStatus()" ); temp = phb_get_status( currentStatus ); { char temp[255]; sprintf(temp,"book %d max_entries %d used_entries %d aval_entries %d", currentStatus->book,currentStatus->max_entries, currentStatus->used_entries, currentStatus->avail_entries); TRACE_EVENT(temp); } return temp; } /******************************************************************************* $Function: bookFindNames $Description: Fine name in phone book $Returns: status of search $Arguments: number, number of entries to search, current, pointer to structure containing search context *******************************************************************************/ UBYTE bookFindName( UBYTE number, tMmiPhbData *current ) { UBYTE ret; int index; // , Count = 0; // RAVI UBYTE book_type, index_type; // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P // Added these variables to Fix the Issue MMI-SPR-15813 // nondigitindex => index after which '+' sign to be added // numlength = lenght of the number array. // nondigitFound = Checks whether nondigit is present in the number array or not. int nondigitindex = -1,j,numlength = 0, nondigitFound = -1; TRACE_FUNCTION( "bookFindName()" ); /* Firstly, check for an empty book */ bookGetCurrentStatus( ¤t->status ); if ( current->status.used_entries < 1 ) { current->index = 0; return MFW_PHB_OK; } //x0066692 Date:23 April 2007 DR:OMAPS00121834 // this condition ensures that stop index doesn't exceed max no. of entries can be added to a phonebook number = current->status.used_entries - current->index +1; if ( number > MAX_SEARCH_NAME ) number = MAX_SEARCH_NAME; // Feb 20, 2006 REF: OMAPS00061948 x0039928 // Fix : If used entries are less than MAX_SARCH_NAME then no. of entries // passed to the phb_read_entries is used entries. /* Okay, we have some entries to search, so initialise the current entry buffer to empty */ memset( current->entry, 0, MAX_SEARCH_CALL_LIST * sizeof( T_MFW_PHB_ENTRY ) ); current->list.entry = current->entry; current->list.num_entries = number; /* Sort out how we index the information */ book_type = current->status.book; index_type = MFW_PHB_INDEX; if ( ( book_type == bookActiveBook(WRITE) ) || ( book_type == PHB_SDN ) ) index_type = MFW_PHB_ALPHA; /* Sort out the type of search we are performing */ if ((book_type == PHB_LDN) || (book_type == PHB_LRN)|| (book_type == PHB_LMN)) index_type = MFW_PHB_INDEX; else { if ( current->KindOfSearch == SEARCH_BY_NAME ) index_type = MFW_PHB_ALPHA; else if ( current->KindOfSearch == SEARCH_BY_NUMBER ) index_type = MFW_PHB_NUMBER; else if ( current->KindOfSearch == SEARCH_BY_LOCATION ) index_type = MFW_PHB_INDEX; } /* read the appropriate entries from the phone book */ { char temp[255]; sprintf(temp,"book %d index %d indextype %d number %d", book_type,current->index,index_type,number); TRACE_EVENT(temp); } // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) //When book is ADN, we need to read only ADN entries. no need to display ADN and FDN together if (book_type == PHB_ADN) /*Quick test */ { TRACE_EVENT("book_type == PHB_ADN"); ret = phb_read_entries( PHB_ADN, current->index, index_type, number, ¤t->list ); } else { TRACE_EVENT("book_type == OTHER"); ret = phb_read_entries( book_type, current->index, index_type, number, ¤t->list ); } /* Populate the output structures */ if (current->list.result == MFW_NO_ENTRY) current->index = 0; #ifdef NO_ASCIIZ #ifdef EASY_TEXT_ENABLED for ( index = 0; index < number; index++ ) {/*MC , SPR 1242 merged in this section from b-sample build*/ /* GSM character sets */ UBYTE l_name[MAX_ALPHA_LEN];/*MC SPR 1257, name strings should use MAX_ALPHA_LEN*/ char debug[22]; int i; TRACE_EVENT( (char*)current->entry[index].name.data); TRACE_EVENT("Convert from SIM to UCS2"); TRACE_EVENT_P1("length of name string: %d", current->entry[index].name.len); /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ if (current->entry[index].name.data[0] == 0x80 ) { for (i=1; i<MAX_ALPHA_LEN; i+=1) { l_name[i+1] = current->entry[index].name.data[i]; } l_name[0] = current->entry[index].name.data[0]; l_name[1] = MAX_ALPHA_LEN; memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); /*MC, we'll just use the length provided by the MFW*/ if (current->entry[index].name.len%2 == 1)/*if length of string odd*/ current->entry[index].name.len++;/* INCREASE LENGTH BY 1*/ /*make sure all chars after length are 0*/ for (i=current->entry[index].name.len; i<MAX_ALPHA_LEN; i++) { current->entry[index].name.data[i] = 0; } for (i=0; i < MAX_ALPHA_LEN;i++) { if ( current->entry[index].name.data[i]== 0 && current->entry[index].name.data[i+1] != 0) debug[i] = '0'; else debug[i] = (char)current->entry[index].name.data[i]; } TRACE_EVENT("Decoded entry"); TRACE_EVENT(debug); } else { /*SPR2175, use new function to convert from GSM to ASCII*/ { ATB_convert_String((char*)current->entry[index].name.data, MFW_DCS_8bits, current->entry[index].name.len, (char*)l_name, MFW_ASCII, PHB_MAX_LEN, FALSE); current->entry[index].name.dcs = MFW_ASCII; memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); } } } #endif /*MC end*/ #else for ( index = 0; index < number; index++ ) { UBYTE l_name[MAX_ALPHA_LEN];/*MC SPR 1257, name strings should use MAX_ALPHA_LEN*/ TRACE_EVENT_P1("length of name string: %d", current->entry[index].name.len); /*SPR2175, use new function to convert from GSM to ASCII*/ { ATB_convert_String((char*)current->entry[index].name.data, MFW_DCS_8bits, current->entry[index].name.data.len, l_name, MFW_ASCII, PHB_MAX_LEN); current->entry[index].name.dcs = MFW_ASCII; memcpy( current->entry[index].name.data, (char*)l_name, MAX_ALPHA_LEN ); } } #endif /* Needed to make international calls from the phonebook */ for ( index = 0; index < number; index++ ) { if ( current->entry[index].ton ) { // May 24, 2004 REF: CRR MMI-SPR-15813 Ajith K P // Issue description: Followup from 15623, this is the BMI part of this Issue. // At last, in the record "SSC09" the number is displayed with the "+" // character at the beginning of the number instead of "**21*+014543877989#" // Solution: Find the location of nondigit(e.g:*, #) in the number array // and put '+' to next position if the index is less than numlength-8. This is done // as there can be ss strings(like *11*20#) attached to the number in the end. // For eg: **61#+9844093515*11*20# // If the total length is less than 8 assign this index to nondigitindex. // This solution is based on special sequences we have encountered till now. // Finds the length of the number array. numlength = strlen((char*)current->entry[ index ].number); //checks whether the length is within the limit. if(numlength <=PHB_MAX_LEN) //TISH, patch for OMAPS00144985, modified by Jinshu Wang, 2007-09-07 //start if (current->entry[ index ].number[0]=='*' || current->entry[ index ].number[0]=='#') { for( j=0; j< numlength ; j++) { if( !isdigit((char*)current->entry[ index ].number[j]) ) { // Found a nondigit can be */# nondigitFound = j; // Checking , whether the nondigit index is not at the end // part of the number array. if(j < (numlength-8)) { // Current index is less than numlength-8 nondigitindex = j; } else { if(numlength <8) { // If lenght of the number array is less than 8 // assign the index to nondigitindex // This condition might occur when the user // presses invalid short sequence nondigitindex = j; } } } } } //end if((nondigitindex == -1) && (nondigitFound> -1) && (nondigitFound < 4)) { // Nondigit is existing and it's position is less than 4 and not met // any of the above conditions. nondigitindex = nondigitFound; } // Move the contents accordingly. memmove((char *) &(current->entry[ index ].number[ nondigitindex+2]), (char *) &(current->entry[ index ].number[nondigitindex+1]), numlength - nondigitindex+1); // Add the '+' sign after the appropriate nondigit character, if any. current->entry[index].number[nondigitindex+1] = '+'; } } //} return current->result = ret; } /******************************************************************************* $Function: bookEvent $Description: Event handler for a phone book event $Returns: MFW_EVENT_CONSUMED if recognised message, otherwise MFW_EVENT_PASSED $Arguments: e, event, para, general parameter giving context of call *******************************************************************************/ int bookEvent( MfwEvt e, void *para ) { T_MFW_PHB_STATUS *status; TRACE_FUNCTION( "bookEvent" ); /* deal with the incoming event */ switch( e ) { case E_PHB_UPN_LIST : { /* x0039928 - Lint warnings fix upnList = (T_MFW_UPN_LIST *)para; */ /* tbd */ } break; case E_PHB_STATUS: { status = (T_MFW_PHB_STATUS *)para; if ( ( status->book == PHB_FDN ) || ( status->book == PHB_ADN ) ) { if ( pinsSetIsFocussed() == FOCUSSED_PINS ) backpinFDNactdeact(); } } break; case E_PHB_ERROR: { //x0061560 Date May16,07 (sateeshg) OMAPS00133241 T_MFW_HND win = mfwParent( mfw_header() ); TRACE_ERROR("E_PHB_ERROR store entry"); bookShowInformation(win, TxtError, NULL, NULL ); } break; /* SPR#1112 - SH - New events to indicate status of phonebook */ case E_PHB_READY: { // Aug 18, 2006 ER: OMAPS00089840 x0039928 // Fix : If the E_PHB_READY is for delete all then destroy the please wait window and display the string "Deleted" if( DeleteAll_flag == TRUE) { T_MFW_HND win = mfwParent( mfw_header() ); int txtid; TRACE_EVENT("E_PHB_READY Delete all"); if (waitWindel) { SEND_EVENT(waitWindel, DIALOG_DESTROY,0,0); waitWindel = NULL; txtid = TxtDeleted; bookShowInformation(win, txtid, NULL, NULL ); } DeleteAll_flag = FALSE; break; } //x0061560 Date May17,07 (sateeshg) OMAPS00133241 if(addname_flag == TRUE) { T_MFW_HND win = mfwParent( mfw_header() ); int txtid; TRACE_EVENT("E_PHB_READY Saved"); txtid = TxtSaved; bookShowInformation(win, txtid, NULL, NULL ); addname_flag = FALSE; break; } /* Aug 09, 2007 DR:OMAPS00140447 x0056422(Srilekha) */ if(TRUE == changename_flag) { T_MFW_HND win = mfwParent( mfw_header() ); int txtid; TRACE_EVENT("Saved prompt for change entry"); TRACE_EVENT("E_PHB_READY Saved"); txtid = TxtSaved; bookShowInformation(win, txtid, NULL, NULL ); changename_flag = FALSE; break; } TRACE_EVENT("E_PHB_READY"); #ifdef INT_PHONEBOOK /* SPR#1112 - SH - If we're copying or moving a list, * the current operation has been successful - keep copying. */ if (ipbCopyIndex) { TRACE_EVENT("Copying/moving in progress."); bookCopyMultiple(ipbWin, ipbMove, 0); } #endif } break; case E_PHB_BUSY: { TRACE_EVENT("E_PHB_BUSY"); } break; /* end SPR#1112 */ default: { /* indicate we haven't dealt with event */ return MFW_EVENT_PASSED; } // break; // RAVI } /* got to here, we have dealt with the event */ return MFW_EVENT_CONSUMED; } // Aug 18, 2006 ER: OMAPS00089840 x0039928 // Fix : Added a new function to delete all the phone book entries. /******************************************************************************* $Function: bookDeleteBook $Description: Delete the complete phone book entries $Returns: None $Arguments: win - Window Handler *******************************************************************************/ void bookDeleteBook(T_MFW_HND win) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; T_phbk *Phbk = (T_phbk *) win_data->user; Phbk ->current.status.book = bookActiveBook(READ); //x0061560 Date JUNE 4,07 (sateeshg) OMAPS00131777 //Updating the current status of the phonebook bookGetCurrentStatus(&Phbk ->current.status); if(Phbk ->current.status.used_entries !=0)//Apr 30,2007, OMAPS00129173, x0066814(Geetha) { if (bookGetBookSelected() ) bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, NULL, NULL, 100); else DeleteAll_flag = TRUE; if (phb_delete_book(Phbk->current.status.book) == MFW_PHB_OK) { if (!bookGetBookSelected() ) waitWindel = bookShowInfoScreen( Phbk->win, TxtPleaseWait, NULL, NULL, NULL, FOREVER); else { MmiBookSetCurrentText(TxtDeleted); bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL ); } } else { DeleteAll_flag = FALSE; MmiBookSetCurrentText(TxtFailed); bookShowInformation( Phbk->win, MmiBookCurrentText(),NULL, NULL ); } Phbk ->current.status.used_entries=0;//Apr 30,2007, OMAPS00129173, x0066814(Geetha) } else//Apr 30,2007, OMAPS00129173, x0066814(Geetha) { bookShowInformation( idle_get_window(), TxtEmptyList, NULL, NULL ); } return; } /******************************************************************************* $Function: bookCopyPhbName $Description: Copiers a phonebook name structure (for NO_ASCII set or cleared) $Returns: None $Arguments: destEntry - destination phonebook entry structure srcEntry - source phonebook entry structure maxLen - max number oc chars to be copied *******************************************************************************/ //GW Created function to copy name (and length when required). void bookCopyPhbName( T_MFW_PHB_ENTRY* destEntry, T_MFW_PHB_ENTRY* srcEntry, int maxLen ) { int len; //length of string to be copied if ((destEntry==NULL) || (srcEntry==NULL)) return; #ifdef NO_ASCIIZ //Ensure we do not copy more than the PHB array can hold. if ((maxLen < PHB_MAX_LEN) && (maxLen >0)) len = maxLen; else len = PHB_MAX_LEN; #else /*MC SPR1319, name string is only up to MAX_ALPHA_LEN in length*/ //Ensure we do not copy more than the PHB array can hold. if ((maxLen < MAX_ALPHA_LEN) && (maxLen >0)) len = maxLen; else len = MAX_ALPHA_LEN; #endif #ifdef NO_ASCIIZ memset (destEntry->name.data, 0, PHB_MAX_LEN); memcpy( destEntry->name.data, srcEntry->name.data, len); if (srcEntry->name.len < len) destEntry->name.len = srcEntry->name.len; else { //we have truncated the name - add termination (if possible) destEntry->name.len = len; if (len < PHB_MAX_LEN) { // there is space in array for termination - add it. destEntry->name.data[len] = 0x00; } } #else memcpy( destEntry->name, srcEntry->name, maxLen); #endif } /******************************************************************************* End of File *******************************************************************************/