FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiBookServices.c @ 138:a2a911a1ff36
mmiBlkLangDB.c: non-ASCII char fixes
literal non-ASCII characters in strings replaced with C octal escapes
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 14 Nov 2020 03:51:50 +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: MmiBookServices.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: This provides the implementation of service functions for use with the phone book module ******************************************************************************** $History: MmiBookServices.c Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) Bug:PhoneBook: Wrong confirmation message in Phonebook storage when copying/moving a contact after adding one or making a change Fix: ACI shall not send rAT_OK for entry addition / entry change operations in Internal PHB Hence, the "addname_flag" and "changename_flag" are immdtly reset incase of Internal PHB June 22, 2006 REF: DRT OMAPS00081761 x0012849 : Jagannatha Description:Handset crash when adding new entry with more then 20 digits to phonebook SIM card Solution: Number editor will be restricted to 20 characters when EXT1 is not supported. June 14, 2006 REF: OMAPS00079308 x0039928 Bug:Validation and Optimization of Memory consumption Fix: Memory optimization is done in bookFindNameInSpecificPhonebook to save around 450 bytes of memory. May 29, 2006 DR: OMAPS00079431 - xreddymn Description: Name field is not limited to 14 bytes in case of SIM phonebook. Solution: In bookInputStartNameEditor, limit the number of characters after checking if SIM or ME phonebook is being used. 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. June 07, 2005 REF: CRR MMI-FIX-31545 x0021334 Issue description: SIM: wrong behavior when FDN is not allocated in SST Solution: Before displaying the FDN options, a check is made if FDN is allocated. Only if FDN is allocated, the options are displayed. Sep 29, 2004 REF: CRR 25041 xvilliva Bug: add new entry in the FDN , phone gets rebooted. Fix: The bookMenuStart() is called with the window data->phbk->win, similar to the function bookFDNMenu() to avoid crash. The menu window thus created is stored, which will be deleted while phonebook menu is destroyed. Jul 29, 2004 REF: CRR 20888 Deepa M.D Bug:Message received not showing with name, name stored in phonebook Fix:Memset the structure(p_pszNumberText.data) to 0 and then memcpy. Jul 28, 2004 REF: CRR:20887 xrashmic - SASKEN Description: Current state of FDN not highlighted Fix: Instead of showing the submenu directly we call this function where we set the menu and also higlight the previously selected menu item June 25, 2004 REF: CRR 21547 xvilliva Bug: Taking blank entries in phonebook if select book is either SIM or Phone. Fix: We check for presence of either phone number or name before add/modify. Jun 23, 2004 REF: CRR MMI-SPR-21636 Rashmi C N(Sasken) Description: The confirmation for deleting entry from address book was a timed confirmation screen. Solution: Now the time is set to 'FOREVER' from 'TEN_SECS' Issue Number : SPR#12722 on 29/03/04 by Deepa M.D 25/10/00 Original Condat(UK) BMI version. $End *******************************************************************************/ /******************************************************************************* 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 "mfw_cnvt.h" //GW Added for 'mfw_SIM2GsmStr' #include "dspl.h" #include "ksd.h" #include "psa.h" #include "psa_sim.h" // June 07, 2005 REF: CRR MMI-FIX-31545 x0021334 #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 "MmiBookController.h" #include "MmiDialogs.h" #include "mmiColours.h" #include "MmiBookMenuWindow.h" /* SPR#1428 - SH - New Editor: Include needed for MmiBookInputWindow functions, see below*/ #ifdef NEW_EDITOR #ifdef EASY_TEXT_ENABLED #include "MmiChineseInput.h" #endif #endif #include "psa_sim.h" // June 22, 2006 REF: DRT OMAPS00081761 x0012849 #define TRACE_PB_DEBUG extern int menuFDN; extern T_call call_data; /******************************************************************************* Private data elements *******************************************************************************/ static MfwHnd phb; /* SPR#1112 - SH - Internal phonebook flags */ #ifdef INT_PHONEBOOK BOOL ipbBookSelected = FALSE; BOOL ipbBookAvailable = FALSE; #endif // June 14, 2006 REF: OMAPS00079308 x0039928 // Fix: All optimized code is put under flag FF_MMI_PB_OPTIM #ifdef FF_MMI_PB_OPTIM # define PB_MAX_FIND_ENTRIES 1 #else # define PB_MAX_FIND_ENTRIES 4 #endif // Jul 28, 2004 REF: CRR:20887 xrashmic - SASKEN #define FIRSTMENUITEM 0 #define SECONDMENUITEM 1 #define OLD_NUM_LENGTH 21 // June 22, 2006 REF: DRT OMAPS00081761 x0012849 /******************************************************************************* Private methods *******************************************************************************/ /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- Start */ extern BOOL addname_flag; extern BOOL changename_flag; static void mmi_int_phb_store_change_completion(); /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- End */ /******************************************************************************* $Function: bookDeleteEntryCB $Description: Delete the current entry from the phone book. This routine is invoked as a callback from the confirmation dialog and will perform the delete if the OK key has been selected. $Returns: None $Arguments: win, handle of parent window, id, of invocation, reason, for invocation *******************************************************************************/ static void bookDeleteEntryCB( T_MFW_HND win, USHORT id, UBYTE reason ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; TRACE_EVENT_P1("bookDeleteEntryCB index %d", Phbk->current.entry[Phbk->current.selectedName].index); /* This call back is invoked from the delete entry dialog confirmation screen, and will only respond to the left key (OK) being selected. */ switch ( reason ) { case INFO_KCD_LEFT: { if (( Phbk->current.status.book == PHB_UPN) || (Phbk->current.status.book == PHB_FDN )) deleteFromFile( Phbk, Phbk->current.status.book ); else deleteFromFile( Phbk, bookActiveBook(WRITE) ); /* retrieve he status of the book, and create a string for output based on the status */ bookShowInformation( Phbk->win, MmiBookCurrentText(), NULL,NULL ); SEND_EVENT(win, E_MNU_ESCAPE, NULL, NULL); } break; default: { /* No action required */ } break; } } /******************************************************************************* Public Methods *******************************************************************************/ /******************************************************************************* $Function: bookInitialise $Description: Initialise the phone book application $Returns: none, side effect is to set up the static phone book element $Arguments: none *******************************************************************************/ void bookInitialise( MfwHnd parent ) { TRACE_FUNCTION( "bookInitialise()" ); /* SPR#1112 - SH - Added E_PHB_READY and E_PHB_BUSY */ phb = phb_create( 0, (MfwEvt) (E_PHB_UPN_LIST | E_PHB_ERROR | E_PHB_STATUS | E_PHB_READY | E_PHB_BUSY), (MfwCb) bookEvent ); } /* SPR#1112 - Initialise internal phonebook */ #ifdef INT_PHONEBOOK /******************************************************************************* $Function: bookInitInternal $Description: Initialise the internal phone book application $Returns: none, side effect is to set up the static phone book element $Arguments: none *******************************************************************************/ void bookInitInternal( void ) { UBYTE intphonebook; T_MFW ret; ret = GI_pb_GetPhonebook(&intphonebook); if (ret==MFW_PHB_OK) { bookSetBookAvailable(TRUE); GI_pb_Initialise(); if (intphonebook) { bookSetBookSelected(TRUE); } else bookSetBookSelected(FALSE); } else bookSetBookAvailable(FALSE); return; } /******************************************************************************* $Function: bookGetBookSelected $Description: Is the internal phonebook selected? $Returns: TRUE if internal phonebook is selected, FALSE otherwise $Arguments: none *******************************************************************************/ BOOL bookGetBookSelected() { return ipbBookSelected; } /******************************************************************************* $Function: bookSetBookSelected $Description: Select or deselect the internal phonebook $Returns: None. $Arguments: TRUE to select internal phonebook, FALSE to select SIM phonebook *******************************************************************************/ void bookSetBookSelected(UBYTE bookSelected) { ipbBookSelected = bookSelected; return; } /******************************************************************************* $Function: bookGetBookAvailable $Description: Is the internal phonebook available for use? $Returns: TRUE if internal phonebook is available, FALSE otherwise $Arguments: none *******************************************************************************/ BOOL bookGetBookAvailable() { return ipbBookAvailable; } /******************************************************************************* $Function: bookSetBookAvailable $Description: Indicate whether or not the internal phonebook is available for use $Returns: None. $Arguments: TRUE to if internal phonebook is available, FALSE otherwise *******************************************************************************/ void bookSetBookAvailable(UBYTE bookAvailable) { ipbBookAvailable = bookAvailable; return; } #endif /******************************************************************************* $Function: bookExit $Description: Exit the phone book application, this will delete the static phone book element $Returns: none $Arguments: none *******************************************************************************/ void bookExit( void ) { TRACE_FUNCTION( "bookExit()" ); phb_delete( phb ); /* SPR#1112 - SH - Now redundant */ // bookDeletePhoneBook(); /* SPR#1112 - SH - Exit internal phonebook if activated */ #ifdef INT_PHONEBOOK if (bookGetBookAvailable()) GI_pb_Exit(); #endif return; } /******************************************************************************* $Function: bookAddName $Description: Adds a new number to the phone book $Returns: tbd $Arguments: tbd *******************************************************************************/ void bookAddName( T_MFW_HND win, char *number ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = (T_phbk *)data->phbk; /* Populate the name and number records with the provided number */ /*MC SPR 1257, name strings should use MAX_ALPHA_LEN*/ memset( Phbk->edt_buf_name, 0, MAX_ALPHA_LEN ); memcpy( Phbk->edt_buf_number, (char*)number, PHB_MAX_LEN ); /* Populate the input specifier structure and use it to perform the next action, note when we return we start adding a new name. */ TRACE_EVENT ("bookAddName"); data->phbk->input_name_win = bookInputStartNameEditor( data->win, (char*)Phbk->edt_buf_name ); } /******************************************************************************* $Function: bookShowInformation $Description: general information dialog routine $Returns: none $Arguments: parent, window, text, to be displayed, cb_function, call back on completion of window *******************************************************************************/ void bookShowInformation( MfwHnd parent, int txtId, char *text, T_VOID_FUNC cb_function ) { T_DISPLAY_DATA display_info; TRACE_FUNCTION( "bookShowInformation()" ); dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, txtId, TxtNull, COLOUR_BOOK_POPUP); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) cb_function, THREE_SECS, KEY_CLEAR ); display_info.TextString = text; /* Call Info Screen */ info_dialog( parent, &display_info ); } /******************************************************************************* $Function: bookShowInfoScreen $Description: SPR1112 - SH - Show an info screen $Returns: none $Arguments: parent, window, txtId1 - first line ID txtId2 - second line ID time - timeout for dialog *******************************************************************************/ T_MFW_HND bookShowInfoScreen( MfwHnd parent, int txtId1, int txtId2, T_VOID_FUNC cb_function, USHORT Identifier, ULONG Time) { T_DISPLAY_DATA display_info; TRACE_FUNCTION( "bookShowInformation()" ); dlg_initDisplayData_TextId(&display_info, TxtNull, TxtNull, txtId1, txtId2, COLOUR_BOOK_POPUP); dlg_initDisplayData_events(&display_info, (T_VOID_FUNC)cb_function, Time, KEY_CLEAR); display_info.Identifier = Identifier; /* Call Info Screen */ return info_dialog( parent, &display_info ); } /******************************************************************************* $Function: bookFindIndexMatchPB $Description: Locates the best match from a supplied list of phonebook entries $Returns: 0 if error, 1 if successful $Arguments: listPB, pointer to phonebook entries numEntries, number of entries in listPB srcNumberr, pointer to pattern to match $History: SPR#1727 - DS - Merged from 1.6 branch. *******************************************************************************/ int bookFindIndexMatchPB(T_MFW_PHB_LIST* listPB, UBYTE numEntries, const char* srcNumber) { int indexMatch = -1; int i = 0; int j = 0; int maxMatchChars = 0; int count; /* Number of matching characters */ int lenNum; int lenNumPB; int firstNotMatch=0; TRACE_FUNCTION("bookFindIndexMatchPB()"); #ifdef TRACE_PB_DEBUG TRACE_EVENT_P1("numEntries to examine: %d", numEntries); #endif /* TRACE_PB_DEBUG */ if ( (listPB == NULL) || (srcNumber == NULL) ) /* Invalid data */ { TRACE_EVENT("Invalid data passed to findIndexMatchPB"); return (-1); } if (numEntries <= 0) /* Invalid number of entries */ { TRACE_EVENT_P1("Invalid number of entries passed into findIndexMatchPB: %d", numEntries); return (-1); } /* Calculate length of number */ lenNum = strlen(srcNumber); #ifdef TRACE_PB_DEBUG TRACE_EVENT_P1("Len of number: %d", lenNum); #endif /* TRACE_PB_DEBUG */ /* Loop round number of entries */ for (i=0; i<numEntries; i++) { char* entryPB = (char*)listPB->entry[i].number; /* Calculate length of number in PB entry */ lenNumPB = strlen(entryPB); #ifdef TRACE_PB_DEBUG TRACE_EVENT_P2("Len of PB number for entry %d: %d", i, lenNumPB); #endif /* TRACE_PB_DEBUG */ /* Set count and loop-counter to 0 before comparing numbers */ count = 0; j = 0; /* Determine number of matching digits * Exit loop if digits don't match or if reached end of either number buffer */ while ( (!firstNotMatch) && !(j > lenNumPB) && !(j > lenNum) ) { /* Compare digits */ if (srcNumber[lenNum-j] == entryPB[lenNumPB-j]) /* Matching character */ { #ifdef TRACE_PB_DEBUG TRACE_EVENT_P1("Found match at pos %d", j); #endif /* TRACE_PB_DEBUG */ count = count + 1; } else { /* Digits don't match */ firstNotMatch=1; } /* Increment index to point at next set of digits */ j = j + 1; } /* If better match store count and index */ /* SPR#1727 - DS - Added numbersMatch() check */ if ( (count > maxMatchChars) && numbersMatch((char*)srcNumber, entryPB) ) { #ifdef TRACE_PB_DEBUG TRACE_EVENT_P2("Entry %d is better match. Matches %d chars", i, count); #endif /* TRACE_PB_DEBUG */ maxMatchChars = count; indexMatch = i; } } /* Return index of best match */ return indexMatch; } /******************************************************************************* $Function: bookFindNameInPhonebook $Description: SPR#1112 - Modified function to search in alternate phonebook. Locates the name in the current phonebook. If the current phonebook is the internal phonebook and no result is found, the SIM phonebook is also searched. $Returns: 0 if error, 1 if successful $Arguments: p_pszNumber, pointer to pattern to match, p_pEntry, pointer to buffer into which to store result. *******************************************************************************/ //GW-SPR#810-Simplified phonebook entry search based on 1.3.3 code. int bookFindNameInPhonebook( const char *p_pszNumber, T_MFW_PHB_ENTRY *p_pEntry ) { int result; TRACE_FUNCTION( "bookFindNameInPhonebook()" ); if(p_pszNumber == 0 || p_pEntry == 0) return (0); if (strlen(p_pszNumber) < 1) return (0); result = bookFindNameInSpecificPhonebook(p_pszNumber, p_pEntry); #ifdef INT_PHONEBOOK /* If not found in internal phonebook, try SIM */ if (!result && bookGetBookAvailable() && bookGetBookSelected()) { bookSetBookSelected(FALSE); result = bookFindNameInSpecificPhonebook(p_pszNumber, p_pEntry); bookSetBookSelected(TRUE); } #endif return result; } /******************************************************************************* $Function: bookFindNameInSpecificPhonebook $Description: Locates the name in a specified phone book SPR#1112 - SH - Separate this part of function, so we can call it twice $Returns: 0 if error, 1 if successful $Arguments: p_pszNumber, pointer to pattern to match, p_pEntry, pointer to buffer into which to store result. SPR#1727 - Modified to use bookFindIndexMatchPB. *******************************************************************************/ int bookFindNameInSpecificPhonebook( const char *p_pszNumber, T_MFW_PHB_ENTRY *p_pEntry ) { #ifdef NO_ASCIIZ T_MFW_PHB_TEXT p_pszNumberText; #endif T_MFW_PHB_LIST phb_list; //, new_list; // RAVI SHORT phb_index = 0; UBYTE l_name[MAX_ALPHA_LEN]; // June 14, 2006 REF: OMAPS00079308 x0039928 // Fix: All optimized code is put under flag FF_MMI_PB_OPTIM #ifndef FF_MMI_PB_OPTIM T_MFW_PHB_ENTRY temp_pEntry[PB_MAX_FIND_ENTRIES]; #endif /*MC SPR 1319*/ #ifdef EASY_TEXT_ENABLED #ifndef FF_MMI_PB_OPTIM char debug[MAX_ALPHA_LEN]; int k; #endif #endif int indexMatch; int ret; if(p_pszNumber == 0 || p_pEntry == 0) return (0); if (strlen(p_pszNumber) < 1) return (0); memset( p_pEntry, 0, sizeof(T_MFW_PHB_ENTRY) ); memset( &phb_list, 0, sizeof(phb_list) ); #ifdef FF_MMI_PB_OPTIM phb_list.entry = p_pEntry; #else phb_list.entry = temp_pEntry; #endif phb_list.num_entries = PB_MAX_FIND_ENTRIES; /* Search phonebook for up to 4 entries with the last 6 digits matching number */ #ifdef NO_ASCIIZ /* GW Set up data structure for NO_ASCIIZ */ p_pszNumberText.dcs = MFW_DCS_8bits; p_pszNumberText.len = strlen(p_pszNumber); // strcpy((char*)p_pszNumberText.data, p_pszNumber); /* cq15688 copy number into the text info structure using memcpy() instead of strcpy()3/03/04 MZ */ //Jul 29, 2004 REF: CRR 20888 Deepa M.D //First memset the structure and then memcpy. memset(p_pszNumberText.data, 0, sizeof(p_pszNumberText.data)); memcpy( (char*)p_pszNumberText.data, p_pszNumber , p_pszNumberText.len ); ret = phb_find_entries( bookActiveBook(READ), /* phonebook */ &phb_index, /* returns index in phb */ MFW_PHB_NUMBER, /* searching for number */ PB_MAX_FIND_ENTRIES, /* return max. four entry */ &p_pszNumberText, /* search this pattern */ &phb_list /* return structure */ ); #else ret = phb_find_entries( bookActiveBook(READ), /* phonebook */ &phb_index, /* returns index in phb */ MFW_PHB_NUMBER, /* searching for number */ PB_MAX_FIND_ENTRIES, /* return max. four entry */ (char *)p_pszNumber, /* search this pattern */ &phb_list /* return structure */ ); #endif //NO_ASCIIZ //Check return from phb_find_entries if (ret == MFW_PHB_FAIL) { return (0); } /* SPR#1727 - DS - Examine returned PB entries and find best match */ indexMatch = bookFindIndexMatchPB(&phb_list, phb_list.num_entries, p_pszNumber); if (indexMatch == -1) /* No match found */ { TRACE_EVENT("No match found in findIndexMatchPB !"); return (0); } #ifdef TRACE_PB_DEBUG TRACE_EVENT_P1("Match found in findIndexMatchPB. Pb entry %d", indexMatch); #endif /* TRACE_PB_DEBUG */ /* Copy matched phonebook entry details */ #ifndef FF_MMI_PB_OPTIM memcpy( p_pEntry, &temp_pEntry[indexMatch] , sizeof(T_MFW_PHB_ENTRY) ); #endif if (p_pEntry == NULL) { return (0); } /* Convert name into appropriate format */ #ifdef NO_ASCIIZ /*MC SPR 1319*/ #ifdef EASY_TEXT_ENABLED #ifndef FF_MMI_PB_OPTIM for (k=0;k<p_pEntry->name.len; k++) { if (p_pEntry->name.data[k]==0 ) { debug[k] = '0'; } else { debug[k] = p_pEntry->name.data[k]; } } TRACE_EVENT_P1("BFNIP: %s ", debug); #endif /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ if (p_pEntry->name.data[0] == 0x80) /* Unicode 0x80 style */ { /*MC, removed var "actual_length*/ int i; for (i=1; i<MAX_ALPHA_LEN; i+=1) { l_name[i+1] = p_pEntry->name.data[i]; } l_name[0] = p_pEntry->name.data[0]; l_name[1] = MAX_ALPHA_LEN; memcpy( p_pEntry->name.data, (char*)l_name, MAX_ALPHA_LEN ); if (p_pEntry->name.len%2 == 1)/*if length of string odd*/ { p_pEntry->name.len++; /*MC we have to increase the length by one as we've shifted the string up*/ } /*MC, ensure all the chars in the string after string length are 0*/ for (i=p_pEntry->name.len; i<MAX_ALPHA_LEN; i++) { p_pEntry->name.data[i]= 0; } #ifndef FF_MMI_PB_OPTIM for (k=0;k<p_pEntry->name.len; k++) { if (p_pEntry->name.data[k]==0 ) { debug[k] = '0'; } else { debug[k] = p_pEntry->name.data[k]; } } TRACE_EVENT_P1("BNFIP conv: %s", debug); sprintf(debug, "Length of phonebook entry:%d", p_pEntry->name.len); #endif } else #endif /* EASY_TEXT_ENABLED */ /* Marcus: Issue 963: 11/09/2002: Start */ { /* * bookGsm2Alpha requires ASCIIZ string - make sure it is. * This also will help calling functions that may assume ASCIIZ. */ if (sizeof(p_pEntry->name.data) > p_pEntry->name.len) { p_pEntry->name.data[p_pEntry->name.len] = '\0'; } /*SPR2175, use new function to convert from GSM to ASCII*/ { TRACE_EVENT_P1("Converting name from 8-bit to ASCII, dcs: %d", p_pEntry->name.dcs); ATB_convert_String((char*)p_pEntry->name.data, MFW_DCS_8bits, p_pEntry->name.len, (char*)l_name, MFW_ASCII, MAX_ALPHA_LEN, FALSE); p_pEntry->name.dcs = MFW_ASCII; memcpy(p_pEntry->name.data, l_name, MAX_ALPHA_LEN); } } /* Marcus: Issue 963: 11/09/2002: End */ /*MC end*/ #else bookGsm2Alpha( (UBYTE *) p_pEntry->name ); #endif /* NO_ASCIIZ */ return (1); } /******************************************************************************* $Function: bookFindNumberByPosition $Description: locate a number given the index $Returns: 0 if failure, 1 otherwise $Arguments: index of the number to find, p_pentry, return structure *******************************************************************************/ UBYTE bookFindNumberByPosition (UBYTE index,T_MFW_PHB_ENTRY* p_pEntry) { T_MFW_PHB_LIST phb_list; /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ UBYTE l_name[MAX_ALPHA_LEN]; TRACE_FUNCTION( "bookFindNumberByPosition()" ); /* only search if we have valid input information */ if( index == 0 || p_pEntry == 0 ) return 0; /* Clear the output buffers */ memset( p_pEntry, 0, sizeof( T_MFW_PHB_ENTRY ) ); memset( &phb_list, 0, sizeof( phb_list ) ); /* searc for the selected entry */ phb_list.entry = p_pEntry; phb_list.num_entries = 1; phb_read_entries( bookActiveBook(READ), index, MFW_PHB_INDEX, 1, &phb_list ); /* if we haven't found the entry return 0 */ if ( phb_list.result == MFW_ENTRY_EXIST ) return 0; /* otherwise copy the located information to the output structure */ #ifdef NO_ASCIIZ { #ifdef EASY_TEXT_ENABLED /*MC SPR 1257, name strings should use MAX_ALPHA_LEN*/ int i; if (p_pEntry->name.data[0] == 0x80 ||p_pEntry->name.data[0]== 0x00) { for (i=1; i<MAX_ALPHA_LEN; i+=1) { l_name[i+1] = p_pEntry->name.data[i]; } l_name[0] = p_pEntry->name.data[0]; l_name[1] = MAX_ALPHA_LEN; memcpy( p_pEntry->name.data, (char*)l_name, MAX_ALPHA_LEN ); p_pEntry->name.len++;/* = actual_length;*/ } else #endif /*SPR2175, use new function to convert from GSM to ASCII*/ if (p_pEntry->name.dcs == MFW_DCS_8bits && p_pEntry->name.data[0] != 0x80) { ATB_convert_String((char*)p_pEntry->name.data, MFW_DCS_8bits, p_pEntry->name.len, (char*)l_name, MFW_ASCII, MAX_ALPHA_LEN, FALSE); p_pEntry->name.dcs = MFW_ASCII; memcpy(p_pEntry->name.data, l_name, MAX_ALPHA_LEN); } } #else bookGsm2Alpha( (UBYTE *) p_pEntry->name ); #endif /* successful return status */ return 1; } /******************************************************************************* $Function: bookCallIndex $Description: Calls the number in the physical index $Returns: status from the phb_read_entries routine $Arguments: index, of the number to call *******************************************************************************/ int bookCallIndex( UBYTE index ) { T_MFW_PHB_LIST phb_list; T_MFW_PHB_ENTRY entry; UBYTE status; TRACE_FUNCTION( "bookCallIndex()" ); memset( &entry, 0, sizeof( T_MFW_PHB_ENTRY ) ); memset( &phb_list, 0, sizeof( phb_list ) ); phb_list.entry = &entry; phb_list.num_entries = 1; if ( ( status = phb_read_entries( bookActiveBook(READ), index, MFW_PHB_PHYSICAL, 1, &phb_list ) ) == MFW_PHB_OK ) callNumber( entry.number ); return status; } /******************************************************************************* $Function: bookGsm2Alpha $Description: Convert a string from it's GSM to alpha characters $Returns: none $Arguments: alpha, pointer to string to be converted (Must be null terminated string) *******************************************************************************/ void bookGsm2Alpha( UBYTE *alpha ) { int index; int length=0; if (alpha != NULL) { length = strlen( (char *) alpha ); } else { return; } for ( index = 0; index < length; index++ ) alpha[index] = alpha[index] & 0x7F; } /******************************************************************************* $Function: bookActiveBook $Description: Determine if the current active book is restricted or not $Returns: PHB_FDN if restricted, PHB_ADN otherwise $Arguments: None *******************************************************************************/ UBYTE bookActiveBook( int process ) { TRACE_FUNCTION( "bookActiveBook()" ); /* SPR#1112 - SH - Return internal phonebook ID when appropriate */ // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) // To get FDN book, when FDN is disabled, but only when accessing from FDM menu and not while we are in active call if(menuFDN && (call_data.calls.numCalls==0)) { return PHB_FDN; } #ifdef INT_PHONEBOOK if (bookGetBookAvailable() && bookGetBookSelected()) return PHB_IPB; #endif // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) // When FDN is disabled we need to display only ADN entries in the phonebook menu. // We now return PHB_ADN instead of PHB_ADN_FDN. if(process == READ) return ( phb_get_mode() == PHB_RESTRICTED ) ? PHB_FDN : PHB_ADN; else if(process == WRITE) return ( phb_get_mode() == PHB_RESTRICTED ) ? PHB_FDN : PHB_ADN; return PHB_NONE; /*a0393213 warnings removal-added return statement*/ } /******************************************************************************* $Function: bookMemoryView $Description: Display the memory status $Returns: None $Arguments: None *******************************************************************************/ void bookMemoryView( void ) { T_MFW_HND win = mfwParent( mfw_header() ); T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; char Buffer[16]; int TxtToShow; /* Determine which book we are currently using */ data->phbk->current.status.book = bookActiveBook(READ); /* retrieve he status of the book, and create a string for output based on the status */ #if(BOARD!=61) Buffer[0] = '\0'; // OMAPS00042166 - RAVI /*a0393213 warnings removal-== changed to =*/ #endif if ( bookGetCurrentStatus( &data->phbk->current.status ) == MFW_PHB_OK ) { /* SPR#1112 - Internal phonebook - show the current selected phonebook*/ #ifdef INT_PHONEBOOK if (bookGetBookAvailable() && bookGetBookSelected()) TxtToShow = TxtPhone; else TxtToShow = TxtSIM; #else TxtToShow = TxtUsed; #endif sprintf( Buffer, "%d/%d", data->phbk->current.status.used_entries, data->phbk->current.status.max_entries ); } else TxtToShow = TxtReadError; { T_DISPLAY_DATA display_info; dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtToShow, TxtNull , COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_CLEAR ); display_info.TextString2 = Buffer; /* Call Info Screen */ info_dialog( win, &display_info ); } } /******************************************************************************* $Function: bookDeleteEntry $Description: Delete the current entry from the phone book. This routine doesn't actually perform the deletion, it sets up a confirmation dialog, where the call back function is used to perform the deletion (Refer above) $Returns: None $Arguments: None *******************************************************************************/ void bookDeleteEntry( T_MFW_HND Window) { tBookDialogData Dialog; /* Initialise the dialog control block with default information */ dlg_initDisplayData_TextId( &Dialog, TxtSoftOK, TxtCancel, TxtPressOk, TxtDelete, COLOUR_STATUS); // Jun 23, 2004 REF: CRR MMI-SPR-21636 Rashmi C N(Sasken) // Description: The confirmation for deleting entry from address book was a timed confirmation // screen. // Solution: Now the time is set to 'FOREVER' from 'TEN_SECS' dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)bookDeleteEntryCB, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); /* Show the dialog */ info_dialog( Window, &Dialog ); } /******************************************************************************* $Function: bookActivateFDN $Description: information screen to tell user to activate FDN $Returns: None $Arguments: None *******************************************************************************/ void bookActivateFDN( T_MFW_HND window ) { tBookDialogData Dialog; /* Initialise the dialog control block with default information */ dlg_initDisplayData_TextId( &Dialog, TxtNull, TxtNull, TxtPlease, TxtActivateFDN, COLOUR_STATUS); dlg_initDisplayData_events( &Dialog, (T_VOID_FUNC)NULL, FOUR_SECS, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); /* Show the dialog */ info_dialog( window, &Dialog ); } /* SPR#1428 - SH - New Editor: moved the following two functions * from MmiBookInputWindow.c, which is now a redundant file */ #ifdef NEW_EDITOR /******************************************************************************* $Function: bookInputStartNumberEditor $Description: Start the input handler using default properties $Returns: Handle of newly created window, or NULL if failure $Arguments: parent, parent window handle, buffer, input buffer *******************************************************************************/ MfwHnd bookInputStartNumberEditor( MfwHnd parent, void *buffer ) { T_AUI_EDITOR_DATA editor_data; U16 editor_num_length = NUMBER_LENGTH;; TRACE_FUNCTION ("bookInputStartNumberEditor()"); // June 22, 2006 REF: DRT OMAPS00081761 x0012849 // Number length can be upto 41 when EXT1 is allocated and activated in SIM service table // 40 characters + 1 Null character switch(bookActiveBook(WRITE)) { case PHB_ADN: TRACE_EVENT("ADN book is selcted"); if (sim_serv_table_check(SRV_EXT1) == ALLOCATED_AND_ACTIVATED) { editor_num_length = NUMBER_LENGTH; TRACE_EVENT("SIM is EXT1 supported"); } else { // June 22, 2006 REF: DRT OMAPS00081761 x0012849 // When EXT1 is not supported Number can be upto 20 characters. editor_num_length = OLD_NUM_LENGTH; TRACE_EVENT("EXT1 is not supported for this SIM"); } break; case PHB_FDN: TRACE_EVENT("FDN book is selcted"); // June 22, 2006 REF: DRT OMAPS00081761 x0012849 //If EXT2 is present in service table then the FDN phone number can go upto 40 digits. if (sim_serv_table_check(SRV_EXT2) == ALLOCATED_AND_ACTIVATED) { editor_num_length = NUMBER_LENGTH; TRACE_EVENT("SIM is EXT2 supported"); } else { // June 22, 2006 REF: DRT OMAPS00081761 x0012849 // When EXT1 is not supported Number can be upto 20 characters. editor_num_length = OLD_NUM_LENGTH; TRACE_EVENT("EXT2 is not supported for this SIM"); } break; case PHB_IPB: // Internal phone book TRACE_EVENT("IPB - Internal phone book selected"); editor_num_length = NUMBER_LENGTH; break; default: TRACE_EVENT("Selected phone book is other than ADN,FDN,IPB"); editor_num_length = NUMBER_LENGTH; break; } TRACE_EVENT_P1 ("Number length = %d ",editor_num_length); AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, NUMBER_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)bookAddNumberCB); // Change by Sasken ( Deepa M.d) on March 29th 2004 // Issue Number : MMI-SPR-12722 // Subject: Right softkey should be "Back" when the editor is empty // Bug : Right softkey should be "Back" when the editor is empty // Solution : Added alternative string for the right softkey tobe displayed when the editor is empty AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtEnterNumber, NULL); AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); // June 22, 2006 REF: DRT OMAPS00081761 x0012849 // Changed the limit frommm NUMBER_LENGTH to editor_num_length. AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, editor_num_length); AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); return AUI_edit_Start(parent, &editor_data); } /******************************************************************************* $Function: bookInputStartNameEditor $Description: Start the input handler using default properties $Returns: Handle of newly created window, or NULL if failure $Arguments: parent, parent window handle, buffer, input buffer *******************************************************************************/ MfwHnd bookInputStartNameEditor( MfwHnd parent, void *buffer ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) parent )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; T_AUI_EDITOR_DATA editor_data; U16 editor_length; TRACE_FUNCTION ("bookInputStartNameEditor()"); /* xreddymn OMAPS00079431 May-29-2006 * Restrict the number of characters that the user can input for name * based on which phonebook is selected. */ if(bookGetBookSelected() == TRUE) { /* For ME phonebook use MAX_ALPHA_LEN */ editor_length = MAX_ALPHA_LEN; } else { /* For SIM phonebook, restrict length to 14 */ editor_length = 15; } /* Set up the default parameters for the input window */ #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) /*MC, the chinese editor MUST have a unicode string as input*/ /*MC , SPR 1242 merged in from b-sample build*/ if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { T_CHINESE_DATA chinese_data; chinese_data.TextString = (char*) Phbk->edt_buf_name; if (chinese_data.TextString[0]== 0)//if, empty string { chinese_data.TextString[0] = (char)0x80;//give string Unicode tag /*a0393213 lint warnings removal-typecast done*/ chinese_data.TextString[1] = 0x7F; } else { if (chinese_data.TextString[0]!= (char)0x80)/*If ASCII string*//*a0393213 lint warnings removal-typecast done*/ { /*SPR 1752, if ASCII string, use a latin editor*/ AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, NUMBER_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)bookAddNameCB); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtEnterName, NULL); /* xreddymn OMAPS00079431 May-29-2006: Length changes based on selected phonebook */ AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, editor_length); AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR); return AUI_edit_Start(parent, &editor_data); } } /*MC end*/ chinese_data.Callback = (T_AUI_EDIT_CB)bookAddNameCB; chinese_data.Identifier = INPUT_LEFT ; chinese_data.LeftSoftKey = TxtSave; chinese_data.DestroyEditor = TRUE; /* xreddymn OMAPS00079431 May-29-2006: Length changes based on selected phonebook */ chinese_data.EditorSize = (USHORT)((editor_length-4)/2);//i.e.8 return chinese_input(parent, &chinese_data); } else #endif /* CHINESE_MMI && EASY_TEXT_ENABLED */ { AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, NUMBER_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)bookAddNameCB); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtEnterName, NULL); /*SPR 1752*/ #ifdef NO_ASCIIZ if (Phbk->edt_buf_name[0] ==0x80) /* xreddymn OMAPS00079431 May-29-2006: Length changes based on selected phonebook */ AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, &Phbk->edt_buf_name[2], editor_length/2 -2); else #endif /* xreddymn OMAPS00079431 May-29-2006: Length changes based on selected phonebook */ AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, editor_length); AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR); return AUI_edit_Start(parent, &editor_data); } } /******************************************************************************* $Function: bookInputDestroy $Description: Destroy Input Window $Returns: None $Arguments: Handle of window to be destroyed *******************************************************************************/ void bookInputDestroy( MfwHnd window ) { TRACE_FUNCTION ("bookInputDestroy()"); /*MC SPR 1752, send destroy event to window*/ SEND_EVENT( window, E_ED_DESTROY, 0, 0 ); } extern T_MFW_HND PhbSearchTim; /******************************************************************************* $Function: bookAddNameCB $Description: default call back for name entry $Returns: None $Arguments: win, handle of parent window, reason, for invocation *******************************************************************************/ void bookAddNameCB( T_MFW_HND win, USHORT Identifier, SHORT reason ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; TRACE_FUNCTION("bookAddNameCB"); switch (reason) { case INFO_KCD_LEFT: { /* Construct a new entry to be written to the phone book */ /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ if (Phbk->edt_buf_name[0] == 0x80 )//MC, if unicode { //MC, if empty string, remove 0x80 at beginning if (Phbk->edt_buf_name[2]==0x00 && Phbk->edt_buf_name[3] == 0x00) memset(Phbk->edt_buf_name, 0, MAX_ALPHA_LEN); } // xvilliva SPR21547 We check for presence of either phone number or name. // We add or modify the entry and flash an alert correspondingly. if(strlen((char *) Phbk->edt_buf_number)>0 || strlen((char *)Phbk->edt_buf_name)>0) { /* Store in the current phone book */ if ( Phbk->UpdateAction == CREATE_ENTRY ) storeInFile( Phbk ); else if ( Phbk->UpdateAction == MODIFY_EXISTING ) changeInFile( Phbk ); bookShowInformation( win, MmiBookCurrentText(), NULL,NULL ); /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- Start */ mmi_int_phb_store_change_completion(); /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- End */ } else bookShowInformation( win, TxtInvalidInput, NULL,NULL ); /* And shut down, clearing the number and name windows as we go */ if ( Phbk->input_number_win ) { AUI_edit_Destroy(Phbk->input_number_win); Phbk->input_number_win = 0; } /*SPR 1752, send destroy event rather than calling destroy function*/ SEND_EVENT( Phbk->input_name_win, E_ED_DESTROY, 0, 0 ); Phbk->input_name_win = 0; // Jan 22, 2006 REF: OMAPS00061930 x0039928 // Fix : Start the phonebook timer in case of trying to modify the existing entry if ( Phbk->UpdateAction == MODIFY_EXISTING ) timStart(PhbSearchTim); /*MC-- get rid of search window(and options menu), if just changed a chinese entry (prevent showing scrambled entry)*/ if ( Phbk->UpdateAction == MODIFY_EXISTING && Mmi_getCurrentLanguage()==CHINESE_LANGUAGE) { bookMenuDestroy(Phbk->menu_options_win); Phbk->menu_options_win=0; bookSearchDestroy( Phbk->search_win); Phbk->search_win=0; } } break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: /* Both right and HUP can do the same task here */ /*SPR 1752, send destroy event rather than calling destroy function*/ SEND_EVENT( Phbk->input_name_win, E_ED_DESTROY, 0, 0 ); Phbk->input_name_win = 0; break; default: { /* otherwise no action to be performed */ break; } } if (Phbk->root_win==Phbk->win) /*To destroy the phonebook when entering from idle*/ bookPhonebookDestroy(Phbk->win); } /******************************************************************************* $Function: bookAddNumberCB $Description: Default call back for number entry $Returns: None $Arguments: win, parent window, reason, for call back *******************************************************************************/ void bookAddNumberCB( T_MFW_HND win, USHORT Identifier, SHORT reason ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; switch ( reason ) { case INFO_KCD_LEFT: data->phbk->input_name_win = bookInputStartNameEditor( data->win, data->phbk->edt_buf_name ); break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: /* Both right and HUP can do the same task here */ AUI_edit_Destroy( data->phbk->input_number_win ); data->phbk->input_number_win = 0; break; default: /* otherwise no action to be performed */ break; } } #else /* NEW EDITOR */ /******************************************************************************* $Function: bookAddNameCB $Description: default call back for name entry $Returns: None $Arguments: win, handle of parent window, reason, for invocation *******************************************************************************/ void bookAddNameCB( T_MFW_HND win, UBYTE reason ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; T_phbk *Phbk = data->phbk; TRACE_FUNCTION("bookAddNameCB"); switch (reason) { case INPUT_LEFT: { /* Construct a new entry to be written to the phone book */ #ifdef NO_ASCIIZ /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ if (Phbk->edt_buf_name[0] == 0x80 )//MC, if unicode { //MC, if empty string, remove 0x80 at beginning if (Phbk->edt_buf_name[2]==0x00 && Phbk->edt_buf_name[3] == 0x00) memset(Phbk->edt_buf_name, 0, MAX_ALPHA_LEN); } #endif /* Store in the current phone book */ if ( Phbk->UpdateAction == CREATE_ENTRY ) storeInFile( Phbk ); else if ( Phbk->UpdateAction == MODIFY_EXISTING ) changeInFile( Phbk ); bookShowInformation( win, MmiBookCurrentText(), NULL,NULL ); /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- Start */ mmi_int_phb_store_change_completion(); /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- End */ /* And shut down, clearing the number and name windows as we go */ if ( Phbk->input_number_win ) { SEND_EVENT( Phbk->input_number_win, INPUT_DESTROY, 0, 0 ); Phbk->input_number_win = 0; } SEND_EVENT( Phbk->input_name_win, INPUT_DESTROY, 0, 0 ); Phbk->input_name_win = 0; #ifdef NO_ASCIIZ /*MC-- get rid of search window(and options menu), if just changed a chinese entry (prevent showing scrambled entry)*/ if ( Phbk->UpdateAction == MODIFY_EXISTING &&Mmi_getCurrentLanguage()==CHINESE_LANGUAGE) { bookMenuDestroy(Phbk->menu_options_win); Phbk->menu_options_win=0; bookSearchDestroy( Phbk->search_win); Phbk->search_win=0; } #endif } break; case INPUT_RIGHT: case INPUT_CLEAR: { /* Both right and clear can do the same task here */ SEND_EVENT( Phbk->input_name_win, INPUT_DESTROY, 0, 0 ); Phbk->input_name_win = 0; } break; default: { /* otherwise no action to be performed */ break; } } if (Phbk->root_win==Phbk->win) /*To destroy the phonebook when entering from idle*/ bookPhonebookDestroy(Phbk->win); } /******************************************************************************* $Function: bookAddNumberCB $Description: Default call back for number entry $Returns: None $Arguments: win, parent window, reason, for call back *******************************************************************************/ void bookAddNumberCB( T_MFW_HND win, UBYTE reason ) { T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; tBookStandard *data = (tBookStandard *) win_data->user; switch ( reason ) { case INPUT_LEFT: { data->phbk->input_name_win = bookInputStartNameEditor( data->win, data->phbk->edt_buf_name ); } break; case INPUT_RIGHT: case INPUT_CLEAR: { /* Both right and clear can do the same task here */ SEND_EVENT( data->phbk->input_number_win, INPUT_DESTROY, 0, 0 ); data->phbk->input_number_win = 0; } break; default: { /* otherwise no action to be performed */ break; } } } #endif /* NEW_EDITOR */ // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) // This is called when we exit the FDN Numbers menu. So unsetting the menuFDN flag here void fdn_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) { TRACE_EVENT("fdn_menu_cb"); menuFDN=0; } // May 3, 2004 REF: CRR MMI-SPR-18555 Rashmi C N(Sasken) // This is called to display the FDN Numbers menu. The menuFDN flag is set here int bookFDNMenu(MfwMnu* menu, MfwMnuItem* item) { T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; menuFDN=1; // Sep 29, 2004 REF: CRR 25041 xvilliva // The bookMenuStart() is called with the window data->phbk->win, // similar to the function bookFDNMenu() to avoid crash. The menu window // thus created is stored, which will be deleted while phonebook menu is // destroyed. data->phbk->menu_call_options_win_2 = bookMenuStart( data->phbk->win, bookNameMenuFDNAttributes(),0); SEND_EVENT(data->phbk->menu_call_options_win_2, ADD_CALLBACK, NULL, (void *)fdn_menu_cb); return 0; /* to remove warning Aug - 11 */ } // Jul 28, 2004 REF: CRR:20887 xrashmic - SASKEN // Description: Current state of FDN not highlighted // Fix: Instead of showing the submenu directly we call this function // where we set the menu and also higlight the previously selected menu item extern MfwMnuAttr *FDNMenu(void); void settingsFocusFDNCurSel(void) { UBYTE CurSel; //, state; // RAVI T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; // Sep 29, 2004 REF: CRR 25041 xvilliva // The bookMenuStart() is called with the window data->phbk->win, // similar to the function bookFDNMenu() to avoid crash. The menu window // thus created is stored, which will be deleted while phonebook menu is // destroyed. data->phbk->menu_options_win_2= bookMenuStart(data->phbk->win, FDNMenu(), 0); CurSel = (phb_get_mode() == PHB_RESTRICTED)?FIRSTMENUITEM:SECONDMENUITEM; SEND_EVENT(data->phbk->menu_options_win_2, DEFAULT_OPTION, NULL, &CurSel); } // June 07, 2005 REF: CRR MMI-FIX-31545 x0021334 // Issue description: SIM: wrong behavior when FDN is not allocated in SST // Added this function to check if FDN is allocated void checkFDNSupport(void) { T_MFW_HND win = mfw_parent(mfw_header()); UBYTE serv_stat; T_DISPLAY_DATA display_info; // Check in SIM service table if FDN is allocated. If not allocated, display this info dialog /* x0045876, 14-Aug-2006 (WR - "serv_stat" was set but never used) */ serv_stat = sim_serv_table_check(SRV_FDN); /*if ((serv_stat = sim_serv_table_check(SRV_FDN)) EQ NO_ALLOCATED)*/ if (serv_stat EQ NO_ALLOCATED) { dlg_initDisplayData_TextId(&display_info, TxtSoftOK, NULL, TxtNotSupported, TxtNull, COLOUR_STATUS); dlg_initDisplayData_events(&display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_LEFT | KEY_RIGHT); info_dialog (win, &display_info); } else // Else show the FDN menu and set focus on current selection settingsFocusFDNCurSel(); } /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- Start */ /******************************************************************************* $Function: mmi_int_phb_store_change_completion $Description: Reset all flags on adding / editing an Internal PHB Entry $Returns: None $Arguments: None *******************************************************************************/ static void mmi_int_phb_store_change_completion() { /* Reset the "add" and "change" flags only incase of Internal PHB */ if ( bookGetBookSelected() == TRUE ) { addname_flag = FALSE; changename_flag = FALSE; } return; } /* Sep 20, 2006 REF: OMAPS00145786 x0080701 (Bharat) -- End */ /******************************************************************************* End of File *******************************************************************************/