FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiBookSearchWindow.c @ 301:4bb5772a05a3
AT%SPVER: new command for setting custom speech version lists
The speech version list in the Bearer Capability IE tells the network
which speech codecs are supported by the MS, and in which order of
preference. The standard behaviour is to list all codecs that are
supported by the hw+fw platform, and the standard preference order
is newer over older, FR over HR. But sometimes it is desirable
(for network testing) to artificially restrict which codecs the test MS
will declare as supported, and/or to list them in some peculiar
non-standard order of preference. Add a new private AT command,
AT%SPVER, allowing the user to set and clear custom speech version
lists for the Bearer Capability IE composer in CC.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 May 2023 21:43:10 +0000 |
parents | ec9f955fc487 |
children |
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: MmiSearchWindow.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: This module provides the phone book search window functionality for the phone book module of the basic MMI ******************************************************************************** $History: MmiSearchWindow.c 23 April 2007 DR:OMAPS00121834, x0066692 Asha Description: Phonebook -> Phonebooksearch is pointing to the first entry when no of entries in the phonebook is >240 Fix: added the check to restrict the max_stop_index to max no availabe entries and made cursor point to the correct entry in the phonebook. 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. CRR: 25302 - xpradipg 10 Nov 2004 Description: Should be able to select the number fro the phonebook while sending MMS/EMS. Solution: The new feature to select the number from phonebook while sending MMS/EMS is added Oct 26, 2004 REF: CRR 25354 xkundadu Description: Phonebook: After entering precise name to search and then trying to delete using RSK, first character is not deleted Fix: If only one character is present in the editor and delete key is pressed, delete the editor buffer and update the editor view. Aug 16, 2004 REF: CRR 24323 Deepa M.D Bug:Clenup of sprintf used for tracing Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX 25/10/00 Original Condat(UK) BMI version. 20/02/02 Reinstated editor when in Chinese language by removing "if not Chinese" conditions SPR 1742 $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" //mfw_Gsm2SIMStr prototype #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 "mmiSmsMenu.h" #include "mmismssend.h" #include "MmiLists.h" #include "mmiSmsRead.h" /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR #include "ATBCommon.h" #include "ATBDisplay.h" #include "ATBEditor.h" #include "AUIEditor.h" #include "AUITextEntry.h" #endif typedef struct { T_MMI_CONTROL mmi_control; T_MFW_HND chinese_search_win; /* MFW win handler */ T_MFW_HND parent; ListMenuData * menu_list_data; } T_CHINESE_SEARCH_INFO; #include "mmiColours.h" //CRR: 25302 - xpradipg 10 Nov 2004 //extern MmsSend_PHBK_exec_cb(T_MFW_HND win, USHORT event, void *parameter); /******************************************************************************* Private Methods *******************************************************************************/ //#define TIME_TRACE_EVENT TRACE_EVENT #ifndef TIME_TRACE_EVENT #define TIME_TRACE_EVENT #endif /******************************************************************************* $Function: bookSearchDialog $Description: dialog handler for the search window functionality $Returns: None $Arguments: win, window handle event, event to be handled value, not used parameter, not used *******************************************************************************/ void bookSearchDialog( T_MFW_HND win, USHORT event, SHORT value, void *parameter ) { T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; tMmiPhbData *Current = &data->phbk->current; MfwMnu *mnu; //Jan 22, 2006 REF: OMAPS00061930 x0039928 // Fix : Add a local variable search_string char search_string[MAX_ALPHA_LEN]; //x0066692 Date:23 April 2007 DR:OMAPS00121834, Asha //Fix for phone book search issue - when phonebook has more than 240 entries. UBYTE max_search_name; TRACE_FUNCTION( "bookSearchDialog()" ); switch( event ) { case SEARCH_INIT: { /* No initialisation required */ } break; case SEARCH_SCROLL_UP: { /*MC SPR 1541, flag to show whether we've scrolled off-screen and need to update the portion of the list displayed*/ BOOL get_new_screen = FALSE; /* Scroll up */ if ( ( Current->index == 1 ) && ( Current->selectedName == 0 ) ) { if ( Current->status.used_entries < MAX_SEARCH_NAME ) Current->selectedName = Current->status.used_entries - 1; else { Current->selectedName = MAX_SEARCH_NAME - 1; /*SPR 1541, we're scrolling up from the first item in the list and are to go to the end*/ get_new_screen = TRUE; } Current->index = Current->status.used_entries - Current->selectedName; } else { if (Current->selectedName == 0) { Current->index--; /*SPR 1541, we've just come off the top of the screen*/ get_new_screen = TRUE; } else Current->selectedName--; } mnu = (MfwMnu *) mfwControl( data->menu ); mnu->lCursor[mnu->level] = Current->selectedName; /*SPR 1541, only update the list if flag set*/ if (get_new_screen == TRUE) bookFindName( MAX_SEARCH_NAME, &data->phbk->current ); } break; case SEARCH_SCROLL_DOWN: { /*MC SPR 1541, flag to show whether we've scrolled off-screen and need to update the portion of the list displayed*/ BOOL get_new_screen = FALSE; /* Scroll Down */ if ( ( Current->index + Current->selectedName ) == Current->status.used_entries ) { Current->index = 1; Current->selectedName = 0; /*SPR 1541, we've come off the end of the list and are to go back to the beginning*/ get_new_screen = TRUE; } else { if ( Current->selectedName == MAX_SEARCH_NAME - 1 ) { Current->index++; /*SPR 1541, we've just come off the bottom of the screen*/ get_new_screen = TRUE; } else Current->selectedName++; } mnu = (MfwMnu *) mfwControl( data->menu ); mnu->lCursor[mnu->level] = Current->selectedName; /*SPR 1541, only update the list if flag set*/ if (get_new_screen == TRUE) bookFindName( MAX_SEARCH_NAME, &data->phbk->current ); } break; case SEARCH_STRING: { { //Jan 22, 2006 REF: OMAPS00061930 x0039928 //Fix : Copy the number to be searched into the search_string variable and give a search for it if ( value == TRUE) strcpy(search_string,(char*)data->phbk->edt_buf_name); else strcpy(search_string,(char*)data->edtBuf); /* Find name */ Current->index = Current->index + Current->selectedName; if ( bookSearchName( search_string, MAX_SEARCH_NAME, Current ) == MFW_PHB_OK ) { //x0066692 Date:23 April 2007 DR:OMAPS00121834, Asha //Fix is added to make cursor point to the correct entry in the phonebook. max_search_name = Current->status.used_entries - Current->index +1; if ( max_search_name > MAX_SEARCH_NAME ) max_search_name = MAX_SEARCH_NAME; if ( Current->index > ( Current->status.used_entries + 1 - max_search_name ) ) { if ( Current->status.used_entries > MAX_SEARCH_NAME ) { Current->selectedName = Current->index - Current->status.used_entries + max_search_name - 1; Current->index = Current->index - Current->selectedName; } else { Current->selectedName = Current->index - 1; Current->index=1; } /* go find the name */ bookFindName(MAX_SEARCH_NAME,&data->phbk->current); } else { Current->selectedName =0; } /* update the menu */ /* SPR881 - SH - Move name find to below */ } else {/*SPR 2233, if no name found, go to beginning of list*/ Current->index = 1; Current->selectedName = 0; } /* update the menu */ /* SPR881 - SH - is necessary even when BookSearchName, above, fails */ mnu = (MfwMnu *) mfwControl( data->menu ); mnu->lCursor[mnu->level] = Current->selectedName; TRACE_EVENT_P1("Current->selectedName: %d", Current->selectedName); /* go find the name */ bookFindName(MAX_SEARCH_NAME,&data->phbk->current); } } break; case SEARCH_UPDATE: { /* Update, actually an initialisation/reset phase */ Current->index = 1; Current->selectedName = 0; { memset( data->edtBuf, '\0', sizeof( data->edtBuf ) ); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR ATB_edit_Reset( data->editor ); #else /* NEW_EDITOR */ edtReset( data->edt ); #endif /* NEW_EDITOR */ SEND_EVENT( win, SEARCH_STRING, 0, 0 ); } } break; /* SPR#1428 - SH - New Editor: Add this to allow redraw of * window on request. */ #ifdef NEW_EDITOR case SEARCH_REDRAW: /*SPR 2104, TRACE seems to fix timing probs :/ */ TRACE_EVENT("UPDATE SEARCH REDRAW"); SEND_EVENT(data->win, SEARCH_STRING, 0, 0); win_show(data->win); break; #endif /* NEW_EDITOR */ default: { /* */ } break; } } /******************************************************************************* $Function: bookSearchWindowCB $Description: Window call back function $Returns: MFW_EVENT_CONSUMED, or MFW_EVENT_PASSED $Arguments: e, event, w, window handle *******************************************************************************/ static int bookSearchWindowCB( MfwEvt e, MfwWin *w ) { tBookStandard *data = (tBookStandard *) w->user; tMmiPhbData *Current = &data->phbk->current; int index; char *pchr; char pchr2[PHB_MAX_LEN*2 +4];/*mc, SPR 1442*/ TRACE_FUNCTION( "bookSearchWindowCB()" ); // 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 just use the preset PHB_ADN as the current book. //if(data->phbk->current.status.book == PHB_ADN) // data->phbk->current.status.book = PHB_ADN_FDN; /* Deal with the visible event */ switch (e) { case MfwWinVisible: { /* Deal with the window visible event */ MmiBookShowDefault(); { /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR ATB_edit_Show( data->editor ); #else /* NEW_EDITOR */ edtShow( data->edt ); #endif /* NEW_EDITOR */ } /* SPR#1428 - SH - New Editor: Only update the list if we're not in multi-tap */ #ifdef NEW_EDITOR if (!data->editor->multitap) { #endif /* NEW_EDITOR */ for ( index = 0; index < MAX_SEARCH_NAME; index++ ) { TRACE_EVENT( "bookSearchWindowCB()-loopstart" ); pchr = (char *) MmiBookCallList( index ); memset( pchr, '\0', NAME_SCREEN_MAX ); /* SPR#1428 - SH - remove extraneous call to edtShow*/ /*SPR 2123, using new macro PHONEBOOK_ITEM_LENGTH*/ #ifdef NO_ASCIIZ /*if current language chinese*/ if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { /*SPR 2653, this check should be here too*/ if (!Current->list.entry == NULL) { if ( Current->entry[ index ].name.len NEQ 0) //if name not empty { if (Current->entry[ index ].name.data[0] != 0x80)//if not unicode {/*we have to convert to unicode*/ pchr2[0]= (char)0x80;/*SPR 1442, add unicode tag*//*a0393213 lint warnings removal - typecast done*/ pchr2[1]= 0x7f; /*SPR2175, use new function*/ ATB_convert_String((char*)Current->entry[ index ].name.data, MFW_ASCII, (UBYTE)strlen((char*)Current->entry[ index ].name.data), &pchr2[2], MFW_DCS_UCS2, PHONEBOOK_ITEM_LENGTH-2, FALSE); /*SPR 1442 and now truncate the string*/ resources_truncate_to_screen_width((char *) pchr2, Current->entry[ index ].name.len*2+2, pchr,PHONEBOOK_ITEM_LENGTH , SCREEN_SIZE_X, TRUE); } else /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ { /*SPR 1442 truncate the string*/ resources_truncate_to_screen_width((char *) Current->entry[index].name.data, Current->entry[index].name.len, pchr, MAX_ALPHA_LEN, SCREEN_SIZE_X, TRUE); } } else /*we convert number string into unicode*/ { pchr2[0]= (char)0x80;/*SPR 1442, add unicode tag*//*a0393213 lint warnings removal-typecast done*/ pchr2[1]= 0x7f; /*SPR 2175, use new function*/ ATB_convert_String((char*)Current->entry[ index ].number, MFW_ASCII, (UBYTE)strlen((char*)Current->entry[ index ].number), &pchr2[2], MFW_DCS_UCS2, PHONEBOOK_ITEM_LENGTH-2, FALSE); /*SPR 1442 and now truncate the string*/ resources_truncate_to_screen_width((char *) pchr2, strlen((char*)Current->entry[ index ].number)*2+2, pchr,PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, TRUE); } } } else { /*if current language a latin language*/ /*SPR 2653, removed consitional compilation, this check applies whether we're in simulation mode or target hardware*/ // EF check for null pointer first if (!Current->list.entry == NULL) /*SPR 2104, don't need this test*/ if ( Current->entry[ index ].name.len NEQ 0&&Current->entry[ index ].name.data[0] != 0x80/*mc*/) //Should check to see if null name { /*mc, SPR 1442, replaced old truncation function with new one*/ resources_truncate_to_screen_width((char *) Current->entry[index].name.data, Current->entry[index].name.len, pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, FALSE); } else {/*mc, SPR 1442, replaced old truncation function with new one*/ resources_truncate_to_screen_width((char *) Current->entry[index].number, strlen((char*)Current->entry[index].number), pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X,FALSE); } #else if ( Current->entry[ index ].name[ 0 ] != NULL) //Should check to see if null name { /*mc, SPR 1442, replaced old truncation function with new one*/ resources_truncate_to_screen_width((char *) Current->entry[index].name, 0, pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X, FALSE); } else { /*mc, SPR 1442, replaced old truncation function with new one*/ resources_truncate_to_screen_width((char *) Current->entry[index].number, strlen((char*)Current->entry[index].number), pchr, PHONEBOOK_ITEM_LENGTH, SCREEN_SIZE_X,FALSE); } /*SPR 2123 end*/ #endif #ifdef NO_ASCIIZ/*MC SPR 975, opening bracket only exists when NO_ASCIIZ defined*/ } #endif } TRACE_EVENT( "bookSearchWindowCB()-end of loop" ); mnuShow(data->menu); /* SPR#1428 - SH - End of condition to check if we're in multi-tap */ #ifdef NEW_EDITOR } #endif /* special case if invoked from SMS or using SDN book */ if ( ( data->phbk->fromSMS )|| ( data->phbk->fromSMSSC ) || /* SPR#1428 - SH - New event for service centre editor */ ( data->phbk->fromDivert ) || ( data->phbk->fromDeflect )|| //CRR: 25302 - xpradipg 10 Nov 2004 //check if it was invoked from MMS/EMS ( data->phbk->fromMmsEms)|| ( Current->status.book == PHB_SDN ) ) { //displaySoftKeys( TxtSoftSelect, TxtSoftBack ); // Jun 07, 2004 REF: CRR MMI-SPR-12818 Rashmi C N(Sasken) // when the editor is empty, we need to display BACK softkey // Delete softkey is displayed when it contains some characters if (data->editor_attr.text.len==0) { displaySoftKeys( TxtSoftSelect, TxtSoftBack ); } else { displaySoftKeys( TxtSoftSelect, TxtDelete ); } } else { //displaySoftKeys( TxtSoftOptions, TxtSoftBack ); // Jun 07, 2004 REF: CRR MMI-SPR-12818 Rashmi C N(Sasken) // when the editor is empty, we need to display BACK softkey // Delete softkey is displayed when it contains some characters if (data->editor_attr.text.len==0) { displaySoftKeys( TxtSoftOptions, TxtSoftBack ); } else { displaySoftKeys( TxtSoftOptions, TxtDelete ); } } } TRACE_EVENT( "bookSearchWindowCB()-sk display end" ); break; default: { /* default is to pass event back for further handling */ return MFW_EVENT_PASSED; } // break; // RAVI } /* consume the event */ return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookSearchKbdCB $Description: Keyboard handler $Returns: MFW_EVENT_CONSUMED always $Arguments: e, event, k, key handle *******************************************************************************/ static int bookSearchKbdCB( MfwEvt e, MfwKbd *k ) { T_MFW_HND win = mfwParent( mfw_header() ); T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; tMmiPhbData *Current = &data->phbk->current; TRACE_FUNCTION ("bookSearchKbdCB()"); /* SPR#1428 - SH - New editor doesn't require editActivate */ #ifndef NEW_EDITOR /* Set our editor active if it isn't already */ if ( activeEditor() != data->edt ) editActivate( data->edt, TRUE); #endif /* Deal with the key and event combinatino */ switch( k->code ) { case KCD_MNUUP: { /* scroll up */ SEND_EVENT( data->win, SEARCH_SCROLL_UP, 0, 0 ); winShow( data->win ); } break; case KCD_MNUDOWN: { /* scroll down */ SEND_EVENT( data->win, SEARCH_SCROLL_DOWN, 0, 0 ); winShow( data->win ); } break; case KCD_CALL: if ( data->phbk->fromSMS ) SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID, (UBYTE *) Current->entry[ Current->selectedName ].number ); else if ( data->phbk->fromSMSSC ) SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID, (UBYTE *) Current->entry[ Current->selectedName ].number ); else { if (data->phbk->fromDeflect /*SPR 1392, select number don't call it*/ ) SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID, (UBYTE *) Current->entry[ Current->selectedName ].number ); else callNumber( Current->entry[ Current->selectedName ].number ); } bookPhonebookDestroy(data->phbk->win); break; /* JVJ #1743 Right key deletes the characters, HUP destroys the window */ #ifdef NEW_EDITOR case KCD_HUP: #else /* NEW_EDITOR */ case KCD_HUP: #endif /* NEW_EDITOR */ { if ( data->phbk->fromSMS ){ /* Send empty string so that ptr can be set 0*/ SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID, "" ); bookPhonebookDestroy(data->phbk->win); } else if ( data->phbk->fromSMSSC ){ SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID, NULL ); bookPhonebookDestroy(data->phbk->win); } /* Marcus (mk): Issue 1010: 2002-08-22: Start */ else if (data->phbk->fromDivert) { bookPhonebookDestroy(data->phbk->win); } else if (data->phbk->fromDeflect)/*MC SPR 1392*/ { /*Send empty string so that pointer to this window can be set to 0*/ SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID,""); bookPhonebookDestroy(data->phbk->win); } //CRR: 25302 - xpradipg 10 Nov 2004 //also handle if invoked by MMS/EMS else if ( data->phbk->fromMmsEms ) { /* Send empty string so that ptr can be set 0*/ SEND_EVENT( data->phbk->parent_win, MMS_EMS_PHBK_NUMBER, PHBK_ID,"" ); bookPhonebookDestroy(data->phbk->win); } /* Marcus (mk): Issue 1010: 2002-08-22: End */ else bookSearchDestroy(data->win); } break; case KCD_MNUSELECT: case KCD_LEFT: { /* if in SMS send the event to it */ if ( data->phbk->fromSMS ) { SEND_EVENT( data->phbk->parent_win, SMS_PHBK_NUMBER, PHBK_ID /*MZ 6/2/01 */, (UBYTE *) Current->entry[ Current->selectedName ].number ); bookPhonebookDestroy(data->phbk->win); } else if ( data->phbk->fromSMSSC ) { SEND_EVENT( data->phbk->parent_win, SMSSC_PHBK_NUMBER, PHBK_ID /*MZ 6/2/01 */, (UBYTE *) Current->entry[ Current->selectedName ].number ); bookPhonebookDestroy(data->phbk->win); } else if(data->phbk->fromDivert ) //MZ 26/02/01 check for divert If in Divert send event. { SEND_EVENT( data->phbk->parent_win, DIVERT_PHBK_NUMBER, PHBK_ID /*MZ 28/2/01 */, (UBYTE *) Current->entry[ Current->selectedName ].number ); bookPhonebookDestroy(data->phbk->win); } else if(data->phbk->fromDeflect ) /*SPR 1392*/ { TRACE_EVENT_P1("<< API deflection no. = %s", (char*) Current->entry[ Current->selectedName ].number); SEND_EVENT( data->phbk->parent_win, DEFLECT_PHBK_NUMBER, PHBK_ID, (UBYTE *) Current->entry[ Current->selectedName ].number ); bookPhonebookDestroy(data->phbk->win); } //CRR: 25302 - xpradipg 10 Nov 2004 //send the number to the MMS/EMS window else if(data->phbk->fromMmsEms) { TRACE_EVENT_P1("the value if win from MMS is %x",data->phbk->parent_win); SEND_EVENT( data->phbk->parent_win, MMS_EMS_PHBK_NUMBER,PHBK_ID,(void *) Current->entry[ Current->selectedName ].number ); bookPhonebookDestroy(data->phbk->win); } else /* Start a new options menu */ /*check for UPN SPR 1327*/ if (Current->status.book != PHB_UPN) data->phbk->menu_options_win = bookMenuStart( data->phbk->win, bookNameMenuAttributes(),0); else data->phbk->menu_options_win = bookMenuStart( data->phbk->win, bookUPNMenuAttributes(),0); } break; /* JVJ #1743 Right key deletes search character*/ #ifdef NEW_EDITOR case KCD_RIGHT: #else /* NEW_EDITOR */ case KCD_HUP: #endif /* NEW_EDITOR */ { /* If we have any characters in the buffer, step back, otherwise destroy the window */ if ( data->edtBuf[0]) { // Oct 26, 2004 REF: CRR 25354 xkundadu // Description: Phonebook: After entering precise name to search and then // trying to delete using RSK, first character is not deleted. // Fix: If only one character is present in the editor and delete key is // pressed, delete the editor buffer and update the editor view. // Find out the length of the buffer. if(strlen((char*)data->edtBuf) == 1) { //If only one character is present, delete and set the buffer //to NULL. data->edtBuf[0] = '\0'; data->editor_attr.text.len = 0; //Move the cursor accordingly. ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); data->editor->update = ED_UPDATE_TRIVIAL; SEND_EVENT( data->win, SEARCH_STRING, 0, 0); //Update the window. winShow( data->win ); break; } /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR /* SPR#2174 - SH - If multitap is in progress, delete current character * rather than previous character */ if (data->editor->multitap) { AUI_entry_StopMultitap(data->entry_data); /* Cancel multitap */ ATB_edit_DeleteRight(data->editor, TRUE); /* SPR#2342 - SH */ } else { ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */ } #else /* NEW_EDITOR */ edtChar( data->edt,ecBack ); #endif /* NEW_EDITOR */ SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); winShow( data->win ); } else { /*API - 12/08/03 - CQ11268 - Add this so the phonebbok is destoryed on right key press*/ if ( data->phbk->fromSMS ) { /* Send empty string so that ptr can be set 0*/ bookPhonebookDestroy(data->phbk->win); } else if ( data->phbk->fromSMSSC ) { bookPhonebookDestroy(data->phbk->win); } /* Marcus (mk): Issue 1010: 2002-08-22: Start */ else if (data->phbk->fromDivert) { bookPhonebookDestroy(data->phbk->win); } else if (data->phbk->fromDeflect)/*MC SPR 1392*/ { /*Send empty string so that pointer to this window can be set to 0*/ bookPhonebookDestroy(data->phbk->win); } //CRR: 25302 - xpradipg 10 Nov 2004 //Handle if invoked from MMS/EMS else if(data->phbk->fromMmsEms) { bookPhonebookDestroy(data->phbk->win); } /* Marcus (mk): Issue 1010: 2002-08-22: End */ else bookSearchDestroy(data->win); /*API - 12/08/03 - CQ11268 - END*/ } } break; case KCD_HASH: { { /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR ATB_edit_DeleteLeft( data->editor, TRUE); /* SPR#2342 - SH */ #else /* NEW_EDITOR */ edtChar( data->edt,ecBack ); #endif /* NEW_EDITOR */ } /*NM, p016 even updating when deleting characters */ SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); winShow( data->win ); } break; default: { { /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_entry_EventKey( data->entry_data, e, k ); /* send the search event to ourselves, * but only when a character is finished in multi-tap */ if (!data->editor->multitap) { SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); } #else /* NEW_EDITOR */ editEventKey( e, k ); /* send the search event to ourselves, */ SEND_EVENT( data->win, SEARCH_STRING, 0, 0 ); #endif /* NEW_EDITOR */ winShow( data->win ); } } break; } /* always consume the event */ return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookSearchKbdLongCB $Description: long keypress event handler, handles long clear event only $Returns: MFW_EVENT_CONSUMED always $Arguments: e, event, k, key handle *******************************************************************************/ static int bookSearchKbdLongCB( MfwEvt e, MfwKbd *k ) { T_MFW_HND win = mfwParent( mfw_header() ); T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; TRACE_FUNCTION ("bookSearchKbdLongCB()"); /* deal with the clear event */ if ( ( e & KEY_CLEAR ) && ( e & KEY_LONG ) ) { bookSearchDestroy( win ); data->phbk->search_win = 0; } /* consume the event */ return MFW_EVENT_CONSUMED; } //Jan 22, 2006 REF: OMAPS00061930 x0039928 // Fix : Add a temporary timer handle for future reference. T_MFW_HND PhbSearchTim; /******************************************************************************* $Function: bookSearchTimCB $Description: Callback function for the Phonebook timer. $Returns: None $Arguments: window handle event, timer control block *******************************************************************************/ static int bookSearchTimCB (MfwEvt event, MfwTim *timer) { T_MFW_HND win = mfwParent( mfw_header() ); T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data; tBookStandard *data = (tBookStandard *) win_data->user; /* x0045876, 14-Aug-2006 (WR - "Current" was declared but never referenced) */ /* tMmiPhbData *Current = &data->phbk->current; */ TRACE_FUNCTION ("bookSearchTimCB()"); SEND_EVENT( data->win, SEARCH_STRING, 1, 0); winShow( data->win ); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: bookSearchCreate $Description: Create the search window $Returns: handle of window or NULL if error $Arguments: parent, handle of parent window *******************************************************************************/ static T_MFW_HND bookSearchCreate( MfwHnd parent ) { T_MFW_WIN *parent_win_data = ( (T_MFW_HDR *) parent )->data; T_phbk *phbk = (T_phbk *)parent_win_data->user; T_MFW_WIN *win_data; tBookStandard *data; // int i; // RAVI // char debug[50]; // RAVI TRACE_FUNCTION ("bookSearchCreate()"); /* allocate memory for our control block */ if ( ( data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) ) ) == NULL ) return NULL; /*SPR 2123, MC allocate memory for phonebook list*/ if (create_mmi_phonebook_names_list() == NULL) return NULL; /* Create the window if we can */ if ( ( data->win = win_create( parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookSearchWindowCB ) ) == NULL ) { FREE_MEMORY( (void *) data, sizeof( tBookStandard ) ); return NULL; } /* Okay, we have created the control block and the window, so we now need to configure the dialog and data pointers */ data->mmi_control.dialog = (T_DIALOG_FUNC) bookSearchDialog; data->mmi_control.data = data; win_data = ((T_MFW_HDR *)data->win)->data; win_data->user = (void *) data; data->phbk = phbk; data->parent_win = parent; /* create keyboards and menus for our window */ data->kbd = kbdCreate( data->win, KEY_ALL, (MfwCb) bookSearchKbdCB ); data->kbd_long = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookSearchKbdLongCB ); //Jan 22, 2006 REF: OMAPS00061930 x0039928 // Fix: Create a timer and assign to PhbSearchTim data->tim = timCreate(data->win, 1000, (MfwCb)bookSearchTimCB); data->menu = mnuCreate( data->win,MmiBookMenuDetailsList() , 0, 0 ); PhbSearchTim = data->tim; mnuLang (data->menu,0); /* 1945 MZ Initialise the edtBuf */ memset(data->edtBuf,'\0', STANDARD_EDITOR_SIZE ); { /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR /*SPR 2233, make sure editor only displays lower-case chars*/ AUI_edit_SetAttr(&data->editor_attr, BOOKSEARCH_EDITOR, COLOUR_EDITOR_XX,EDITOR_FONT, ED_MODE_ALPHA | ED_MODE_FORMATTED, ED_CURSOR_BAR, ATB_DCS_ASCII, (UBYTE*) data->edtBuf, MAX_SEARCH_CHAR); data->editor_attr.FormatString = "*a"; data->editor = ATB_edit_Create( &data->editor_attr, 0 ); data->entry_data = AUI_entry_Create(data->win, data->editor, SEARCH_REDRAW); /*SPR2233 end*/ ATB_edit_Init(data->editor); #else /* NEW_EDITOR */ bookSetEditAttributes(BOOKSEARCH_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, (char *) data->edtBuf, MAX_SEARCH_CHAR, &data->attr ); data->edt = edtCreate( data->win, &data->attr, 0, 0 ); #endif /* NEW_EDITOR */ } /* allow the window and menu to be created */ mnuUnhide(data->menu); winShow(data->win); /* And return the handle of the newly created window */ return data->win; } /******************************************************************************* Public Methods *******************************************************************************/ /******************************************************************************* $Function: bookSearchStart $Description: Starts the search window $Returns: handle of newly created window, or NULL if error $Arguments: parent, handle of parent window *******************************************************************************/ T_MFW_HND bookSearchStart( MfwHnd parent ) { T_MFW_HND win; T_MFW_WIN *win_data; tBookStandard *data; MfwMnu *mnu; tMmiPhbData *Current; /* if the phone book is still loading, we can't do anything with it, so return a NULL, after showing an information dialog */ if ( phb_get_mode() == PHB_LOADING ) { bookShowInformation( idle_get_window(), TxtPleaseWait ,NULL, NULL ); return NULL; } /* try to create the window */ if ( ( win = bookSearchCreate( parent ) ) == NULL ) return NULL; /* having created the window, we now need to initialise it to sensible data */ win_data = ( (T_MFW_HDR *) win)->data; data = (tBookStandard *) win_data->user; Current = &data->phbk->current; /* establish the status of the phone book */ if ( ( Current->status.book != PHB_UPN ) && ( Current->status.book != PHB_SDN ) ) Current->status.book = bookActiveBook(READ); bookGetCurrentStatus( &Current->status ); /* try to establish if we have information in the phone book */ Current->index = 1; Current->selectedName = 0; bookFindName( MAX_SEARCH_NAME, Current ); if ( ! Current->index ) { bookSearchDestroy( win ); bookShowInformation( idle_get_window(), TxtEmptyList, NULL, NULL ); return NULL; } /* clear the edit buffer prior to displaying the editor and menus */ memset( data->edtBuf, '\0', sizeof( data->edtBuf ) ); /* SPR#1428 - SH - New Editor: don't need editActivate */ #ifndef NEW_EDITOR editActivate( data->edt, true ); #endif /* NEW_EDITOR */ mnu = (MfwMnu *) mfwControl( data->menu ); mnu->lCursor[mnu->level] = Current->selectedName; winShow(data->win); /* return the handle to the newly created window */ return win; } /******************************************************************************* $Function: bookSearchDestroy $Description: Destroy the search window $Returns: None $Arguments: Window, handle of the window to be destroyed *******************************************************************************/ void bookSearchDestroy( MfwHnd window ) { T_MFW_WIN *win = ((T_MFW_HDR *) window)->data; tBookStandard *data = (tBookStandard *) win->user; TRACE_FUNCTION( "bookSearchDestroy()" ); /* Only destroy if the data is valid */ if ( data ) { /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR /* Editor now not automatically destroyed by winDelete, * so destroy it here. */ if (data->entry_data) { AUI_entry_Destroy(data->entry_data); data->entry_data = 0; } if (data->editor) { ATB_edit_Destroy(data->editor); data->editor = 0; } #endif /* NEW_EDITOR */ /* If we're the root window we destroy using it's function */ if ( data->phbk->root_win == window ) { bookPhonebookDestroy( data->phbk->win ); return; } /* delete ourself */ data->phbk->search_win = 0; winDelete( data->win ); FREE_MEMORY( (void *) data, sizeof( tBookStandard ) ); } /*SPR2123, MC deallocate memory for phonebook list*/ destroy_mmi_phonebook_names_list(MmiBookMenuDetailsList()); } /******************************************************************************* $Function: bookSearchName $Description: locate a requested name in the phone book $Returns: status of the findName routine $Arguments: pattern, to be searched for number, of elements to limit the search to current, pointer to a buffer to store the results *******************************************************************************/ UBYTE bookSearchName (char *pattern,UBYTE number,tMmiPhbData *current) { #ifdef NO_ASCIIZ T_MFW_PHB_TEXT l_name; #else UBYTE l_name[PHB_MAX_LEN]; #endif // UBYTE len; // RAVI int i; UBYTE ret = (UBYTE)PHB_FAIL; TRACE_FUNCTION( "bookSearchName()" ); /* if using UPN phone book, return status of findname */ if ( current->status.book == PHB_UPN ) return ret = current->result = bookFindName( MAX_SEARCH_NAME, current ); /* otherwise we need to be a little bit more clever with this */ memset( current->entry, 0, MAX_SEARCH_CALL_LIST * sizeof( T_MFW_PHB_ENTRY ) ); bookGetCurrentStatus( ¤t->status ); current->list.entry = current->entry; current->list.num_entries = number; /* convert from GSM characters */ #ifdef NO_ASCIIZ memset( l_name.data, 0, PHB_MAX_LEN ); mfw_Gsm2SIMStr( MFW_DCS_7bits, (UBYTE *) pattern, PHB_MAX_LEN, l_name.data, &l_name.len ); #else memset( l_name, 0, PHB_MAX_LEN ); mfw_Gsm2SIMStr( MFW_DCS_7bits, (UBYTE *) pattern, PHB_MAX_LEN, l_name, &len ); #endif /* perform a search to locate a match with this criteria */ if ( strlen(pattern) != 0 ) { #ifdef WIN32 #ifndef NO_ASCIIZ /***************************Go-lite Optimization changes Start***********************/ //Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P1("Search str: %s", l_name.data); /***************************Go-lite Optimization changes end***********************/ ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, (UBYTE *) l_name, len, ¤t->list ); #endif #else //not WIN32 #ifdef NO_ASCIIZ ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, &l_name, ¤t->list ); #else ret = phb_find_entries( current->status.book, ¤t->index, MFW_PHB_ALPHA, number, (char *) l_name, ¤t->list ); #endif //NO_ASCIIZ #endif //WIN32 } else { /* we don't have any name information, so start at the beginning */ current->index = 1; current->selectedName = 0; bookFindName( MAX_SEARCH_NAME, current ); } /* check for match */ if ( ( current->list.num_entries < MAX_SEARCH_NAME ) || ( current->list.result == MFW_NO_ENTRY ) || ( ret == (UBYTE)PHB_FAIL ) ) { /* no, then try to find again */ ret = bookFindName( MAX_SEARCH_NAME, current ); } else { for ( i = 0; i < number; i++ ) #ifdef NO_ASCIIZ { /* convert from Sim to GSM and then copy to output buffer */ /*MC SPR 1257, replacing PHB_MAX_LEN with MAX_ALPHA_LEN for name strings*/ /*MC SPR 2175, using new function to convert name string*/ if (current->entry[i].name.dcs == MFW_DCS_8bits && current->entry[i].name.data[0] != 0x80) { ATB_convert_String((char*)current->entry[i].name.data, MFW_DCS_8bits, current->entry[i].name.len, (char*)l_name.data, MFW_ASCII, MAX_ALPHA_LEN, FALSE); memcpy( current->entry[i].name.data, l_name.data, MAX_ALPHA_LEN ); current->entry[i].name.len = l_name.len; current->entry[i].name.dcs = MFW_ASCII; } } #else /* convert from GSM to Alpha characters */ bookGsm2Alpha( (UBYTE *) current->entry[i].name ); #endif } /* return the status, and store it as part of current as well */ TRACE_EVENT_P1("BookSearchName returns: %d", ret); return current->result = ret; } /******************************************************************************* End of File *******************************************************************************/