FreeCalypso > hg > fc-magnetite
diff src/aci2/bmi/AUIWap.c @ 3:93999a60b835
src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Sep 2016 00:29:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/aci2/bmi/AUIWap.c Mon Sep 26 00:29:36 2016 +0000 @@ -0,0 +1,16842 @@ +#ifdef FF_GPF_TCPIP + +/******************************************************************************* + + 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: + $Project code: + $Module: + $File: AUIWap.c + $Revision: + + $Author: Condat(UK) + $Date: + +******************************************************************************** + + Description: + The user interface for WAP. Provides the required menus, lists, dialogs and + utilises the functionality of the ATB appropriately. + +******************************************************************************** + + $History: AUIWap.c + + xrashmic 13 Feb, 2006 MMI-SPR-58532 + Exiting wap onreceiving pdp deactivation from the network + + xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 + Removing unwanted screens in the callback of the "New mms" dialog screen. + Sepearted the call back funtion for the sending and receving mms info dialog screns. + + Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C + Description:Delete (Softkey) remains, after clearing all the characters in Username field. + Solution: AUI_edit_SetAltTextStr is added in the AUI_Standard_editor() with soft key back option. + + xrashmic 17 Aug, 2005 MMI-SPR-31364 + When it is detected that a very large page is being opened, the wap adapter sends a message. + We need to exit wap and display a error dialog as we have memory constraints. + + xreddymn Aug-03-2005 MMI-SPR-33058: + Handling of animated GIF images with transparency + + xreddymn Jun-29-2005 MMI-ENH-32467: + Handling of animated GIF images + + July 18 2005 REF: MMI-SPR-32012 x0012849 + To change the functionality of RSK , when there is no page to go back. + + xreddymn Jun-21-2005 MMI-SPR-30291: Send one message for the entire profile, + instead of sending one parameter at a time, to the WAP adapter + + Jun-08-2005 MMI-SPR-30291 xreddymn: Added patches from FG + + May 11 2005 REF: MMI-SPR-29887 x0012849 + To Implement the deferred MMS retrieval. + + Apr 28 2005 REF: MMI-SPR-30400 x0012849 + To display the contents of Drop down menu correctly when a page is browsed through D sample. + + Apr 07 2005 REF: MMI-SPR-27826 x0012849 + To avoid crash when a user replies to the MMS which is there in Inbox + + xreddymn Apr-14-2005 MMI-SPR-30224 + Modified width setting for Chinese characters + + xreddymn Apr-02-2005 MMI-SPR-29936 + Added functions to assign and remove GPRS event callback to handle GPRS + status events when sending a MMS message + + xreddymn Mar-05-2005 MMI-SPR-26144 + Added changes for cancel sending MMS + + xrashmic 08 Feb, 2005 MMI-SPR-27853 + Error handling in sending MMS and also displaying the progress value + + x0018858 8 Feb, 2005 MMI-SPR-27872 + Modified to resolve the memory leak issue. + + xreddymn Jan-31-2005 MMI-SPR-28483: Support MIDI objects + + xrashmic 28 Jan, 2005 MMI-SPR-28166 + Adding support for saving plugin images + + xrashmic 21 Jan, 2005 MMI-SPR-28223 + Ignoring the number and scroll key events while displaying the plugin images + + xrashmic 21 Dec, 2004 MMI-SPR-27620 + The URL buffer needs to be cleared before prompting for the Name + + xreddymn Jan-27-2005 MMI-SPR-28135 + Added changes to redraw profile list menu on receiving a new profile + through OTA. + + xreddymn Jan-11-2005 MMI-SPR-27618 + Added changes to hide cursor in case of read-only editor + + xrashmic 4 Jan, 2005 MMI-SPR-27874 + Description: when images less than 1 kb was downloaded through wap, + phone used to hang. + Solution: The variable used for the display of download complete was + not populated for images less than 1kb. + + Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar + Description: MFW memory size variable changed from U16 -> U32 + Solution: The use of variable U16 has been replaced with U32 + + xrashmic 23 Dec, 2004 MMI-SPR-27623 + Setting the back the original profile if user does not select it in the options menu. + + xrashmic 16 Dec, 2004 MMI-SPR-27622 + To add support for deleting and adding Profiles + + xrashmic 30 Nov, 2004 MMI-SPR-26145 + Deleting the compose and option window after sending the MMS + + xrashmic 29 Nov, 2004 MMI-SPR-26161 + Description: The downloaded object through wap was not visible to the MMI + Solution: The downloaded wap object is available in the object manager + and can be used by the MMS + + xrashmic 05 Nov, 2004 MMI-SPR-25252 + The Bookmark names was not getting stored correctly. The + first chracter was neglected when data->Buffer[2] was sent + xrashmic 14 Dec, 2004 MMI-SPR-23921 + Implementing the forward functionality for MMS + + CRR 25259: xpradipg 28 sep 2004 + Description: System restarted when deleting WAP bookmark + Solution: When we Send the URL, the window handle assignment to + data->edit_win is removed since all windows after selecting send are handled + by the sms module + + xrashmic 6 Oct, 2004 MMI-SPR-25552 + Afetr receiving MMs, information dialogs in wap were not being displayed. + + CRR 25541: 06 Oct 2004 - xpradipg + Description: WAP: Profiles names are not displaying properly after renaming + Solution : The address from the third character for the name buffer was + which was required for the old editor. This has been modified for the new + editor and put under the flag + + CRR 25277: 06 Oct 2004 - xpradipg + Description: Recieving an ems when inbox is open + Solution: A refresh event is sent to the Inbox list which inturn updates + the list + + xreddymn Sep-13-2004, MMI-SPR-24121 + Modified string operations to fix the issue + + xrashmic 03 Sep, 2004 MMI-SPR-24395 + The bookmark and history names names was not getting stored correctly + + xrashmic 26 Aug, 2004 MMI-SPR-23931 + To display the indication of new EMS in the idle screen + + xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 + All the status screen, .i.e sending, receiving etc. are displayed separatly for the MMS module. + Previously the WAP screens were being used. + + 14/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version. + + $End + +*******************************************************************************/ + + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else /* NEW_FRAME */ + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif /* NEW_FRAME */ + +#include "mfw_sys.h" + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_kbd.h" +#ifndef NEW_EDITOR +#include "mfw_edt.h" +#endif +#include "mfw_tim.h" +#include "mfw_phb.h" +#include "mfw_sms.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_lng.h" +#include "mfw_sat.h" +#include "mfw_kbd.h" +#include "mfw_nm.h" +#include "mfw_cm.h" + +#include "dspl.h" + +#include "MmiMmi.h" +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "mmiCall.h" + +#include "MmiMenu.h" +#include "MmiSoftKeys.h" +#include "MmiResources.h" + +#include "MmiBlkLangDB.h" +#include "MmiBookUtils.h" +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#else +#include "MmiEditor.h" +#endif +#include "MmiBookShared.h" +#include "ATBData.h" + +#include "wapmic_types.h" + +#include "ATBWapAUI.h" +#include "ATBWapACI.h" +#include "mmiSmsMenu.h" +//xrashmic 26 Aug, 2004 MMI-SPR-23931 +#include "mmimmsmenu.h" +#include "MmiIdle.h" + +#include "mmismssend.h" +#include "AUIWapext.h" /* SPR#1824 - SH */ +#include "AUIWap.h" +/* SPR#1574 - SH */ +#ifdef MMI_GPRS_ENABLED +#include "MmiGprs.h" +#endif + +#include "cus_aci.h" +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + + +#include "mmiColours.h" +#include "font_bitmaps.h" +#include "capimic.h" +//CRR 25277: 06 oct 2004 +#include "mmiwindow.h" +//xrashmic 29 Nov, 2004 MMI-SPR-26161 +#include "mg4def.h" + +// Jun 23 2005 REF: MMI-SPR-29887 x0012849 +// This values should be same as the ones in MMS_RECEIVE_FAIL in ATBdata.h +#define MMS_RECEIVE_FAIL -25 +// Jun 23 2005 REF: MMI-SPR-29887 x0012849 +extern T_MFW_HND g_MmsBoxWin; +// Jun 23 2005 REF: MMI-SPR-29887 x0012849 +BOOL is_downloadcancelled=FALSE; +/* Define this to trace memory allocations & freeings */ +#undef TRACE_MEMALLOC + +//CRR 25277: 06 oct 2004 +extern MfwHnd mmsboxwinhnd; +extern UBYTE folder; +BOOL exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532 + +//xrashmic 21 Jan, 2005 MMI-SPR-28223 +BOOL pluginImageDisplayed; + +//xrashmic 29 Nov, 2004 MMI-SPR-26161 +int downloaded_data_size= 0; +char downloaded_data[MAX_DOWNLOAD]; +extern M4_StoreDownloadedObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type); +M4_E_OBJECT_TYPE obj_Type = EMtUnknown; +//xrashmic 08 Feb, 2005 MMI-SPR-27853 +extern void AUI_mms_error_dialog(SHORT errorCode); +T_MFW_HND information_dialog(USHORT TxtId1, USHORT TxtId2,char* Txt1, char* Txt2, USHORT SoftKeyTxtId1, USHORT SoftKeyTxtId2, int timer, T_MFW_EVENT keyEvents, T_VOID_FUNC callback); +extern BOOL saveObjectPlugin; +extern ObjectType PluginObjectType; +ESTATUS M4_StorePluginObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type ); + +//May 17 2005 REF: MMI-SPR-29887 x0012849 +// Called when user cancels the retrieving operation +void cancel_TMrecieve(void); +//May 17 2005 REF: MMI-SPR-29887 x0012849 +// Called when user cancels the retrieving operation +UBYTE get_urlIDget(void); +//Jun 28 2005 REF: MMI-SPR-29887 x0012849 +void Delete_Body(void); +//xrashmic 26144 +void cancel_TMsend(void); +UBYTE get_urlID(void); +void MmsWAPDeactivate(void); +void mms_gprs_deattach(void); + +// xreddymn Mar-05-2005 MMI-SPR-26144 +// progressValue (0 to 100) is the percentage of completion of +// a MMS send operation +extern int progressValue; +// This is set to 1 when user has canceled a MMS send operation +UBYTE mms_cancel_status=0; + +/* List menu attributes + * + * Needed for creating the menu. + */ + +static MfwMnuAttr list_menuAttrib = +{ + &menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, + -1, + NULL, + 0, + COLOUR_LIST_XX, TxtNull, MNUATTRSPARE +}; + +/* + SPR#2086 - SH - No need for an invisible window + Local data handler +*/ + +static T_WAP_DATA *wap_mmi_data = 0;//liuyu add = 0 +static BOOL wap_callActive = FALSE; + +/* Set up variables and functions for tracing purposes */ + +#ifdef TRACE_MEMALLOC + +// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar +// Description: MFW memory size variable changed from U16 -> U32 +// Solution: The use of variable U16 has been replaced with U32 +U32 memUsed = 0; +UBYTE memTracker[110] = {0}; +#endif + +//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 +extern int MMSactive; + +//xrashmic 3 Nov, 2004 MMI-SPR-26145 +extern T_MFW_HND mms_create_opt_hnd; +extern T_MFW_HND mms_create_hnd; + +//xrashmic 14 Dec, 2004 MMI-SPR-23921 +extern T_MFW_HND mms_Fwdcreate_hnd; +extern T_MFW_HND g_OptionsWin; +//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 +extern T_MFW_HND g_MmsReadWin; +extern T_MFW_HND g_MmsExtractEdtWin; +extern T_MFW_HND MMSBox_Extract_exec_win; +/******************************************************************************* + + $Function: AUI_wap_init + + $Description: Initialise WAP + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: application - Application type required + callback - Function to be called when WAP is started. + +*******************************************************************************/ + +void AUI_wap_init(void) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_init()"); +#endif + + flash_wap_init(); + + + AUI_wap_push_start(); + + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_start + + $Description: Start WAP + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: application - Application type required + callback - Function to be called when WAP is started. + +*******************************************************************************/ + +void AUI_wap_start(T_WAP_APPLICATION application, T_WAP_CB callback) +{ + T_MFW_HND win; + T_WAP_DATA *data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_start()"); +#endif + + AUI_create(NULL, application, callback); + // xreddymn Feb-18-2005 MMI-SPR-26144: Update status flag for MMS cancel + data = AUI_wap_data(); + data->mms_cancel = 0; + //xrashmic 17 Aug, 2005 MMI-SPR-31364 + // Update the staus flag for exiting wap while trying to open huge page + data->wapOutOfMem=FALSE; + return; +} + +// xreddymn Jun-28-2005 MMI-SPR-32467 +/******************************************************************************* + + $Function: AUI_wap_get_win + + $Description: Returns handle to browser window + + $Returns: Handle to browser window + + $Arguments: None. + +*******************************************************************************/ + +T_MFW_HND AUI_wap_get_win(void) +{ + T_WAP_DATA *data; + data = AUI_wap_data(); + if(data) + { + return data->browser_win; + } + else + { + return NULL; + } +} + +// xreddymn Aug-03-2005 MMI-SPR-33058 +/******************************************************************************* + + $Function: AUI_wap_restore_background + + $Description: Displays background color of WAP application within the + given rectangle + + $Returns: None. + + $Arguments: (x1, y1) are the co-ordinates of the left-top corner + (x2, y2) are the co-ordinates of the right-bottom corner + +*******************************************************************************/ + +void AUI_wap_restore_background(S32 x1, S32 y1, S32 x2, S32 y2) +{ + U32 fgdColour; + resources_setColour( COLOUR_WAP ); + fgdColour = dspl_GetBgdColour(); + dspl_SetFgdColour( fgdColour ); + if(x1 < WAP_LEFT_BORDER) + x1 = WAP_LEFT_BORDER; + if(y1 < WAP_TOP_BORDER) + y1 = WAP_TOP_BORDER; + if(x2 > WAP_SCREEN_RIGHT) + x2 = WAP_SCREEN_RIGHT; + if(y2 > WAP_SCREEN_BOTTOM) + y2 = WAP_SCREEN_BOTTOM; + if((y2 >= y1) && (x2 >= x1)) + dspl_DrawFilledRect(x1, y1, x2, y2); +} + +/******************************************************************************* + + $Function: AUI_wap_terminate + + $Description: Terminate a WAP application + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: application - Application type to terminate + callback - Function to be called when WAP is terminated. + +*******************************************************************************/ + +void AUI_wap_terminate(T_WAP_APPLICATION application, T_WAP_CB callback) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_terminate()"); +#endif + + if (!data) + { + return; + } + + data->application = application; + data->callback = callback; + + switch(data->application) + { + case WAP_BROWSER: + ATB_wap_change_view(WAP_OBJECT_ID); + AUI_destroy(ALL_WIN); + break; + + + case WAP_PUSH: + ATB_wap_change_view(WAP_PUSH_VIEW); + AUI_destroy(WAP_WIN); + break; + + + case WAP_DOWNLOAD: + ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + AUI_destroy(WAP_WIN); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_callback + + $Description: Call WAP callback function + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: result - TRUE or FALSE + +*******************************************************************************/ + +void AUI_wap_callback(UBYTE result) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT trackIndex; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_callback()"); +#endif + + if (!data) + { + return; + } + + AUI_please_wait_destroy(); + +#ifdef TRACE_MEMALLOC + for (trackIndex = 0; trackIndex<110; trackIndex++) // Used to track memory allocations + { + if (memTracker[trackIndex]!=0) + { + TRACE_EVENT_P2("TRACKINDEX %d is %d", trackIndex, memTracker[trackIndex]); + } + } +#endif + + if (data->callback) + { + data->callback(result);//xmzhou02 should send to MMS here. + } + data->callback = NULL; /* Callback only used once */ + + return; +} + + +/******************************************************************************* + + $Function: AUI_menu + + $Description: The main WAP menu + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_menu(MfwMnu* menu, MfwMnuItem* item) +{ + T_DISPLAY_DATA display_info; + T_DISPLAY_DATA display_info2; + T_MFW_HND win = mfw_parent(mfw_header()); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_menu"); +#endif + + + + /*NM 17.6.04 + it allows to enter the WAP connection only when the SIM + read has been completed. The read access takes 25-20 second + otherwise the behaviour is not stabil + */ + if (!smsidle_get_ready_state()) + { + TRACE_EVENT("SIM card reading is not ready yet, please wait "); + + dlg_zeroDisplayData(&display_info); + display_info.LeftSoftKey = (USHORT)TxtNull; + display_info.RightSoftKey = (USHORT)TxtNull; + display_info.TextId = TxtPleaseWait; + display_info.TextId2 = TxtNull; + display_info.displayCol = COLOUR_STATUS ; + display_info.Time = SIX_SECS; + /* + * Info Screen + */ +// info_dialog (win, &display_info); + + + dlg_zeroDisplayData(&display_info2); + display_info2.LeftSoftKey = (USHORT)TxtNull; + display_info2.RightSoftKey = (USHORT)TxtNull; + display_info2.TextId = TxtSimNot; + display_info2.TextId2 = TxtReady; + display_info2.displayCol = COLOUR_STATUS ; + display_info2.Time = THREE_SECS; + + /* + * Info Screen + */ + info_dialog (win, &display_info); + info_dialog (win, &display_info2); + + } + else + { + mfwCheckMemoryLeft(); + + /* SPR#2086 - SH - Create a WAP_BROWSER application */ + AUI_wap_start(WAP_BROWSER, (T_WAP_CB)AUI_menu_create); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_menu_create + + $Description: When WAP is started up, this function is called to create the main menu + SPR#2086 - SH - Added + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void AUI_menu_create(UBYTE result) +{ + T_WAP_DATA *data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_menu_create"); +#endif + + if (!result) + { + return; + } + + data = AUI_wap_data(); + + if (!data) + { + return; + } + + if (data->menu_win) + { + AUI_destroy(MENU_WIN); + } + + //xrashmic 6 Oct, 2004 MMI-SPR-25552 + //Unset MMSactive flag as soon as we enter the Wap menu so that all error + //and notification screens are routed to WAP module. + MMSactive=FALSE; + /* SPR#2086 - No longer have main WAP window. + * Only create menu if parent window exists. */ + + data->parent_win = bookPhonebookStart(data->parent_win, PhbkNone); + data->menu_win = bookMenuStart(data->parent_win, WAPMenuAttributes(), 0); + SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb); + + mfwCheckMemoryLeft(); + return; +} + + +/******************************************************************************* + + $Function: AUI_please_wait + + $Description: SPR#1569 - SH - Added this function + Creates a "Please Wait" message that will hang around until WAP has + been started + + $Returns: + + $Arguments: parent_win - the parent window + +*******************************************************************************/ + +T_MFW_HND AUI_please_wait(T_MFW_HND parent_win) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION("AUI_please_wait()"); + + if (data->temp_win) + { + AUI_please_wait_destroy(); + } + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_please_wait_cb, 10000, 0 ); + + data->temp_win = info_dialog(parent_win,&display_info); //information screen + + return data->temp_win; +} + + +/******************************************************************************* + + $Function: AUI_please_wait_cb + + $Description: SPR#1569 - SH - Added this function + Timeout callback for the please wait window + SPR#1763 - SH - On timeout, exit WAP properly + + $Returns: None. + + $Arguments: win - the parent window + +*******************************************************************************/ + +void AUI_please_wait_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_please_wait_cb()"); +#endif + + if (!data) + { + return; + } + + switch(reason) + { + case INFO_TIMEOUT: + AUI_please_wait_destroy(); + AUI_destroy(ALL_WIN);/* SPR#2086 */ + info_screen(NULL, TxtTimedOut, TxtNull, NULL); + break; + } +} + + +/******************************************************************************* + + $Function: AUI_please_wait_destroy + + $Description: SPR#2086 - SH - Added this function + Destroys the please wait window + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void AUI_please_wait_destroy(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + + if (data->temp_win) + { + TRACE_FUNCTION("AUI_please_wait_destroy()"); + SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL); + data->temp_win = NULL; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_start_done + + $Description: WAP has started - can create new view + SPR#2086 - SH - Now copes with different types of application + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_start_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_NEW_VIEW_IND wap_view; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_start_done"); +#endif + + if (!data) + { + return; + } + + /* Check what type of application is required */ + + switch(data->application) + { + case WAP_BROWSER: + /* Check if browsing view already exists */ + if (ATB_wap_get_view(WAP_OBJECT_ID)) + { + ATB_wap_change_view(WAP_OBJECT_ID); + AUI_wap_new_view_done(); + return; + } + + wap_view.object_id = WAP_OBJECT_ID; + wap_view.uaMode = 1; // Specifies WML user agent + wap_view.view_width = WAP_SCREEN_WIDTH; // Width of screen for browser + wap_view.view_height = WAP_SCREEN_HEIGHT; // Height of screen for browser + wap_view.font_height = WAP_CHAR_HEIGHT; + wap_view.unicode_height = WAP_CHAR_HEIGHT; + // xreddymn Apr-14-2005 MMI-SPR-30224: Chinese characters have + // a fixed width of 12, whereas WAP_CHAR_WIDTH was defined as 6 +#ifdef CHINESE_MMI + wap_view.unicode_width = 12; +#else + wap_view.unicode_width = WAP_CHAR_WIDTH; +#endif + + /* Get height and widths of all characters in current font */ + + wap_view.font_width_length = 256; + wap_view.font_width = (UBYTE *)AUI_wap_memory_alloc(256*sizeof(UBYTE)); + font_getAllAsciiWidths(wap_view.font_width); + + data->view_id = WAP_OBJECT_ID; + data->View = ATB_wap_new_view(&wap_view, (void *)data); // Create the view + + AUI_wap_memory_free(wap_view.font_width, 256*sizeof(UBYTE)); + break; + + + case WAP_PUSH: + if (ATB_wap_get_view(WAP_PUSH_VIEW)) + { + ATB_wap_change_view(WAP_PUSH_VIEW); + } + else + { + data->view_id = WAP_PUSH_VIEW; + data->View = ATB_wap_new_view_invisible(WAP_PUSH_VIEW); + } + + AUI_wap_callback(TRUE); + break; + + + case WAP_DOWNLOAD: + if (ATB_wap_get_view(WAP_DOWNLOAD_VIEW)) + { + ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + } + else + { + data->view_id = WAP_DOWNLOAD_VIEW; + data->View = ATB_wap_new_view_invisible(WAP_DOWNLOAD_VIEW); + } + AUI_wap_callback(TRUE); + break; +#ifdef FF_MMI_MMS + case WAP_MMS://xmzhou02 check and create VIEW + TRACE_EVENT("@@@ WAP_MMS case in AUI_wap_start_done() @@@ "); + if (ATB_wap_get_view(WAP_DOWNLOAD_VIEW)) + { + ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + } + else + { + data->view_id = WAP_DOWNLOAD_VIEW; + data->View = ATB_wap_new_view_invisible(WAP_DOWNLOAD_VIEW); + //newly allocated view should already been set to active view + //ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + + //ATB_mms_config(); + } + AUI_wap_callback(TRUE); + break; +#endif + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_new_view_done + + $Description: View has started + SPR#2086 - SH - Call application callback + + $Returns: None + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_new_view_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_new_view_done"); +#endif + + if (!data) + { + return; + } + + switch (data->application) + { + case WAP_BROWSER: + AUI_wap_callback(TRUE); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_menu_cb + + $Description: Callback function for the WAP menu + + $Returns: None. + + $Arguments: parent_win - the WAP data window + identifier - unused + reason - unused + +*******************************************************************************/ + +static void AUI_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_menu_cb"); +#endif + + if (!data) + { + return; + } + + data->menu_win = NULL; + if (data->parent_win) + { + bookPhonebookDestroy(data->parent_win); + data->parent_win = NULL; + } + AUI_destroy(ALL_WIN); /* SPR#2086 */ + + return; +} + + +/******************************************************************************* + + $Function: AUI_homepage + + $Description: Enter WAP browser with URL=homepage URL + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_homepage(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_homepage"); +#endif + + if (!data) + { + return; + } + + AUI_wap_connect_URL(data->View->Profile->Homepage); /* SPR#2086 - modified */ + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: AUI_download + + $Description: Create a download editor + SPR#2086 - TEST + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_download(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_download"); +#endif + + AUI_wap_start(WAP_DOWNLOAD, (T_WAP_CB)AUI_download_create); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_download_create + + $Description: When WAP is started up for download, this function is called + SPR#2086 - TEST + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void AUI_download_create(UBYTE result) +{ + T_WAP_DATA *data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_download_create"); +#endif + + if (!result) + { + return; + } + + data = AUI_wap_data(); + + if (!data) + { + return; + } + + AUI_edit("http://www.kongzhong.com/dxwap/2002.jpg", WAP_EDIT_DOWNLOAD, TxtEnterURL, URL_MAX_LEN); + + return; +} + + +/******************************************************************************* + + $Function: AUI_create + + $Description: Creates a window (never shown) to which is attached all the data that + is used in WAP. This is distinct from the WAP card browser window, + which is created dynamically. + SPR#2086 - SH - New arguments 'application' and 'callback' + + $Returns: Pointer to the new window + + $Arguments: parent win - Pointer to the parent window of the data window + application - Application type to start up + callback - Callback function, called when WAP starts up + +*******************************************************************************/ + +void AUI_create (T_MFW_HND parent_win, T_WAP_APPLICATION application, T_WAP_CB callback) +{ + T_WAP_DATA *data; +// T_MMI_WAP_START_IND wap_start; /* SPR#1842 */ + + T_MMI_WAP_START_USER_AGENT_REQ wap_start; + + if (application == WAP_BROWSER) + { + wap_start.object_id = 1; + wap_start.uaType = 1; + } + else if (application == WAP_DOWNLOAD) + { + wap_start.object_id = 4; + wap_start.uaType = 4; + } + + /* SPR#1793 - SH - Only allocate data after we've checked WAP + * doesn't already exist */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_create"); +#endif + + /* SPR#2086 - SH - If WAP already active, go straight to create view */ + + + if (AUI_wap_data()) /*One instance of WAP already activated*/ + { + TRACE_EVENT("@@@@ WAP stack has already initiated. @@@@");//xmzhou02 + data = AUI_wap_data(); + data->application = application; + data->callback = callback;//xmzhou02 should be useless??? because this callback will not be called because wap already started. + /* If we haven't yet got a parent window, use the one supplied */ + if (data->parent_win==NULL && parent_win!=NULL) + { + data->parent_win = parent_win; + } + AUI_wap_start_done(); + return; + } + + /* Allocate WAP DATA */ + + data = (T_WAP_DATA *)AUI_wap_memory_alloc (sizeof (T_WAP_DATA)); + + if (!data) + { + TRACE_EVENT("** WAP memory allocation failed **"); + AUI_wap_callback(FALSE); + return; + } + + /* Store data in a static handler */ + + wap_mmi_data = data; + + /* No longer need window handler */ + + data->update_forbid = FALSE; + data->parent_win = parent_win; + + /* Reset various window pointers */ + + data->edit_win = NULL; + data->options_win = NULL; + data->list_win = NULL; + data->menu_win = NULL; // Indicate none of these windows exist yet + data->browser_win = NULL; + data->list_data = NULL; + data->connect_win = NULL; + data->error_win = NULL; /* SPR#1739 - SH */ + data->temp_win = NULL; /* SPR#2086 - SH */ + data->call_waiting = FALSE; /* SPR#1850 - SH */ + + //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 + //These mms_win and mms_win_type would hold the current mma status/error screen information + data->mms_win=NULL; + data->mms_win_type=0; + + /* SPR#1684 - SH - Removed customised menu area */ + + /* Allocate memory for some strings. SPR#1816 - SH - Unicode */ + + data->Buffer = (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT)); // Input buffer 1 + data->Buffer2 = (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT)); // Input buffer 2 + data->Message.text = NULL; + data->Message.length = 0; + data->LeftSoftKey = (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); // Left softkey text + data->RightSoftKey = (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); // Right softkey text + + /* Create list for options menu + * SPR#1816 - SH - Added unicode parameter */ + + data->OptionsList = ATB_wap_entry_list_create(WAP_OPTIONS_LIST, MAX_OPTIONS+1, OPTIONS_MAX_LEN, TRUE); // Options menu list + + data->PushData = NULL; /* SPR#2086 - SH - Create push data when needed */ + + + /* Generate "Please wait" window while WAP starts up + * SPR#2086 - SH - Don't generate window if there is no parent */ + + if (data->parent_win) + { + AUI_please_wait(data->parent_win); /* SPR#2086 */ + } + + data->View = NULL; + + /* SPR#2086 - SH - Store WAP application type and callback */ + data->application = application; + data->callback = callback; +//xrashmic 13 Feb, 2006 MMI-SPR-58532 +#ifdef MMI_GPRS_ENABLED + GPRS_SetCallback(parent_win, (T_GPRS_CB)AUI_wap_gprs_cb); +#endif /* MMI_GPRS_ENABLED */ + /* SPR#1842 - SH - Removed timer for WAP startup */ + + ATB_wap_start(&wap_start); + exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532 + return; + +} + + +/******************************************************************************* + + $Function: AUI_wap_data + + $Description: Returns the WAP data pointer + + $Returns: Pointer to WAP data + + $Arguments: None + +*******************************************************************************/ + +T_WAP_DATA *AUI_wap_data (void) +{ + if (wap_mmi_data==NULL) + { + TRACE_EVENT("** WAP not active **"); + } + + return wap_mmi_data; +} + + +/******************************************************************************* + + $Function: AUI_destroy + + $Description: Destroys the specified WAP windows and their data + SPR#2086 - No need for "win" parameter + + $Returns: void + + $Arguments: windows - determines which windows will be destroyed. + (e.g. LIST_WIN | EDIT_WIN | OPTIONS_WIN | WAP_WIN) + +*******************************************************************************/ +void AUI_destroy(USHORT windows) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT entryIndex; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy"); +#endif + + if (data==NULL) + { + TRACE_EVENT("*** Could not destroy data ***"); + return; + } + + /* SPR#1850 - SH - If we are closing the browser or exiting WAP, disconnect the call */ + + if ((windows & WAP_WIN) || (windows==RETURN_TO_MENU)) + { + exitingWap=TRUE;//xrashmic 13 Feb, 2006 MMI-SPR-58532 + + if (data->View) + { + /* SPR#2086 - Cancel a pending download */ + + if (data->View->object_id==WAP_OBJECT_ID) + { + ATB_wap_stop_download(data->View); + } + + /* SPR#2086 - Cancel a pending content download */ + + else if (data->View->object_id==WAP_DOWNLOAD_VIEW) + { + ATB_wap_content_cancel(WAP_DOWNLOAD_ID); + } + + /* End the call */ + + AUI_end_call(data->View->cId); + } + else + { + AUI_end_call(0); + } + } + + /* Check to see if WAP Browser Window should be destroyed */ + + if ((windows & BROWSER_WIN) && (data->browser_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy browser"); +#endif + + /* Destroy the browser window */ + + AUI_win_destroy(data->browser_win); + data->browser_win = NULL; + + /* SPR#1824 - SH - No longer destroy error dialog or change + * connection status here */ + + /* SPR#1794 - SH - Write history list to FFS */ + + ATB_wap_profile_save(data->View); + } + + /* SPR#1189 - SH - Can destroy connect window explicitly + Check to see if Connection Dialog should be destroyed */ + + if ((windows & CONNECT_WIN) && (data->connect_win != NULL)) // Destroy "connecting" window + { + SEND_EVENT(data->connect_win,DIALOG_DESTROY,0,0); + data->connect_win = NULL; + } + + /* Check to see if WAP Main Menu should be destroyed */ + + if ((windows & MENU_WIN) && (data->menu_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy menu"); +#endif + bookMenuDestroy(data->menu_win); + data->menu_win = NULL; + if (data->parent_win) + { + bookPhonebookDestroy(data->parent_win); + data->parent_win = NULL; + } + } + + /* Check to see if Options Menu should be destroyed */ + + if ((windows & OPTIONSMENU_WIN) && (data->optionsmenu_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy optionsmenu"); +#endif + /* WAP page can now update */ + + data->update_forbid = FALSE; + + /* Remove all options list entries */ + + for (entryIndex=0; entryIndex<(data->OptionsList->no_of_entries); entryIndex++) + { + if (data->OptionsList->Entry[entryIndex]!=NULL) + { + /* SPR#1816 - SH - All entries now the same length */ + AUI_wap_memory_free((UBYTE *)data->OptionsList->Entry[entryIndex], (SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); // Destroy each entry + data->OptionsList->Entry[entryIndex] = NULL; + } + } + + /* Destroy the list itself */ + + if (data->optionsmenu_data) + { + AUI_wap_memory_free((UBYTE *)data->optionsmenu_data->List, (data->optionsmenu_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); + AUI_wap_memory_free((UBYTE *)data->optionsmenu_data, sizeof(ListMenuData)); + data->optionsmenu_data = NULL; + } + + listsDestroy(data->optionsmenu_win); + data->optionsmenu_win = NULL; + } + + /* Check to see if List Window should be destroyed */ + + if ((windows & LIST_WIN) && (data->list_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy list"); +#endif + if (data->list_data) + { + AUI_wap_memory_free((UBYTE *)data->list_data->List, (data->list_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); + AUI_wap_memory_free((UBYTE *)data->list_data, sizeof(ListMenuData)); + data->list_data = NULL; // Destroy menu items list + } + listsDestroy(data->list_win); // Same for list window + data->list_win = NULL; + + + /* SPR#2086 - Destroy the list of pushed messages, if it exists */ + if (data->PushData) + { + AUI_wap_push_list_destroy(); + } + + } + + /* Check to see if Options Window should be destroyed */ + + if ((windows & OPTIONS_WIN) && (data->options_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy options"); +#endif + bookMenuDestroy(data->options_win); + data->options_win = NULL; + //CRR 25541: 06 oct 2004 - xpradipg + //The sub_options window of profiles list needs to be destroyed before + //displaying the profile list again. + if(data->sub_options_win) + { + bookMenuDestroy(data->sub_options_win); + data->sub_options_win = NULL; + } + } + + /* Check to see if Editor should be destroyed */ + + if ((windows & EDIT_WIN) && (data->edit_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy editor"); +#endif + //editor_destroy(data->edit_win); +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->edit_win); +#else /* NEW_EDITOR */ + editor_destroy(data->edit_win); +#endif /* NEW_EDITOR */ + + data->edit_win = NULL; + } + + /* Check to see if WAP Application should be destroyed */ + + if (windows & WAP_WIN) // Destroy WAP data win (exiting WAP) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy WAP"); +#endif + + /* SPR#1739 - SH - Destroy the error dialog if it exists */ + + if (data->error_win) + { + SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0); + data->error_win = NULL; + } + + /* SPR#1569 - SH - Destroy now happens in stages + * Display "Please wait" dialog; WAP destroy will complete on callback + * SPR#1824 - SH - Now only create please wait if it doesn't exist + * SPR#2086 - SH - Don't create please wait if there is no parent win */ + + if (!data->temp_win && data->parent_win!=NULL) + { + AUI_please_wait(data->parent_win); + } + + /* SPR#1824 - SH - If there's a view around, prepare the cache to shut down */ + + if (data->View) + { + + /* SPR#2086 - SH - destroy push data if it exists, and if we're destroying a push view */ + if (data->View->object_id==WAP_PUSH_VIEW && data->PushData) + { + AUI_wap_push_destroy(); + } + + + /* Set status to shutting down */ + ATB_wap_status_change(data->View, ATB_WAP_SHUTTING_DOWN); + + if (windows==ALL_WAP) + { + TRACE_EVENT("SHUTTING DOWN EVERYTHING"); + /* Here we override the callback function - this is an emergency shutdown, + * instigated by the WAP application rather than by the user */ + + data->callback = (T_WAP_CB) AUI_wap_shutdown; + } + } + + ATB_wap_destroy(); + } + + /* SPR#2086 - SH - No longer need to recreate menu */ + +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy end"); +#endif + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_cache_prepare_done + + $Description: Cache is prepared for WAP_TERMINATE + SPR#2086 - Simplify + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_cache_prepare_done(void) +{ + TRACE_FUNCTION("AUI_wap_cache_prepare_done()"); + + ATB_wap_destroy(); + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_close_view_done + + $Description: SPR#1569 - SH - Added this function + Called when a view has been closed + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_close_view_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_close_view_done"); +#endif + + if (!data) + { + return; + } + + /* If we've destroyed all the views, then prepare the cache for shutdown */ + + if (data->view_id==WAP_NO_VIEW) + { + ATB_wap_cache_prepare(); + } + + /* Otherwise, we've closed down everything necessary */ + else + { + AUI_wap_callback(TRUE); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_terminate_done + + $Description: SPR#1569 - SH - Added this function + Called when a WAP termination is complete + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_terminate_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_CB callback; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_terminate_done"); +#endif + + if (!data) + { + return; + } + + AUI_please_wait_destroy(); + + if (data->Buffer) + AUI_wap_memory_free ((UBYTE *)data->Buffer, (INPUT_MAX_LEN+1)*sizeof(USHORT)); // Delete input buffer 1 + + if (data->Buffer2) + AUI_wap_memory_free ((UBYTE *)data->Buffer2, (INPUT_MAX_LEN+1)*sizeof(USHORT)); // Delete input buffer 2 + + AUI_wap_string_free(&data->Message); /*Delete output buffer */ + + if (data->LeftSoftKey) + AUI_wap_memory_free ((UBYTE *)data->LeftSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); // Delete left softkey text + + if (data->RightSoftKey) + AUI_wap_memory_free ((UBYTE *)data->RightSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); // Delete right softkey text + + if (data->OptionsList) + ATB_wap_entry_list_destroy(data->OptionsList); // Destroy options menu list + + /* Before we destroy data, store callback function */ + + callback = data->callback; + + /* Destroy WAP data */ + + wap_mmi_data = 0; + AUI_wap_memory_free ((UBYTE *)data, sizeof (T_WAP_DATA)); // Destroy main data structure + + /* Call callback to notify caller that WAP is closed */ + + if (callback) + { + callback(TRUE); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_shutdown + + $Description: Callback function called when a view is shut down. For this case, all + views must be destroyed, so continue with shutdown process + SPR#2086 - Added + + $Returns: None + + $Arguments: result - The result of the view shutdown + +*******************************************************************************/ + +static void AUI_wap_shutdown(UBYTE result) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_shutdown"); +#endif + + if (!result) + { + return; + } + + /* If there are still views to shut down, do so */ + + ATB_wap_destroy(); + + return; +} + + +/* SPR#2086 - Removed functions associated with main WAP window */ + +/******************************************************************************* + + $Function: AUI_connecting_dialog + + $Description: Show "Connecting..." dialog (displayed while sending configuration + information to WAP gateway) + SPR#2086 - Remove window parameter, no longer return window + + $Returns: Window handler + + $Arguments: status - The status to display + +*******************************************************************************/ + +void AUI_connecting_dialog (ULONG status) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + int timer; + T_MFW_EVENT keyEvents; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connecting_dialog"); +#endif + + if (!data) + { + return; + } + + + /* SPR#1982 - SH - Standard values for events */ + + timer = FOREVER; + keyEvents = KEY_CLEAR | KEY_RIGHT; + + switch(status) + { + case ATB_WAP_ATTACHING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtAttaching, TxtGPRS, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_LOGGING_IN: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtConnecting, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_CONNECTING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtLoggingIn, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_CARD_READING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; // Show name of card being read + break; + + case ATB_WAP_DOWNLOADING: + /* SPR#2086 - Show "loading" message if we're downloading content */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1); /* +1 space for 0x80 */ + if (data->Message.text[0]!=0x7F80) + { + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN); + } + else + { + ATB_uc_text_copy(data->Message.text, data->View->Title, CARD_TITLE_MAX_LEN); + } + display_info.TextString2 = (char *)data->Message.text; // Show name of card being read + break; + + case ATB_WAP_DEACTIVATING: + /* SPR#1982 - SH - Waiting for context to deactivate, dialog with no cancel button */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP); + timer = TEN_SECS; + keyEvents = 0; + break; + + case ATB_WAP_PLEASE_WAIT: + default: + dlg_initDisplayData_TextId(&display_info, TxtNull, TxtCancel, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP); + break; + } + + /* Destroy any previous dialog */ + + AUI_destroy(CONNECT_WIN); /* SPR#2086 */ + + /* Create new dialog */ + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_connecting_dialog_cb, timer, keyEvents ); + + /* SPR#2086 - Automatically assign connect_win */ + + data->connect_win = info_dialog(data->parent_win, &display_info); + + return; +} + + +/******************************************************************************* + + $Function: AUI_connecting_dialog_cb + + $Description: Callback function for connecting dialog + + $Returns: void + + $Arguments: win - pointer to the WAP data window + identifier - identifies function that has called callback + reason - reason for callback + +*******************************************************************************/ + +void AUI_connecting_dialog_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connecting_dialog_cb"); +#endif + + /* SPR#1739 - SH - This should be set to NULL in all cases */ + + data->connect_win = NULL; + + /* SPR#1816 - SH - Free memory allocated for status message */ + + AUI_wap_string_free(&data->Message); + + switch(reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: // "Cancel" exits browser + /* SPR#1189 - SH - If browser is active, completely exit WAP. + * Otherwise, just return to last menu. */ + + if (data->browser_win) + { + AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */ + } + else + { + /* SPR#2086 - Cancel download */ + + if (data->View->object_id==WAP_OBJECT_ID) + { + /* Cancel any pending operation */ + ATB_wap_stop_download(data->View); + } + else if (data->View->object_id==WAP_DOWNLOAD_VIEW) + { + ATB_wap_content_cancel(WAP_DOWNLOAD_ID); + } + + /* End the call. SPR#1850 - SH - Provide function with the call ID */ + AUI_end_call(data->View->cId); + /* SPR#1982 - SH - Indicate we're no longer connected */ + if (!ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING)) + { + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + } + } + break; + + default: + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_connect_URL + + $Description: Connects to WAP gateway (if required) and starts to download URL + SPR#2086 - removed 'win' parameter + - Factored common tasks into following functions + + $Returns: void + + $Arguments: URL - URL to connect to + +*******************************************************************************/ + +void AUI_wap_connect_URL(char *URL) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_connect_URL"); +#endif + + if (!data) + { + return; + } + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //Unsetting this flag when we lauch a new URL + pluginImageDisplayed=FALSE; + + /* Store URL to access later */ + + strcpy(data->Buffer, URL); + + /* Check if browsing view exists. If it doesn't, start WAP for + * browsing and load URL on callback */ + + View = ATB_wap_get_view(WAP_OBJECT_ID); + + if (!View) + { + AUI_wap_start(WAP_BROWSER, AUI_wap_start_load_URL); + } + else + { + AUI_wap_start_load_URL(TRUE); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_prepare_to_connect + + $Description: Gets ready to initiate a WAP connection + SPR#2086 - Added + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +void AUI_prepare_to_connect() +{ + T_WAP_DATA *data = AUI_wap_data(); + + if (!data) + { + return; + } + + /* Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + /* If the browser is already visible, we can destroy the other windows */ + + if (data->browser_win) + { + AUI_destroy(LIST_WIN | OPTIONSMENU_WIN | EDIT_WIN | OPTIONS_WIN); /* SPR#2086 */ + } + + /* Display "Please Wait" if browser is not open */ + + if (!data->browser_win || !data->connected) + { + ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); + } + + /* If we're not already connected, send config data */ + + if (!data->connected) + { + ATB_wap_profile_send(data->View); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_start_load_URL + + $Description: Callback function for starting WAP and loading a URL + SPR#2086 - SH - Added + + $Returns: void + + $Arguments: result - TRUE if WAP started successfully. + +*******************************************************************************/ + +void AUI_wap_start_load_URL(UBYTE result) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_push_start_load_URL"); +#endif + + if (!data || !result) + { + return; + } + + /* Prepare to connect */ + + AUI_prepare_to_connect(); + + /* Copy URL into View storage */ + + strcpy(data->View->URL, data->Buffer); + + /* Send event requesting URL download */ + + ATB_wap_download_url(data->View, data->View->URL, TRUE); + + /* Destroy some windows for now; we want to return to the list win + * if the connection is cancelled */ + + AUI_destroy(OPTIONS_WIN | EDIT_WIN); /* SPR#2086 */ + + return; +} + + +/******************************************************************************* + + $Function: AUI_win_create + + $Description: Create the WAP card browser window + + $Returns: void + + $Arguments: parent_win - Pointer to the WAP data window + +*******************************************************************************/ + +T_MFW_HND AUI_win_create (T_MFW_HND parent_win) +{ + T_MFW_WIN *win_data; + T_WAP_BROWSER *browser_data = (T_WAP_BROWSER *)AUI_wap_memory_alloc(sizeof(T_WAP_BROWSER)); // WAP browser data + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_create"); +#endif + + // xreddymn Jun-28-2005 MMI-SPR-32467 + browser_data->win = win_create(parent_win, 0, E_WIN_VISIBLE | E_WIN_SUSPEND, (T_MFW_CB)AUI_win_cb); // Create the browser window + + /* Create keyboard handler */ + browser_data->kbd = kbd_create (browser_data->win, KEY_ALL, (T_MFW_CB)AUI_kbd_cb); + browser_data->kbd_long = kbd_create (browser_data->win, KEY_ALL|KEY_LONG, (T_MFW_CB)AUI_kbd_long_cb); + + /* Create window handler */ + + browser_data->mmi_control.dialog = (T_DIALOG_FUNC)AUI_win_control; + browser_data->mmi_control.data = (void *)browser_data; + browser_data->parent_win = parent_win; + win_data = ((T_MFW_HDR *)browser_data->win)->data; + win_data->user = (void *)browser_data; // Attach browser data to window + + return browser_data->win; +} + + +/******************************************************************************* + + $Function: AUI_win_destroy + + $Description: Destroy the WAP card browser window + + $Returns: void + + $Arguments: win - Pointer to the WAP browser window + +*******************************************************************************/ + +int AUI_win_destroy (T_MFW_HND win) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_WAP_BROWSER *data = (T_WAP_BROWSER *)win_data->user; // WAP browser data + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_destroy"); +#endif + + kbd_delete(data->kbd); // Delete keyboard handlers + kbd_delete(data->kbd_long); + + win_delete(win); // Delete window + AUI_wap_memory_free((UBYTE *)data, sizeof(T_WAP_BROWSER)); // Destroy data structure + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_win_control + + $Description: Dialog function for WAP Browser window + + $Returns: void + + $Arguments: win - WAP card browser window + event - Window handle event + value - not used + parameter - not used + +*******************************************************************************/ + +void AUI_win_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_WAP_BROWSER *data = (T_WAP_BROWSER *)win_data->user; // WAP Browser data + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_control"); +#endif + + switch (event) + { + case WAP_INIT: // Currently does nothing + break; + + case WAP_SHOW_CARD: // Show the current card + win_show(win); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_win_cb + + $Description: Callback function for browser window + + $Returns: void + + $Arguments: event - window handle event + win - WAP browser window + +*******************************************************************************/ + +static int AUI_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_cb"); +#endif + + if (!data) + { + return NULL; + } + + if (data->update_forbid) + { + return NULL; + } + + switch (event) + { + case E_WIN_VISIBLE: + if (win->flags & E_WIN_VISIBLE) + { + resources_setColour( COLOUR_WAP ); + dspl_ClearAll(); // Clear the browser area + + /* SPR#2086 - TEST CODE - If we are downloading, + * display total amount of data downloaded */ + + //xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 + //The following screen should not be displayed for the MMS downloaing or sending scenario. + if ((data->View->object_id!=WAP_OBJECT_ID) && !MMSactive) + { + dspl_TextOut(0,0,DSPL_TXTATTR_SIGNED_COORDS, (char *)data->View->Title); + resources_setSKColour( COLOUR_WAP ); + displaySoftKeys(TxtExit, TxtEnterURL); + return 1; + } + + ATB_wap_buffer_display(data->View); // Display the buffered page + resources_setSKColour( COLOUR_WAP ); + + /* SPR#1575 - SH - Display "Cancel" when downloading or reading in a card */ + if (ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING) + || ATB_wap_status_get(data->View, ATB_WAP_CARD_READING)) + { + displaySoftKeys(TxtNull, TxtCancel); + } + else + { + if (data->View->CustSoftKeys) + { + /* SPR#1816 - SH - Unicode */ + displayCustSoftKeys((char *)data->LeftSoftKey, (char *)data->RightSoftKey); + } + else + { + if (data->View->CanGoBack) + displaySoftKeys(TxtSoftOptions, TxtSoftBack); // Show "options" and "back" + else + displaySoftKeys(TxtSoftOptions, TxtNull); // Only show "options" if we can't go back + } + } + } + break; + + // xreddymn Jun-28-2005 MMI-SPR-32467 + case E_WIN_SUSPEND: + TRACE_EVENT("E_WIN_SUSPEND"); + ATB_animated_GIF_clear(); + break; + + default: + return 0; + } + return 1; +} + + +// July 13 2005 REF: MMI-SPR-32012 x0012849 +// To change the functionality of RSK, when there is no page to go back +/******************************************************************************* + + $Function: ExitWAP + + $Description: The functionality is same as when we press HANG UP Key. + + $Returns: Nothing + + $Arguments: None +*******************************************************************************/ + +void ExitWAP(BOOL value) +{ + T_WAP_VIEW *View; + T_WAP_DATA *data = AUI_wap_data(); + View = data->View; + //xrashmic 17 Aug, 2005 MMI-SPR-31364 + //Exiting due to out of memory + if(WAP_OUT_OF_MEM==value) + data->wapOutOfMem=TRUE; + else + data->wapOutOfMem=FALSE; + ATB_wap_stop_download(View); + AUI_wap_string_free(&data->Message); + AUI_destroy(RETURN_TO_MENU); + return; +} + +/******************************************************************************* + + $Function: AUI_kbd_cb + + $Description: Keyboard event handler for browser window + + $Returns: status int + + $Arguments: event - window handle event + keyboard - keyboard control block + +*******************************************************************************/ + +static int AUI_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_kbd_cb"); +#endif + + if (!data) + { + return NULL; + } + + View = data->View; + + /* SPR#2086 - TEST CODE - Soft keys to control download + * screen */ + if (View->object_id!=WAP_OBJECT_ID) + { + if (keyboard->code==KCD_LEFT || keyboard->code==KCD_HUP) + { + AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */ + } + else if (keyboard->code==KCD_RIGHT) + { + AUI_download(NULL,NULL); + } + return MFW_EVENT_CONSUMED; + } + + switch (keyboard->code) + { + case KCD_LEFT: + /* SPR#1575 - SH - Open options menu if not downloading or reading a card */ + if (!ATB_wap_status_get(View, ATB_WAP_DOWNLOADING) + && !ATB_wap_status_get(View, ATB_WAP_CARD_READING)) + { + AUI_wap_options_menu_open(ATB_wap_buffer_identify_element(View)); + } + break; + + case KCD_RIGHT: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //Unsetting this flag when we exit the wap page + pluginImageDisplayed=FALSE; + + /* SPR#1575 - SH - Open options menu if not downloading or reading a card */ + if (ATB_wap_status_get(View, ATB_WAP_DOWNLOADING) + || ATB_wap_status_get(View, ATB_WAP_CARD_READING)) + { + ATB_wap_stop_download(View); + } + else + { + if (View->CustSoftKeys) + ATB_wap_key_selected(View, View->CustSoftKeyId); // Customised right soft key + else + ATB_wap_card_go_back(View); // Otherwise default is "Back" + } + break; + + case KCD_MNUUP: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_UP); // Scroll card up + break; + + case KCD_MNUDOWN: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_DOWN); // Scroll card down + break; + // Apr 28 2005 REF: MMI-SPR-30400 x0012849 + // Handle the MNULEFT event. + case KCD_MNULEFT: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_LEFT); // Scroll card up + break; + // Apr 28 2005 REF: MMI-SPR-30400 x0012849 + // Handle the MNURIGHT event. + case KCD_MNURIGHT: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_RIGHT); // Scroll card down + break; + + case KCD_1: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_LEFT); // Scroll card left + break; + + case KCD_3: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_RIGHT); // Scroll card right + break; + + case KCD_2: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_scroll(View,0); // Go to top of card + break; + + case KCD_5: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_scroll(View,View->cardYPosition-WAP_PAGE_SCROLL); // Scroll up a page + break; + + case KCD_8: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_scroll(View,View->cardYPosition+WAP_PAGE_SCROLL); // Scroll down a page + break; + + case KCD_0: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_scroll(View,View->cardHeight-WAP_SCREEN_HEIGHT); // Go to bottom of card + break; + + /* SH - So that select button can be used to select links etc */ + + case KCD_MNUSELECT: + case KCD_CALL: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + ATB_wap_card_key_event(View, WAP_KEY_SELECT); // Select an option + break; + + case KCD_HUP: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //Unsetting this flag when we exit the wap page + pluginImageDisplayed=FALSE; + ATB_wap_stop_download(View); + + //x0018858 23 Feb, 2005 MMI-SPR-27872 + //Releasing the text string when exitting the wap page. + //begin + AUI_wap_string_free(&data->Message); + //end + + AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */ + break; + + case KCD_STAR: + //xrashmic 21 Jan, 2005 MMI-SPR-28223 + //When a plugin image is being displayed we ignore this key event + if(!pluginImageDisplayed) + { + /* SPR#2086 - Toggle image scaling */ + ATB_wap_profile_setting_change( + WAP_STATUS_SCALEIMAGES, + ATB_wap_profile_setting(WAP_STATUS_SCALEIMAGES)^1); + ATB_wap_profile_save(data->View); // Save change to flash + ATB_wap_card_refresh(View); + } + break; + + default: + break; + } + return MFW_EVENT_CONSUMED; +} + + +static int AUI_kbd_long_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_goto_www + + $Description: Opens up a text edit screen for entering URLs with "www." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_www(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_www"); +#endif + + /* Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + AUI_edit(GET_TEXT(TxtWWWdot),WAP_GOTO_URL,TxtEnterURL,URL_MAX_LEN); // Enter editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_goto_wap + + $Description: Opens up a text edit screen for entering URLs with "wap." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_wap(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_wap"); +#endif + + /* Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + AUI_edit(GET_TEXT(TxtWAPdot),WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN); // Enter editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: MMI_AUI_goto_other + + $Description: Opens up a blank text edit screen for entering URLs + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_other(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_other"); +#endif + + /* Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + AUI_edit("",WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN); // Enter editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_edit + + $Description: Opens up a text edit screen for editing URLs + + $Returns: + + $Arguments: shortcut - pointer to a string that will appear in the editor + identifier - specifies what to do with the URL (connect, store etc). + prompt - textId of prompt to display + maxlen - maximum length of the edited string + +*******************************************************************************/ + +int AUI_edit(char *shortcut, USHORT identifier, USHORT prompt, USHORT maxlen) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Ensure requested buffer size is not too big */ + if (maxlen>INPUT_MAX_LEN) + maxlen = INPUT_MAX_LEN; + + if (identifier==WAP_EDIT_HOMEPAGE) // If we're editing the homepage URL, + shortcut = data->View->Profile->Homepage; // this is the shortcut + + if (identifier==WAP_EDIT_APN) + shortcut = data->View->Profile->APN; + + /* SPR#1816 - SH - For unicode editors, set buffer up appropriately */ + #if 0 + if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY) + { + /* Clear editor for name (unicode) */ + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN); // Copy name into editing buffer + //AUI_edit_create(identifier, prompt, maxlen*2+2); /* SPR#2086 */ + AUI_edit_create(identifier, prompt, maxlen*2+2); /* SPR#2086 */ + } + else + { + strcpy(data->Buffer, shortcut); // Copy shortcut into editing buffer + AUI_edit_create(identifier, prompt, maxlen); /* SPR#2086 */ + } + #endif + if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY) + { + /* Clear editor for name */ +#ifdef NEW_EDITOR + ATB_uc_text_copy((USHORT *)data->Buffer, (USHORT *)shortcut, CARD_TITLE_MAX_LEN); + AUI_edit_create(identifier, prompt, maxlen, TRUE); +#else + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN); + AUI_edit_create( identifier, prompt, maxlen*2+2, TRUE); +#endif + } + else + { + strcpy(data->Buffer, shortcut); + AUI_edit_create(identifier, prompt, maxlen, FALSE); + } + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_edit_create + + $Description: Creates the edit screen + SPR#2086 - Remove window parameter + + $Returns: none. + + $Arguments: identifier - purpose for edit window (e.g. go to URL) + prompt - textId of prompt to display + maxlen - maximum length of the editor + +*******************************************************************************/ +#if 0 +static T_MFW_HND AUI_edit_create(USHORT identifier, USHORT prompt, USHORT maxlen) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit_create"); +#endif + + AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb); // Setup standard editor + + editor_data.TextId = prompt; // Prompt to display above editor + editor_data.Identifier = identifier; // Purpose of edit window (for callback) + + data->edit_win = editor_start(data->parent_win,&editor_data); /* SPR#2086 */ // Start the editor + + return data->edit_win; +} +#endif + +//static T_MFW_HND AUI_edit_create(MfwHnd parent_win, USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode) +static T_MFW_HND AUI_edit_create(USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit_create"); +#endif + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA, prompt, (T_AUI_EDIT_CB)AUI_edit_cb); + + if (unicode) + { + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, maxlen); + } + else + { + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, maxlen); + } + + //data->edit_win = AUI_edit_Start(data->win, &editor_data); + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb); + editor_data.TextId = prompt; /* Prompt to display above editor */ + editor_data.Identifier = identifier; /* Purpose of edit window (for callback) */ + + data->edit_win = editor_start(data->parent_win,&editor_data); +#endif /* NEW_EDITOR */ + + return data->edit_win; +} + + +/******************************************************************************* + + $Function: AUI_edit_cb + + $Description: Callback function for edit screen. This performs the following functions, + the user having provided a new or updated URL: + + - Goto URL + - Editing of Bookmark and History entries + - Add new bookmark + - Edit homepage + + $Returns: void + + $Arguments: win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_edit_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch (reason) + { + case INFO_KCD_LEFT: + switch (identifier) + { + /* Go to URL */ + + case WAP_GOTO_URL: + AUI_wap_connect_URL(data->Buffer); /* SPR#2086 - modified */ + break; + + /* Edit Bookmark name */ + + case WAP_EDIT_BOOKMARK: + /* SPR#1684 - SH - Changed behaviour here */ + AUI_destroy(LIST_WIN); /* SPR#2086 */ + //xrashmic 03 Sep, 2004 MMI-SPR-24395 + //The bookmark names was not getting stored correctly. The + //first chracter was neglected when data->Buffer[2] was sent + #ifdef NEW_EDITOR + ATB_wap_entry_change(WAP_BOOKMARKS_LIST, View->Bookmarks, data->Buffer, data->OptionSelect); /* SPR#1816 - SH */ + #else + ATB_wap_entry_change(WAP_BOOKMARKS_LIST, View->Bookmarks, &data->Buffer[2], data->OptionSelect); /* SPR#1816 - SH */ + #endif + ATB_wap_profile_save(View); + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged); + break; + + /* Edit Bookmark URL */ + + case WAP_EDIT_BOOKMARK_URL: + /* SPR#1684 - SH - Changed behaviour here */ + AUI_destroy(LIST_WIN); /* SPR#2086 */ + ATB_wap_entry_change(WAP_URL_LIST, View->BookmarksURL, data->Buffer, data->OptionSelect); /* SPR#1816 - SH */ + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged); // Display "Changed" message + break; + + /* Edit History name */ + + case WAP_EDIT_HISTORY: + /* SPR#1684 - SH - Changed behaviour here */ + AUI_destroy(LIST_WIN); /* SPR#2086 */ + //xrashmic 03 Sep, 2004 MMI-SPR-24395 + //The history names was not getting stored correctly. The + //first chracter was neglected when data->Buffer[2] was sent + #ifdef NEW_EDITOR + ATB_wap_entry_change(WAP_HISTORY_LIST, View->History, data->Buffer, data->OptionSelect); /* SPR#1816 - SH */ + #else + ATB_wap_entry_change(WAP_HISTORY_LIST, View->History, &data->Buffer[2], data->OptionSelect); /* SPR#1816 - SH */ + #endif + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged); // Display "Changed" message + break; + + /* Edit History URL */ + + case WAP_EDIT_HISTORY_URL: + /* SPR#1684 - SH - Changed behaviour here */ + AUI_destroy(LIST_WIN); /* SPR#2086 */ + ATB_wap_entry_change(WAP_URL_LIST, View->HistoryURL, data->Buffer, data->OptionSelect); /* SPR#1816 - SH */ + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged); // Display "Changed" message + break; + + /* Add Bookmark */ + + case WAP_ADD_BOOKMARK: + AUI_destroy(EDIT_WIN); /* SPR#2086 */ // Destroy editor + strcpy(data->Buffer2, data->Buffer); // Store URL in second buffer + //CRR 25541: 06 oct 2004 - xpradipg + //the buffer is terminated at buffer[0] for NEW EDITOR + #ifdef NEW_EDITOR + //xrashmic 21 Dec, 2004 MMI-SPR-27620 + //The buffer needs to be cleared before prompting for the Name + data->Buffer[0] = 0; + data->Buffer[1] = 0; + + #else + /* SPR#1816 - SH - Clear editor for name (unicode) */ + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + data->Buffer[2] = 0; + data->Buffer[3] = 0; + #endif + //AUI_edit_create(WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN); /* SPR#2086 */ + AUI_edit_create(WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN, TRUE); /* SPR#2086 */ + break; + + /* Add Bookmark name */ + + case WAP_ADD_BOOKMARK_NAME: + /* SPR#1684 - SH - Changed behaviour here */ + AUI_destroy(LIST_WIN); /* SPR#2086 */ + if (ATB_wap_entry_add(View->BookmarksURL, data->Buffer2)==WAP_FAIL) // Add URL entry + { + AUI_info_dialog(TxtBookmarks, TxtFull); /* SPR#2086 */ // If list is full, say so + } + else + { + //xrashmic 05 Nov, 2004 MMI-SPR-25252 + //The Bookmark names was not getting stored correctly. The + //first chracter was neglected when data->Buffer[2] was sent +#ifdef NEW_EDITOR + ATB_wap_entry_add(View->Bookmarks, data->Buffer); +#else /* NEW_EDITOR */ + ATB_wap_entry_add(View->Bookmarks, &data->Buffer[2]); /* SPR#1816 - SH */ +#endif /* NEW_EDITOR */ + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtStored); + } + break; + + /* Edit Homepage URL */ + + case WAP_EDIT_HOMEPAGE: + strcpy(View->Profile->Homepage, data->Buffer); // Change the homepage + ATB_wap_profile_save(View); // Save change to flash + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + break; + + /* Edit APN */ + + case WAP_EDIT_APN: + strcpy(View->Profile->APN, data->Buffer); // Change the homepage + ATB_wap_profile_save(View); // Save change to flash + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + break; + + case WAP_EDIT_DOWNLOAD: + /* Display "Please Wait" */ + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + //Reset the size to zero before the download starts + downloaded_data_size=0; + AUI_connecting_dialog(ATB_WAP_PLEASE_WAIT); /* SPR#2086 */ + AUI_wap_content_get(1, data->Buffer, TRUE, "*/*"); + break; + + default: + break; + } + break; + + /* RSK or HUP key exits menu */ + + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: // (Exit from Editor) + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + if (identifier == WAP_ADD_BOOKMARK_NAME) // If we've destroyed the name editor, + { + strcpy(data->Buffer, data->Buffer2); // copy the URL back into the editor + //AUI_edit_create(WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN); /* SPR#2086 */ + AUI_edit_create(WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN, FALSE); /* SPR#2086 */ + } + break; + + default: + break; + } + + return; +} + +/******************************************************************************* + + $Function: AUI_list_redraw + + $Description: SPR#1684 -SH - Added this function + When changing, adding, or deleting bookmarks or history list items, + this function is called to display the appropriate dialog. On callback, + the AUI_list_redraw_cb() function redraws the appropriate list. + + $Returns: None. + + $Arguments: list - The type of list to be redrawn + TxtId - The text string to be displayed in a dialog for 3s + +*******************************************************************************/ + +void AUI_list_redraw(USHORT list, USHORT TxtId) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + + if (!data) + { + return; + } + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_list_redraw_cb, THREE_SECS, 0 ); + display_info.Identifier = list; + + info_dialog(data->parent_win, &display_info); + + return; +} + + +/******************************************************************************* + + $Function: AUI_list_redraw_cb + + $Description: SPR#1684 -SH - Added this function + Called when a 3s info dialog times out: the appropriate list is + redrawn (history, bookmarks). + + $Returns: None. + + $Arguments: win - the parent window + identifier - stores the type of list + reson - not used. + +*******************************************************************************/ + +static void AUI_list_redraw_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_list_redraw_cb()"); + + if (!data) + { + return; + } + + /* Kill any residual editor or options window */ + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + // The profile list window should be redrawn. Hence deleting the old list here. + AUI_destroy(LIST_WIN|EDIT_WIN | OPTIONS_WIN); /* SPR#2086 */ + + /* Redraw the appropriate list */ + + switch(identifier) + { + case WAP_BOOKMARKS_LIST: + AUI_entry_list(data->View->Bookmarks, (ListCbFunc)AUI_bookmarks_list_cb,0); + break; + + case WAP_HISTORY_LIST: + AUI_entry_list(data->View->History, (ListCbFunc)AUI_history_list_cb,0); + break; + + /* SPR#1921 - SH */ + case WAP_PROFILES_SETUP: + AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,0); + break; + + + /* SPR#2086 - SH */ + case WAP_PUSH_LIST: + AUI_wap_push_list(NULL, NULL); + break; + + } + return; +} + +/******************************************************************************* + + $Function: AUI_profile_list_redraw + + $Description: Re-displays the profile list menu + + $Returns: None. + + $Arguments: index: Index of the currently selected profile + xreddymn Jan-27-2005 MMI-SPR-28135 + +*******************************************************************************/ + +void AUI_profile_list_redraw(S32 index) +{ + T_WAP_DATA *data = AUI_wap_data(); + + if ((data==NULL)||(data->View==NULL)||(data->View->ProfilesList==NULL)) + { + return; + } + if(!((data->list_data==NULL)||(data->list_data->win==NULL))) + { + AUI_destroy(LIST_WIN); + ATB_wap_profile_names_read(data->View); + data->View->ProfilesList->type = WAP_PROFILES_LIST; + AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb, index); + data->View->ProfileId=index; + } + else + { + ATB_wap_profile_names_read(data->View); + } +} + +/******************************************************************************* + + $Function: AUI_bookmarks_add + + $Description: SPR#1684 - SH - Added this function. + New bookmark menu item. Checks to see if bookmarks are full; + if so, displays message and exits. Otherwise, brings up usual + new bookmark shortcut menu. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_NEW_VIEW_IND wap_view; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_start_done"); +#endif + + if (!data) + { + return; + } + + /* If there is space in the bookmarks list */ + + if (data->View->Bookmarks->no_of_entries < data->View->Bookmarks->max_entries) + { + /* SPR#1684 - SH - Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(OPTIONS_WIN); /* SPR#2086 */ + } + /* Create Add Bookmark Menu */ + //#ifdef MMI_WAP_ENABLED //added by ellen + data->options_win = bookMenuStart(data->parent_win, WAPNewBookmarkAttributes(), 0); /* SPR#2086 */ + //#endif + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb); // Add our own callback + } + else + { + AUI_info_dialog(TxtBookmarks, TxtFull); /* SPR#2086 */ + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_www + + $Description: Opens up a text edit screen for entering URLs with "www." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_www(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_www"); +#endif + + AUI_edit(GET_TEXT(TxtWWWdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); // Open up the editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_wap + + $Description: Opens up a text edit screen for entering URLs with "wap." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_wap(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_wap"); +#endif + + AUI_edit(GET_TEXT(TxtWAPdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); // Open up the editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_other + + $Description: Opens up a blank text edit screen for entering URLs + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_other(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_other"); +#endif + + AUI_edit("",WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); // Open up the editor + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_list + + $Description: List Bookmarks menu option + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_list(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_list"); +#endif + + if (!data) + { + return; + } + + /* SPR#2086 - Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + /* Create the list menu */ + + if (data->View->Bookmarks) + { + AUI_entry_list(data->View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_list_cb + + $Description: Callback function for bookmarks list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of bookmarks list + +*******************************************************************************/ + +static void AUI_bookmarks_list_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_list_cb"); + TRACE_EVENT_P1("Exit reason: %d", EntryListData->Reason); +#endif + + if (!data) + { + return; + } + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + + data->OptionSelect = EntryListData->ListPosition; // Store selected bookmark no. + data->URLSelect = data->View->BookmarksURL->Entry[data->OptionSelect]; // Store the URL of the bookmark + /* SPR#1684 - SH - Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(OPTIONS_WIN); /* SPR#2086 */ + } + data->options_win = bookMenuStart(win, WAPBookOptMenuAttributes(), 0); // Create bookmark options menu + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb); // Add our own callback + break; + + case LISTS_REASON_SEND: + data->OptionSelect = EntryListData->ListPosition; // Store selected bookmark no. + data->URLSelect = data->View->BookmarksURL->Entry[data->OptionSelect]; // Store the URL of the bookmark + + AUI_wap_connect_URL(data->URLSelect); /* SPR#2086 - modified */ + break; + + case LISTS_REASON_CLEAR: + case LISTS_REASON_HANGUP: // sbh: added, so hangup key exits + case LISTS_REASON_BACK: // Exit list menu + AUI_destroy(LIST_WIN); /* SPR#2086 */ + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_goto + + $Description: Open up the selected bookmark in the WAP browser + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_goto(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_goto"); +#endif + + return AUI_entry_goto(WAP_BOOKMARKS_LIST); +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_edit + + $Description: Edit the name of the selected bookmark + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + UBYTE entryIndex; + + TRACE_FUNCTION("AUI_bookmarks_edit"); +#endif + + if (!data) + { + return; + } + + AUI_edit(data->View->Bookmarks->Entry[data->OptionSelect], + WAP_EDIT_BOOKMARK, TxtEditName, CARD_TITLE_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_edit_url + + $Description: Edit the URL of the selected bookmark + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_edit_url(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_edit_url"); +#endif + + if (!data) + { + return; + } + + AUI_edit(data->View->BookmarksURL->Entry[data->OptionSelect], + WAP_EDIT_BOOKMARK_URL, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_delete + + $Description: Delete the selected bookmark from the bookmarks list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_delete(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_delete"); +#endif + + AUI_entry_delete(WAP_DELETE_BOOKMARK); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_sendSMS + + $Description: Open up a bookmark in an SMS write editor + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_sendSMS(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_sendSMS"); +#endif + + AUI_entry_sendSMS(); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_list + + $Description: List History menu option + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_history_list(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_list"); +#endif + + if (!data) + { + return; + } + + /* SPR#2086 - Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + /* Create the history list menu */ + + if (data->View->History) + { + AUI_entry_list(data->View->History, (ListCbFunc) AUI_history_list_cb,0); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_list_cb + + $Description: Callback function for history list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of history lsit + +*******************************************************************************/ + +static void AUI_history_list_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_list_cb"); +#endif + + if (!data) + { + return; + } + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + + data->OptionSelect = EntryListData->ListPosition; // Store selected history entry no. + data->URLSelect = data->View->HistoryURL->Entry[data->OptionSelect]; // Store the URL of the history entry + /* SPR#1684 - SH - Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(OPTIONS_WIN); /* SPR#2086 */ + } + data->options_win = bookMenuStart(win, WAPHistOptMenuAttributes(), 0); // Create history options menu + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb); // Add our own callback + break; + + case LISTS_REASON_SEND: + data->OptionSelect = EntryListData->ListPosition; // Store selected bookmark no. + data->URLSelect = data->View->HistoryURL->Entry[data->OptionSelect]; // Store the URL of the bookmark + + AUI_wap_connect_URL(data->URLSelect); /* SPR#2086 - modified */ + break; + + case LISTS_REASON_BACK: // Exit menu + AUI_destroy(LIST_WIN); /* SPR#2086 */ + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_history_goto + + $Description: Open up the selected history entry in the WAP browser + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_goto(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_goto"); +#endif + + return AUI_entry_goto(WAP_HISTORY_LIST); +} + + +/******************************************************************************* + + $Function: AUI_history_edit + + $Description: Edit the name of the selected history entry + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT *EntryUC; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_edit"); +#endif + + if (!data) + { + return 0; + } + + EntryUC = (USHORT *)data->View->History->Entry[data->OptionSelect]; + + AUI_edit((char *)&EntryUC[NUMBER_PADDING], WAP_EDIT_HISTORY, TxtEditName, CARD_TITLE_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_edit_url + + $Description: Edit the URL of the selected history entry + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_edit_url(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_edit_url"); +#endif + + if (!data) + { + return; + } + + AUI_edit(data->View->HistoryURL->Entry[data->OptionSelect], + WAP_EDIT_HISTORY_URL, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_delete + + $Description: Delete the selected entry from the history list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_delete(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_delete"); +#endif + + AUI_entry_delete(WAP_DELETE_HISTORY); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_clear + + $Description: Deletes all entries in history list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_clear(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_clear"); +#endif + + if (!data) + { + return; + } + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtExit, TxtOkToDelete, TxtNull, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); + display_info.Identifier = WAP_CLEAR_HISTORY; + info_dialog(data->parent_win, &display_info); + return 1; +} + + +/******************************************************************************* + + $Function: AUI_history_addbook + + $Description: Adds a history item to the bookmarks list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_addbook(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT *EntryUC; + char *URL; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_addbook()"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Add string after NUMBER_PADDING in unicode */ + + EntryUC = (USHORT *)data->View->History->Entry[data->OptionSelect]; // Text of the history entry + URL = data->View->HistoryURL->Entry[data->OptionSelect]; // URL of the entry + + if (ATB_wap_entry_add(data->View->Bookmarks, (char *)&EntryUC[NUMBER_PADDING])==NULL) // Try to add history item to bookmarks + { + AUI_info_dialog(TxtBookmarks, TxtFull); /* SPR#2086 */ + } + else + { + ATB_wap_entry_add(data->View->BookmarksURL, URL); + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtStored, NULL); /* SPR#2086 */ + } + return 1; +} + + +/******************************************************************************* + + $Function: AUI_history_sendSMS + + $Description: Open up a history entry in an SMS write editor + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_history_sendSMS(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_sendSMS"); +#endif + + AUI_entry_sendSMS(); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profiles_list + + $Description: Lists names of all profiles in flash + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profiles_list(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_list"); +#endif + + if (!data) + { + return; + } + + /* SPR#2086 - Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + /* Create the profile list menu */ + + if (data->View->ProfilesList) + { + data->View->ProfilesList->type = WAP_PROFILES_LIST; // To differentiate from WAP_PROFILES_SETUP + AUI_entry_list(data->View->ProfilesList, (ListCbFunc) AUI_profiles_list_cb, data->View->ProfileId); // Create the profiles list + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profiles_list_cb + + $Description: Callback function for profiles list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of profiles list + +*******************************************************************************/ + +static void AUI_profiles_list_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE temp_storage; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_list_cb()"); +#endif + + if (!data) + { + return; + } // Used to store new profile id + + switch(EntryListData->Reason) + { + case LISTS_REASON_SEND: + case LISTS_REASON_SELECT: + /* SPR#1574 - SH - Minor change: "Changed" message appears + * before window is destroyed */ + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + /* The user has chosen a profile */ + temp_storage = EntryListData->ListPosition; // Store selected profile number for a bit... + AUI_destroy(LIST_WIN); /* SPR#2086 */ + /* Get new profile */ + ATB_wap_profile_read(data->View, temp_storage); // Read in new profile data + ATB_wap_profile_save(data->View); // Save the change to flash + break; + + case LISTS_REASON_BACK: // Exit menu (back, timeout etc). + AUI_destroy(LIST_WIN); /* SPR#2086 */ + break; + } + return; +} + +/******************************************************************************* + + $Function: AUI_profile_change_cb + + $Description: Callback function for profile change window + + $Returns: void + + $Arguments: Standard menu callback parameters + +*******************************************************************************/ + +static void AUI_profile_change_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_change_cb"); +#endif + + if (!data) + { + return; + } + + data->sub_options_win = NULL; + + return; +} + +/******************************************************************************* + + $Function: AUI_profile_change + + $Description: Bring up slightly different menus depending on whether profile is + GPRS or Dialup. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_change(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + /* Only allow modification of the GPRS settings if GPRS is switched on */ +#ifdef GPRS + if (data->View->Profile->AccessType==WAP_GPRS_DATA) + { + data->sub_options_win = bookMenuStart(data->parent_win, WAPGPRSProfileAttributes(), 0); + } + else +#endif + { + data->sub_options_win = bookMenuStart(data->parent_win, WAPDialupProfileAttributes(), 0); + } + + SEND_EVENT(data->sub_options_win, ADD_CALLBACK, NULL, (void *)AUI_profile_change_cb); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_delete + + $Description: Delete the highlighted profile + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_delete(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + /* Don't let user delete last profile */ + + if (data->View->ProfilesList->no_of_entries==1) + { + AUI_info_dialog(TxtNotAllowed, TxtNull); + } + else + { + /* Present option to delete profile */ + AUI_entry_delete(WAP_DELETE_PROFILE); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_new + + $Description: Add a new profile + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_new(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE newProfileId; + + /* Check if profiles are full */ + + if (data->View->ProfilesList->no_of_entries==data->View->ProfilesList->max_entries) + { + AUI_info_dialog(TxtProfiles, TxtFull); + } + else + { + /* Add the profile */ + newProfileId = data->View->ProfilesList->no_of_entries; + ATB_wap_profile_default(MAX_PROFILES-1); + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + // When adding a new profile, use the last record i.e the empty record. + ATB_wap_entry_add(data->View->ProfilesList, data->View->ProfilesList->Entry[MAX_PROFILES-1]); + ATB_wap_profile_save(data->View); + AUI_list_redraw(WAP_PROFILES_LIST, TxtStored); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_reset + + $Description: Reset profiles to default values + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_reset(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_reset"); +#endif + + if (!data) + { + return; + } + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtResetProfiles, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_profile_reset_cb, FIVE_SECS, KEY_LEFT | KEY_RIGHT | KEY_CLEAR | KEY_HUP ); + + info_dialog(data->parent_win, &display_info); + return; +} + + +/******************************************************************************* + + $Function: AUI_profile_reset_cb + + $Description: Callback from reset profiles dialog + + $Returns: None + + $Arguments: Standard info dialog callback arguments + +*******************************************************************************/ + +static void AUI_profile_reset_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_reset_cb"); +#endif + + if (!data) + { + return; + } + + switch(reason) + { + case INFO_KCD_LEFT: + AUI_destroy(LIST_WIN); + ATB_wap_profile_default_create(TRUE); + ATB_wap_profile_names_read(data->View); + ATB_wap_profile_read(data->View, data->View->ProfileId); + AUI_list_redraw(WAP_PROFILES_LIST, TxtReset); + break; + + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + break; + } + + return ; +} + +/******************************************************************************* + + $Function: AUI_profiles_setup + + $Description: Lists names of all profiles in flash, in order to change settings + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profiles_setup(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_setup"); +#endif + + if (!data) + { + return; + } + + /* SPR#2086 - Ensure that the default browser view is selected */ + + ATB_wap_change_view(WAP_OBJECT_ID); + + /* Store the current profile number - we're going to temporarily change profiles + * to edit the settings, then switch back.*/ + + data->OptionSelect = data->View->ProfileId; + + /* Create the profile list menu */ + + if (data->View->ProfilesList) + { + data->View->ProfilesList->type = WAP_PROFILES_SETUP; // To differentiate from WAP_PROFILES_LIST + AUI_entry_list(data->View->ProfilesList, (ListCbFunc) AUI_profiles_setup_cb, data->View->ProfileId); // Create the profiles list menu + } + + return MFW_EVENT_CONSUMED; +} +/******************************************************************************* + + $Function: AUI_profiles_options_cb + + $Description: Callback function for profiles options window + //xrashmic 23 Dec, 2004 MMI-SPR-27623 + $Returns: void + + $Arguments: win - WAP data window + identifier, reason - Not used + +*******************************************************************************/ + +static void AUI_profiles_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_options_cb"); +#endif + + if (!data) + { + return; + } + + data->options_win = NULL; + + /* If the edited profile is different from the selected profile, change back */ + + if (data->profile_store!=data->View->ProfileId) + { + ATB_wap_profile_read(data->View, data->profile_store); + /* Recreate list menu so it points to original profile */ + AUI_destroy( LIST_WIN); + AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,data->profile_store); + } + + return; +} + + + +/******************************************************************************* + + $Function: AUI_profiles_setup_cb + + $Description: Callback function for profiles list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of profiles list + +*******************************************************************************/ + +static void AUI_profiles_setup_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE original_profile; + UBYTE new_profile; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_setup_cb"); +#endif + + if (!data) + { + return; + } + + original_profile = data->View->ProfileId; + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + //The highlighted item position to be stored. + data->OptionSelect = EntryListData->ListPosition; /* The id of the selected profile */ + + switch(EntryListData->Reason) + { + case LISTS_REASON_SEND: + case LISTS_REASON_SELECT: + //xrashmic 23 Dec, 2004 MMI-SPR-27623 + //Storing the original profile before going to the options menu. + /* The user has chosen a profile. Store the original profile ID */ + data->profile_store = data->View->ProfileId; + + /* The user has chosen a profile */ + + new_profile = EntryListData->ListPosition; // Change profile number + ATB_wap_profile_read(data->View, new_profile); // Read in selected profile + /* SPR#1684 - SH - Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(OPTIONS_WIN); /* SPR#2086 */ + } + data->options_win = bookMenuStart(data->parent_win, WAPProfOptionsAttributes(), 0); // Create settings menu + //xrashmic 23 Dec, 2004 MMI-SPR-27623 + //Adding the new call back for the options menu. + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_profiles_options_cb); + break; + + case LISTS_REASON_BACK: // Exit menu + AUI_destroy(LIST_WIN); /* SPR#2086 */ + + if (data->View->ProfileId!=data->OptionSelect) // We've changed profile... + { + ATB_wap_profile_read(data->View, original_profile); // Read in original profile + } + + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_entry_list + + $Description: Create an entry list and store its pointer in list_win/list_data + + $Returns: pointer to list menu data + SPR#2086 - Remove window parameter + + $Arguments: EntryList - pointer to entry list table + Callback - the callback function + pos - the default highlighted option + +*******************************************************************************/ + +int AUI_entry_list (T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_list"); +#endif + + if (!data) + { + return 0; + } + + /* Destroy previous list, if it exists */ + + if (data->list_win) + { + AUI_destroy(LIST_WIN); /* SPR#2086 */ + } + + /* Create new list */ + + data->list_data = AUI_entry_list_create (data->parent_win, EntryList, Callback, pos); // Create the entry list + if (data->list_data) // If list has been created... + data->list_win = data->list_data->win; // Attach the resulting window to the data + else + { + data->list_win = NULL; // No window created + } + return 1; +} + + +/******************************************************************************* + + $Function: AUI_entry_list_create + + $Description: Create an entry list for Bookmarks/History/Profiles, or options menu + + $Returns: pointer to list menu data + + $Arguments: win - the WAP data window + EntryList - pointer to bookmarks table + Callback - the callback function for the entry list + pos - the default highlighted option + +*******************************************************************************/ + +static ListMenuData * AUI_entry_list_create (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos) +{ + ListMenuData *EntryListData; + USHORT entryIndex; + USHORT no_of_entries = EntryList->no_of_entries; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_list_create"); +#endif + + if (no_of_entries==0) // Is the list empty? + { + AUI_info_dialog(TxtEmpty, NULL); /* SPR#2086 */ + return NULL; + } + + EntryListData = (ListMenuData *)AUI_wap_memory_alloc (sizeof(ListMenuData)); // Allocate memory for list data + + if (EntryListData==NULL) + return NULL; + + EntryListData->List = (T_MFW_MNU_ITEM *) AUI_wap_memory_alloc (no_of_entries*sizeof (T_MFW_MNU_ITEM)); + + if (EntryListData->List==NULL) + return NULL; + + /* Fill Menu List */ + + for (entryIndex=0; entryIndex < no_of_entries; entryIndex++) + { + mnuInitDataItem(&EntryListData->List[entryIndex]); + + if (EntryList->Entry[entryIndex]!=NULL) + EntryListData->List[entryIndex].str = (char *)EntryList->Entry[entryIndex]; // Copy Entry into list + else + EntryListData->List[entryIndex].str = GET_TEXT(TxtEmpty); // ...otherwise "Empty" + + EntryListData->List[entryIndex].flagFunc = item_flag_none; + } + + /* Fill common parameters for list handling */ + + EntryListData->ListLength = no_of_entries; + EntryListData->CursorPosition = 1; // Starting position + EntryListData->ListPosition = pos+1; + if (pos>3) + EntryListData->CursorPosition = pos-3; // Make sure highlighted is on screen + EntryListData->SnapshotSize = 5; // 5 entries on the screen at once + EntryListData->Font = 0; + + if (EntryList->type==WAP_PROFILES_LIST || EntryList->type==WAP_OPTIONS_LIST) // For these lists, left soft key is Select + EntryListData->LeftSoftKey = TxtSoftSelect; + else + EntryListData->LeftSoftKey = TxtSoftOptions; + + EntryListData->RightSoftKey = TxtSoftBack; + EntryListData->KeyEvents = KEY_ALL; /* SPR#1921 - SH - Prevents keypresses falling through to window behind */ + EntryListData->Reason = 0; + EntryListData->Strings = TRUE; // Use strings not text ID's + EntryListData->Attr = &list_menuAttrib; + EntryListData->autoDestroy = FALSE; // Don't destroy on exit + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("Display list"); +#endif + /* SPR#1816 - SH - Use entry list unicode flag to specify whether + * the list is unicode or not */ + + listDisplayListMenu(win, EntryListData, (ListCbFunc)Callback,(UBYTE)EntryList->unicode); // Display the list + + return EntryListData; +} + + +/******************************************************************************* + + $Function: AUI_entry_goto + + $Description: Open up the selected bookmark/history entry in the WAP browser + + $Returns: + + $Arguments: identifier - specifies whether history or bookmarks list + +*******************************************************************************/ + +int AUI_entry_goto(WAP_LIST_TYPE identifier) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_goto"); +#endif + + if (!data) + { + return 0; + } + + switch(identifier) + { + case WAP_BOOKMARKS_LIST: + case WAP_HISTORY_LIST: + AUI_wap_connect_URL(data->URLSelect); /* SPR#2086 - modified */ + break; + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_entry_delete + + $Description: Delete the selected entry from the history/bookmarks list + + $Returns: + + $Arguments: identifier - specifies history list or bookmarks list + +*******************************************************************************/ + +int AUI_entry_delete(UBYTE identifier) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_delete"); +#endif + + if (!data) + { + return 0; + } + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); + display_info.Identifier = identifier; // Type of list + + info_dialog(data->parent_win, &display_info); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_entry_delete_cb + + $Description: Callback function for delete confirmation + + $Returns: + + $Arguments: win - WAP data window + identifier - Type of list + reason - reason for callback + +*******************************************************************************/ + +void AUI_entry_delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_delete_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch(identifier) + { + case WAP_DELETE_BOOKMARK: + switch (reason) + { + case INFO_KCD_LEFT: + AUI_destroy(LIST_WIN); /* SPR#2086 */ + ATB_wap_entry_remove(View->Bookmarks, data->OptionSelect); // Delete the selected bookmark name + ATB_wap_entry_remove(View->BookmarksURL, data->OptionSelect); // Delete the selected bookmark URL + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + + case WAP_DELETE_HISTORY: + switch (reason) + { + case INFO_KCD_LEFT: + AUI_destroy(LIST_WIN); /* SPR#2086 */ + ATB_wap_entry_remove(View->History, data->OptionSelect); // Delete the selected history entry name + ATB_wap_entry_remove(View->HistoryURL, data->OptionSelect); // Delete the selected history entry URL + ATB_wap_renumber_history(View->History); // Renumber history list + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_HISTORY_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + //xrashmic 16 Dec, 2004 MMI-SPR-27622 + // To handle the delete profile event. + case WAP_DELETE_PROFILE: + switch (reason) + { + case INFO_KCD_LEFT: + AUI_destroy(LIST_WIN); /* Destroy the old list */ + ATB_wap_profile_delete(data->View, data->OptionSelect); /* Shifts profile data up */ + /* Read in the new profile */ + ATB_wap_profile_read(data->View, data->OptionSelect); + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_PROFILES_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + case WAP_CLEAR_HISTORY: + switch (reason) + { + case INFO_KCD_LEFT: + ATB_wap_entry_remove_all(View->History); // Delete all history name entries + ATB_wap_entry_remove_all(View->HistoryURL); // Delete all history URL entries + ATB_wap_profile_save(View); // Save change to flash + AUI_entry_list(View->History, (ListCbFunc)AUI_history_list_cb,0); /* SPR#2086 */ + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_entry_sendSMS + + $Description: Open up an SMS editing screen with the selected URL + + $Returns: + + $Arguments: none + +*******************************************************************************/ + +int AUI_entry_sendSMS(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_SmsUserData UserData; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_sendSMS"); +#endif + + if (!data) + { + return 0; + } + + strcpy((char *)UserData.TextBuffer, data->URLSelect); // Copy name into SMS editing buffer + UserData.NumberBuffer[0] = 0; // No number... + UserData.CentreBuffer[0] = 0; // or service centre supplied. + + data->edit_win = SmsSend_SEND_start(data->parent_win, &UserData); // Start editing SMS + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_name_edit + + $Description: Opens up a text edit screen for editing the name of a profile + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ +#if 0 +int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_name_edit"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#1816 - SH - Clear editor for name (unicode) */ + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, CARD_TITLE_MAX_LEN); // Copy name into editing buffer + + /* Set up editor. SPR#1816 - SH - Extend max size for unicode string */ + + AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+1)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb); + + editor_data.TextId = TxtProfileName; // "Profile Name:" + editor_data.min_enter = 1; // Avoid returning empty strings + + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return 1; +} +#endif + +extern char* ATB_mms_get_Title(void); +int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_name_edit"); +#endif + + if (!data) + { + return 0; + } + + +#ifdef NEW_EDITOR + //CRR 25541: 06 Oct 2004 - xpradipg + //commented the addition which is not required in the NEW_EDITOR case + //and send the address of the buffer instead of &buffer[2] + /* Store name in editor buffer */ + //data->Buffer[0] = 0x80; + //data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)data->Buffer, data->View->Profile->Title, PROFILENAME_MAX_LEN); // Copy name into editing buffer + + /* Set up editor. */ + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtProfileName, (T_AUI_EDIT_CB)AUI_profile_name_edit_cb); + + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, PROFILENAME_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); + +#else /* NEW_EDITOR */ + /* Clear editor for name */ + + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, PROFILENAME_MAX_LEN); + + /* Set up editor. */ + + AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+2)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb); + + editor_data.TextId = TxtProfileName; + editor_data.min_enter = 1; /* Avoid returning empty strings */ + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + +/******************************************************************************* + + $Function: AUI_profile_name_edit_cb + + $Description: Callback function for editing a profile's title + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_profile_name_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_profile_name_edit_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_LEFT: + /* SPR#1921 - SH - Destroy old list */ + AUI_destroy(LIST_WIN); + /* Change profile name. SPR#1816 - SH */ + //CRR 25541: 06 oct 2004 - xpradipg + //Send the complete buffer to update the list for the changed entry + ATB_wap_entry_change(WAP_PROFILES_LIST, View->ProfilesList, data->Buffer , View->ProfileId); + /* Save change to flash */ + ATB_wap_profile_save(View); + /* List profiles again */ + AUI_list_redraw(WAP_PROFILES_SETUP, TxtChanged); + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_dialupNumber + + $Description: Opens up a numeric edit screen for editing the dialup number + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_dialupNumber(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_dialup_number"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->DialupNumber); // Copy dialup number into buffer + AUI_number_edit(WAP_DIALUP_NUMBER, TxtDialupNumber); // Open editor + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_IPAddress1 + + $Description: Opens up a numeric edit screen for editing the primary IP address + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ +#if 0 +int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress1"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->IPAddress1); // Copy IP address into edit buffer + + /* Set up editor */ + + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS1; + editor_data.TextId = TxtIPAddress1; + editor_data.min_enter = 1; // Avoid returning empty strings + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return 1; +} +#endif + +int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress1"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->IPAddress1, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_IP_ADDRESS1, ED_MODE_FORMATTED, TxtIPAddress, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS1; + editor_data.TextId = TxtIPAddress; /* "IP Address" rather than "IP Address 1" (less confusing)*/ + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +#if 0 +/******************************************************************************* + + $Function: AUI_IPAddress2 + + $Description: Opens up a numeric edit screen for editing the secondary IP address + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress2"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->IPAddress2); // Copy IP address into edit buffer + + /* Set up editor */ + + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS2; + editor_data.TextId = TxtIPAddress2; + editor_data.min_enter = 1; // Avoid returning empty strings + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return 1; +} +#endif + +int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress2"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->IPAddress2, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_IP_ADDRESS2, ED_MODE_FORMATTED, TxtIPAddress2, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS2; + editor_data.TextId = TxtIPAddress2; + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + +/******************************************************************************* + + $Function: AUI_Port1 + + $Description: Opens up a numeric edit screen for editing the primary port + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_Port1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_Port1"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->Port1); // Copy response timer into buffer + AUI_number_edit(WAP_PORT1, TxtPort1); // Open editor + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_Port2 + + $Description: Opens up a numeric edit screen for editing the secondary port + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_Port2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_Port2"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->Port2); // Copy response timer into buffer + AUI_number_edit(WAP_PORT2, TxtPort2); // Open editor + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_APN + + $Description: Opens up a numeric edit screen for editing the APN + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_APN(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_APN"); +#endif + + AUI_edit(NULL,WAP_EDIT_APN, TxtAPN, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_username + + $Description: Opens up a text edit screen for editing the ISP username + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ +#if 0 +int AUI_username(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_username"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->Username); // Copy name into editing buffer + + /* Set up editor */ + + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb); + + editor_data.TextId = TxtISPUsername; // "Username" + editor_data.hide = FALSE; + + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return 1; +} +#endif + +int AUI_username(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_username"); +#endif + + if (!data) + { + return 0; + } + + /* Copy name into editing buffer */ + + strncpy(data->Buffer, data->View->Profile->Username, USERNAME_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_username_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb); + + editor_data.TextId = TxtISPUsername; + editor_data.hide = FALSE; + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + +/******************************************************************************* + + $Function: AUI_username_cb + + $Description: Callback function for editing the ISP username + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_username_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_username_cb"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_LEFT: + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + strcpy(data->View->Profile->Username, data->Buffer); // Change username + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + break; + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_password + + $Description: Opens up a text edit screen for editing the ISP password + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ +#if 0 +int AUI_password(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->Password); // Copy password into editing buffer + + /* Set up editor */ + + AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb); + + editor_data.TextId = TxtISPPassword; // "Password" + editor_data.hide = TRUE; // Password is hidden (*****) + + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return 1; +} +#endif +int AUI_password(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password"); +#endif + + if (!data) + { + return 0; + } + + /* Copy password into editing buffer */ + + strncpy(data->Buffer, data->View->Profile->Password, PASSWORD_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtISPPassword, (T_AUI_EDIT_CB)AUI_password_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, PASSWORD_MAX_LEN+1); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb); + + editor_data.TextId = TxtISPPassword; + editor_data.hide = TRUE; /* Password is hidden (*****) */ + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_password_cb + + $Description: Callback function for editing the ISP password + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_password_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_password_cb"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_LEFT: + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + strcpy(data->View->Profile->Password, data->Buffer); // Change password + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + break; + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_response_timer + + $Description: Opens up a numeric edit screen for editing the server number + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_response_timer(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_response_timer"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->ResponseTimer); // Copy response timer into buffer + AUI_number_edit(WAP_RESPONSE_TIMER, TxtResponseTimer); // Open editor + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_number_edit + + $Description: Opens up a numeric edit screen. + The digits to be edited should be in data->Buffer. + SPR#2086 - Removed window parameter, made static void + + $Returns: none. + + $Arguments: identifier - specifies which edit screen it is (server no. etc) + prompt - prompt, e.g "IP Address" + +*******************************************************************************/ +#if 0 +static void AUI_number_edit(int identifier, USHORT prompt) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_number_edit()"); +#endif + + if (!data) + { + return; + } + + /* Set up editor */ + + AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb); + + editor_data.Identifier = identifier; // this is the purpose + editor_data.TextId = prompt; + editor_data.min_enter = 1; // Avoid returning empty strings + + data->edit_win = editor_start(data->parent_win, &editor_data); // Create input window + + return; +} +#endif + +//int AUI_number_edit(T_MFW_HND parent_win, int identifier, USHORT prompt) +static void AUI_number_edit(int identifier, USHORT prompt) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + + if (!data) + { + return; + } + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, 0, prompt, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, NUMBER_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb); + + editor_data.Identifier = identifier; + editor_data.TextId = prompt; + editor_data.min_enter = 1; + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return; +} + +/* Marcus: Issue 1686: 07/03/2003: Start */ +/******************************************************************************* + + $Function: validate_IP_address + + $Description: Check the validity of an IP address in the form 255.255.255.255 + + $Returns: BOOL, TRUE if valid, else FALSE + + $Arguments: buffer - the ASCIIZ string containing the IP address to validate + +*******************************************************************************/ + +static BOOL validate_IP_address(char *buffer) +{ + char temp[16]; + char *token; + int value; + + if (strlen(buffer) > sizeof(temp)-1) + return FALSE; + + strcpy(temp, buffer); + for (token = strtok(temp, "."); + token != NULL; + token = strtok(NULL, ".")) + { + value = atoi(token); + + /* SPR#1976 - SH - Check for null length IP address too */ + if (strlen(token)==0 || (value < 0) || (value > 255)) + return FALSE; + } + + return TRUE; +} +/* Marcus: Issue 1686: 07/03/2003: End */ + +/******************************************************************************* + + $Function: AUI_number_edit_cb + + $Description: Callback function for editing a number + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (server or service no.) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_number_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_PROFILE *Profile; + BOOL valid; + int value; + + /* SPR#1976 - SH - Added some more checks to ensure values returned are valid */ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_number_edit_cb"); +#endif + + if (!data || !data->View) + { + return; + } + + Profile = data->View->Profile; + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_LEFT: + { + switch(identifier) + { + case WAP_DIALUP_NUMBER: + strcpy(Profile->DialupNumber, data->Buffer); // Copy the dialup number to the Profile + valid = TRUE; + break; + + case WAP_IP_ADDRESS1: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + strcpy(Profile->IPAddress1, data->Buffer); // Copy the IP address to the Profile + } + else + { + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + case WAP_IP_ADDRESS2: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + strcpy(Profile->IPAddress2, data->Buffer); // Copy the IP address to the Profile + } + else + { + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + //xpradipg - Aug 4,2004: changes for wap 2.0 menus + case WAP_NAME_SERVER1: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + strcpy(Profile->NameServer1, data->Buffer); // Copy the IP address to the Profile + } + else + { + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + case WAP_NAME_SERVER2: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + strcpy(Profile->NameServer2, data->Buffer); // Copy the IP address to the Profile + } + else + { + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + + case WAP_PORT1: + value = atoi(data->Buffer); + if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF) + { + valid = TRUE; + Profile->Port1 = value; + } + else + { + valid = FALSE; + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + case WAP_PORT2: + value = atoi(data->Buffer); + if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF) + { + valid = TRUE; + Profile->Port2 = value; + } + else + { + valid = FALSE; + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + + case WAP_RESPONSE_TIMER: + value = atoi(data->Buffer); + if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF) + { + valid = TRUE; + Profile->ResponseTimer = value; + } + else + { + valid = FALSE; + AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */ + } + break; + } + + if (valid) + { + AUI_destroy( EDIT_WIN); /* SPR#2086 */ + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + } + } + + break; + + default: + break; + } + + return; + +} + + +/******************************************************************************* + + $Function: MMI_AUI_homepage_edit + + $Description: Opens up a text edit screen for changing the homepage URL + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_homepage_edit(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_homepage_edit"); +#endif + + AUI_edit(NULL,WAP_EDIT_HOMEPAGE, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +//xpradipg - Aug 4,2004: changes for wap 2.0 menus +int AUI_NameServer1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_NameServer1"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->NameServer1, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_NAME_SERVER1, ED_MODE_FORMATTED, TxtNameServer1, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_NAME_SERVER1; + editor_data.TextId = TxtNameServer1; + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + + +int AUI_NameServer2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_NameServer2"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->NameServer2, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_NAME_SERVER2, ED_MODE_FORMATTED, TxtNameServer2, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_NAME_SERVER2; + editor_data.TextId = TxtNameServer2; + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +int AUI_PPGAuthentication(MfwMnu * menu, MfwMnuItem * item) +{ + + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_PPGAuthentication"); +#endif + + if (!data) + { + return 0; + } + + +/* SPR#2218 - SH - Don't use options_win */ + + setting_win = bookMenuStart(data->parent_win, WAPPPGAuthenticationAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->PPGAuthentication); + + return 1; + +} + +int AUI_PPGAuthentication_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_PPGAuthentication_set"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->PPGAuthentication= menu->lCursor[menu->level]; // Change connection type + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + return 1; +} + +int AUI_WirelessProfiledHTTP(MfwMnu * menu, MfwMnuItem * item) +{ + + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_PPGAuthentication"); +#endif + + if (!data) + { + return 0; + } + + +/* SPR#2218 - SH - Don't use options_win */ + + setting_win = bookMenuStart(data->parent_win, WAPWirelessProfiledHTTPAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->WirelessProfiledHTTP); + + return 1; + +} + + +int AUI_WirelessProfiledHTTP_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_WirelessProfiledHTTP_set"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->WirelessProfiledHTTP= menu->lCursor[menu->level]; // Change connection type + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + return 1; +} + +BOOL HTTP_Selected() +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT PortNumber,PortNumber1; + + PortNumber = data->View->Profile->Port1; + PortNumber1=data->View->Profile->Port2; + + TRACE_EVENT_P2("The values of Port1 and Port2 are %d and %d",PortNumber,PortNumber1); + + if(data->View->Profile->Port1 ==9201) + return FALSE; + return TRUE; +} + + +/******************************************************************************* + + $Function: AUI_connectionType + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionType(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionType"); +#endif + + if (!data) + { + return; + } + + /* SPR#2218 - SH - Don't use options_win */ + + setting_win = bookMenuStart(data->parent_win, WAPConnectionTypeAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionType); + + return; +} + + +/******************************************************************************* + + $Function: AUI_connectionType_set + + $Description: Set WAP connection to temporary or permanent + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionType_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionType_set"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->ConnectionType = menu->lCursor[menu->level]; // Change connection type + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + return 1; +} + + +/******************************************************************************* + + $Function: AUI_connectionSpeed + + $Description: SPR#1827 - SH - Added this function + Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionSpeed(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionSpeed"); +#endif + + if (!data) + { + return; + } + + /* SPR#2218 - SH - Don't use options_win */ + + setting_win = bookMenuStart(data->parent_win, WAPConnectionSpeedAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionSpeed); + + return; +} + + +/******************************************************************************* + + $Function: AUI_connectionSpeed_set + + $Description: SPR#1827 - SH - Added this function + Set WAP connection speed to analogue, digital + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionSpeed_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionSpeed_set"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->ConnectionSpeed = menu->lCursor[menu->level]; // Change connection type + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + return 1; +} + + +/******************************************************************************* + + $Function: AUI_security + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_security(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_security_on"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#2218 - SH - Don't use options win */ + + setting_win = bookMenuStart(data->parent_win, WAPSecurityOptionAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->Security); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_security_set + + $Description: Switch security on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_security_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_security_off"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->Security = (BOOL)menu->lCursor[menu->level]; + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_access + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_access(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_access"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#2218 - SH - Don't use options win */ + + //setting_win = bookMenuStart(data->parent_win, WAPAccessTypeAttributes(), 0); /* SPR#2086 */ + + setting_win = bookMenuStart(data->parent_win, WAPGPRSDialupAttributes(), 0); /* SPR#2086 */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->AccessType); + + return 1; +} + + + + +int AUI_profile_select(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + //xrashmic 23 Dec, 2004 MMI-SPR-27623 + // Store the current profile + data->profile_store = data->View->ProfileId; + + ATB_wap_profile_save(data->View); + + //AUI_info_dialog(data->win, TxtChanged, TxtNull); + AUI_info_dialog(TxtChanged, NULL);//2086 + + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: AUI_access_set + + $Description: Set access type + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_access_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_access_CSD"); +#endif + + if (!data) + { + return 0; + } + + data->View->Profile->AccessType = menu->lCursor[menu->level]; // Change access type + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_savehist + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_savehist(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE SaveHistory; + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_savehist"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#2218 - SH - Don't use options win */ + + setting_win = bookMenuStart(data->parent_win, WAPSaveHistoryAttributes(), 0); /* SPR#2086 */ + SaveHistory = ATB_wap_profile_setting(WAP_STATUS_SAVEHISTORY); /* 1 or 0 depending on flag */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &SaveHistory); + + return 1; +} + +/******************************************************************************* + + $Function: AUI_savehist_set + + $Description: Set save history on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_savehist_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_savehist_set"); +#endif + + if (!data) + { + return; + } + + ATB_wap_profile_setting_change(WAP_STATUS_SAVEHISTORY, menu->lCursor[menu->level]); /* SPR#2086 */ + + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_scaleimages + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_scaleimages(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE ScaleImages; + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_scaleimages"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#2218 - SH - Don't use options win */ + + setting_win = bookMenuStart(data->parent_win, WAPScaleImagesAttributes(), 0); /* SPR#2086 */ + ScaleImages = ATB_wap_profile_setting(WAP_STATUS_SCALEIMAGES); /* 1 or 0 depending on flag */ + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &ScaleImages); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_scaleimages_set + + $Description: Set image scaling on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_scaleimages_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_scaleimages_set"); +#endif + + if (!data) + { + return 0; + } + + ATB_wap_profile_setting_change(WAP_STATUS_SCALEIMAGES, menu->lCursor[menu->level]); /* SPR#2086 */ + + ATB_wap_profile_save(data->View); // Save change to flash + AUI_info_dialog(TxtChanged, NULL); /* SPR#2086 */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_info_dialog + + $Description: Display message for three seconds + SPR#2086 - Removed window parameter + + $Returns: None + + $Arguments: TextId1 - Id of text string to display + TextId2 - Id of text string to display + +*******************************************************************************/ + +void AUI_info_dialog(USHORT TxtId1, USHORT TxtId2) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_info_dialog"); +#endif + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId1, TxtId2, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, 0 ); + display_info.Identifier = 0; + + info_dialog(data->parent_win, &display_info); + return; +} + + +/******************************************************************************* + + $Function: AUI_error_dialog + + $Description: Display error message for three seconds + SPR#1574 - SH - Add "GPRS not supported" message + + $Returns: + + $Arguments: View - The current view + errorCode - Number of the error + +*******************************************************************************/ +//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42 +//The status information is handled by MMS module separatly. +// and wap module separatly +void AUI_error_dialog(T_WAP_VIEW *View, SHORT errorCode) +{ + // xreddymn Mar-05-2005 MMI-SPR-26144: disable dialog display when sending MMS + if(!MMSactive) + { + AUI_wap_error_dialog(View, errorCode); + } +} + +void AUI_wap_error_dialog(T_WAP_VIEW *View, SHORT errorCode) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + static char errorNumber[20]; + char *err; + USHORT errId1, errId2; + USHORT lsk, rsk; + SHORT newCode; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_error_dialog"); + TRACE_EVENT_P1("WAP Error: %d", errorCode); // Convert the error code to text +#endif + + /* SPR#2086 - SH - Ensure WAP data exists */ + + data = AUI_wap_data(); + + if (!data) + { + return; + } + /* SPR#1793 - SH - Intercept fatal error */ + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + // When the downloaded data exceeds the limit or the MIME type is not supported, + // the download is cancelled and the error is displayed here. + if((obj_Type == EMtUnknown && downloaded_data_size!=0 ) //download has started but the MIME type is not supported + ||(downloaded_data_size>MAX_DOWNLOAD)) //download of a supported MIMI type was in progress, but it exceeded the limit + { + if (data->error_win) + { + SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0); + data->error_win = NULL; + } + if (data->connect_win) + { + SEND_EVENT(data->connect_win, DIALOG_DESTROY, 0, 0); + data->connect_win = NULL; + } + if (data->temp_win) + { + SEND_EVENT(data->temp_win, DIALOG_DESTROY, 0, 0); + data->temp_win = NULL; + } + if(obj_Type == EMtUnknown) + //xrashmic 08 Feb, 2005 MMI-SPR-27853 + //Added few more parameters for this function + information_dialog(TxtNotSupported, TxtType, NULL,NULL,TxtNull, TxtSoftBack, FOREVER,KEY_RIGHT,NULL); + else + //xrashmic 08 Feb, 2005 MMI-SPR-27853 + //Added few more parameters for this function + information_dialog(TxtObject, TxtLarge, NULL,NULL, TxtNull, TxtSoftBack, FOREVER,KEY_RIGHT,NULL); + + downloaded_data_size = 0; + obj_Type = EMtUnknown; + + return; + } + //if (errorCode==8002) + //OUT OF MEMORY code 0x903 + if (errorCode==2307) + { + TRACE_EVENT("WAP MEMORY FULL"); + + /* If we're in WAP, error is fatal */ + + if (data->View) + { + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftOK, TxtFatalError, TxtErrorOutOfMem, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_RIGHT); + info_dialog(data->parent_win, &display_info); + AUI_destroy(ALL_WAP); /* SPR#2086 - ALL_WAP for emergency shutdown*/ + } + + return; + } + + /* SPR#1824 - SH - New error message handling */ + + errId1 = TxtNull; + errId2 = TxtNull; + newCode = errorCode; + +/* if ((errorCode>=69 && errorCode<=101) + || (errorCode>=64 && errorCode<=67) + || errorCode==1013) +*/ + if ((errorCode>=1320 && errorCode<=1323) + || (errorCode>=1325 && errorCode<=1345) + || errorCode==2305 || errorCode==512 + || errorCode==517 || errorCode==518) + { + newCode = ERROR_COMMUNICATION_SERVER; + } + +/* else if ((errorCode>=0 && errorCode<=9) + || (errorCode>=224 && errorCode<=227) + || (errorCode>=229 && errorCode<=234) + || (errorCode>=5300 && errorCode<=5399) + || errorCode==1010 || errorCode==1018) +*/ + else if ((errorCode>=768 && errorCode<=780) + || errorCode==524) + { + newCode = ERROR_COMMUNICATION_GATEWAY; + } + +/* else if ((errorCode>=1301 && errorCode<=3014) + || (errorCode>=4002 && errorCode<=5099) + || (errorCode>=5200 && errorCode<=5299) + || (errorCode>=5400 && errorCode<=5499) + || (errorCode>=6001 && errorCode<=8001) + || errorCode==1003 || errorCode==1004 + || errorCode==1012 || errorCode==1015 + || errorCode==1016 || errorCode==1019 + || errorCode==1104) +*/ + else if ((errorCode>=258 && errorCode<=262) + || (errorCode>=519 && errorCode<=523) + || (errorCode>=1543 && errorCode<=1546) + || (errorCode>=2309 && errorCode<=2313) + || (errorCode>=1024 && errorCode<=1033) + || errorCode==516 || errorCode==1538 + || errorCode==1540 || errorCode==2308 + || errorCode==2565 || errorCode==2566 + || errorCode==256 || errorCode==1536 + || errorCode==1792 || errorCode==2048 + || errorCode==2304) + { + newCode = ERROR_UNEXPECTED; + } + + else if (errorCode>=2560 && errorCode<=2567) + { + newCode = ERROR_SECURITY; + } + + switch(newCode) + { + case ERROR_GPRS_NOT_SUPPORTED: + errId1 = TxtGPRS; + errId2 = TxtNotSupported; + break; + + /* SPR#1656 - SH - New error when call is disconnected */ + case ERROR_CALL_DISCONNECTED: + errId1 = TxtConnection; + errId2 = TxtFailed; + break; + +// case 8001: + case 2306: + errId1 = TxtErrorMemLow; break; + + /* Error type 1 */ +// case 68: + case 1324: + errId2 = TxtPageNotFound; break; + /* Error type 2 */ +// case 1008: + case 257: + errId2 = TxtInvalidURL; break; + /* Error type 3 */ +// case 1009: + case 513: + errId2 = TxtNoResponse; break; + /* Error type 4 */ +// case 1011: case 1017: case 1207: + case 2049: case 2050: + errId2 = TxtAccessDenied; break; + /* Error type 5 */ +/* case 1005: case 1006: case 1007: + case 1020: case 1101: case 1102: + case 1105: case 1108: +*/ + case 1798: + case 1539: case 1542: + errId2 = TxtErrorInPage; break; + /* Error type 6 */ +/* case 1202: case 1203: case 1204: + case 1205: case 1206: case 1208: + case 1209: case 1210: case 1211: + case 1212: case 1213: +*/ + case 1793: case 1794: case 1795: + case 1796: case 1797: case 1799: + case 1800: + errId2 = TxtScriptError; break; + /* Error type 7 */ + case ERROR_COMMUNICATION_SERVER: + errId2 = TxtServerError; break; + /* Error type 8 */ + case ERROR_COMMUNICATION_GATEWAY: + errId2 = TxtGatewayError; break; + /* Error type 9 */ + case ERROR_UNEXPECTED: + errId2 = TxtUnexpectedErr; break; + /* Error type 10 */ +// case 1103: + case 1537: + errId2 = TxtCharacterSet; break; + /* Error type 11 */ +// case 1106: + case 1541: + errId2 = TxtWBXMLError; break; + /* Error type 13 */ +// case 8002: + case 2307: + /* This error already intercepted above */ + case 1001: + errId2 = TxtErrorOutOfMem; break; + /* Error type 14 */ +/* case 228: + errId2 = TxtGatewayBusy; break; + /* Error type 15 */ +// case 1014: + case 514: + errId2 = TxtNoResponse; break; + /* Error type 16 */ + case ERROR_SECURITY: + errId2 = TxtSecurityFail; break; + +// case 4001: + case 515: + errId2 = TxtNoResponse; + break; + + default: + if (errorCode<1320) + errId2 = TxtErrorHTTP; + break; + } + + /* SPR#1575 - SH - Decide on soft keys. If browser is not present, + * can only exit. */ + + if (data->browser_win) + { + /* SPR#2086 - SH - Now provide "Exit" option */ + rsk = TxtExit; + lsk = TxtSoftOK; + } + else + { + lsk = TxtNull; + rsk = TxtExit; + } + + /* Set up dialog display data */ + + dlg_initDisplayData_TextId( &display_info, lsk, rsk, errId1, errId2, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_LEFT | KEY_RIGHT); + + /* If no errId1, use "Error <num>" */ + + if (errId1==TxtNull) + { + sprintf(errorNumber, "%s %d", GET_TEXT(TxtError), errorCode); + display_info.TextString = errorNumber; + } + + if (errId2==TxtNull) + { + errId2 = TxtUnknown; + } + + display_info.Callback = (T_VOID_FUNC)AUI_error_cb; + + /* SPR#1739 - SH - Destroy any previous error dialog */ + if (data->error_win) + { + SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0); + } + data->error_win = info_dialog(data->parent_win, &display_info); + + return; +} + + +/******************************************************************************* + + $Function: AUI_error_cb + + $Description: Callback function for the WAP error dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_error_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_error_cb"); +#endif + + if (!data) + { + return; + } + + data->error_win = NULL; /* SPR#1739 - SH - Coming here, dialog is destroyed */ + data->update_forbid = FALSE; + + /* Destroy any connecting dialog */ + /* SPR#1739 - SH - Do this now with AUI_destroy */ + + AUI_destroy(CONNECT_WIN); /* SPR#2086 */ + + /* SPR#1497 - SH - Softkeys now give two options */ + switch(reason) + { + /* Right soft key: Exit + * SPR#2086 - Exit browser */ + case INFO_KCD_RIGHT: + AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */ + break; + + /* Left soft key: OK */ + case INFO_KCD_LEFT: + /* Now just destroy dialog */ + break; + } + + return; +} + +#if 0 +/******************************************************************************* + + $Function: AUI_standard_editor + + $Description: Sets up standard attributes for a WAP editor + + $Returns: + + $Arguments: editor_data - pointer to existing editor_data + size - maximum length of editor + mode - editor mode + callback - callback function + +*******************************************************************************/ + +void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_standard_editor"); +#endif + editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR ); + editor_data->editor_attr.font = 0; // Font + + editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER); + editor_data->destroyEditor = FALSE; // Default: don't destroy editor on exit + editor_data->hide = FALSE; // Default: input not hidden + editor_data->Identifier = NULL; // Default: not used + + return; +} +#endif + +#ifdef NEW_EDITOR + +/******************************************************************************* + + $Function: AUI_standard_editor + + $Description: Sets up standard attributes for a WAP editor + + $Returns: None + + $Arguments: editor_data - pointer to existing editor_data + buffer - Text buffer to edit + size - maximum length of editor + mode - editor mode + callback - callback function + unicode - TRUE if editor is unicode + +*******************************************************************************/ + + void AUI_standard_editor(T_AUI_EDITOR_DATA *editor_data, USHORT identifier, USHORT mode, USHORT titleId, T_AUI_EDIT_CB Callback) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_standard_editor"); +#endif + + AUI_edit_SetDefault(editor_data); + AUI_edit_SetEvents(editor_data, identifier, FALSE, FOREVER, Callback); + AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, titleId, NULL); + // xreddymn Jan-11-2005 MMI-SPR-27618: For read-only modes don't display the cursor + if(mode & ED_MODE_READONLY) + { + AUI_edit_SetMode(editor_data, mode, ED_CURSOR_NONE); + } + else + { + AUI_edit_SetMode(editor_data, mode, DS_CURSOR_BAR); + } + AUI_edit_SetDisplay(editor_data, ZONE_WAP_EDITOR, COLOUR_EDITOR, EDITOR_FONT); + + return; +} + +#else /* NEW_EDITOR */ + +/******************************************************************************* + + $Function: AUI_standard_editor + + $Description: Sets up standard attributes for a WAP editor + + $Returns: None + + $Arguments: editor_data - pointer to existing editor_data + buffer - Text buffer to edit + size - maximum length of editor + mode - editor mode + callback - callback function + +*******************************************************************************/ + + void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_standard_editor"); +#endif + editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR ); + editor_data->editor_attr.font = 0; + + editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER); + editor_data->destroyEditor = FALSE; /* Default: don't destroy editor on exit */ + editor_data->hide = FALSE; /* Default: input not hidden */ + editor_data->Identifier = 0; + + return; +} + +#endif /* NEW_EDITOR */ + + +/******************************************************************************* + + $Function: AUI_wap_input_dialog_open + + $Description: Prompts the MMI to open an input dialog given a particular format and + string. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + View - The current view + +*******************************************************************************/ +#if 0 +T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); /* WAP data */ + USHORT formatIndex; + USHORT bufferIndex; + USHORT bufferLength; /* Length of original buffer */ + T_EDITOR_DATA editor_data; + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_input_dialog_open"); +#endif + + /* SPR#1816 - SH - Number of modifications for unicode. + * Title is converted to Unicode, although input string is still taken as ASCII. + * Buffer2 is used to store format characters, rather than use extra Format buffer + * If no title is supplied, use string "Untitled" */ + + if (!data) + { + return 0; + } + + data->gen_pointer = Dialog->dialog_pointer; // Needed by GLE + + if (Dialog->size > INPUT_MAX_LEN) // No more than max chars accepted + Dialog->size = INPUT_MAX_LEN; + + /* Convert input string to ASCII */ + ATB_uc_text_convert(Dialog->Input, Dialog->input_length); + bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN); + + /* Convert title to MMI unicode and crop it to fit screen */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + if (Dialog->title_length>0) + { + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN); // Convert title to char, store in output buffer + ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH); // Crop message to fit + } + else + { + data->Message.text[0] = 0x7F80; + AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED); + } + + /* Convert format characters to ascii */ + + ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length); + ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length); // Convert format string to char, store in format buffer + + /* Set up standard editor parameters */ + + AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb); + + /* Need to set input mode & put fixed characters into input buffer */ + + if (Dialog->format_length != 0) // If we're using formatted input + { + editor_data.mode = FORMAT_MODE; // Special mode for formatted input + formatIndex = 0; + bufferIndex = 0; + + while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2)) + { + if (data->Buffer2[formatIndex] == '\\') // Backslash character indicates fixed char + { + formatIndex++; + data->Buffer[bufferIndex] = data->Buffer2[formatIndex]; // Put fixed char into buffer + } + else if (strchr("123456789*", data->Buffer2[formatIndex])) // In a delimited field... + { + if (bufferIndex<bufferLength) // if we're not at the end of the string, + formatIndex--; // stay where we are in the formatstring + else + formatIndex++; // otherwise go to end of string + } + else if (bufferIndex>=bufferLength) // If we're past the end of the existing buffer... + { + data->Buffer[bufferIndex] = ' '; // Fill it with empty space + } + bufferIndex++; + formatIndex++; + } + + data->Buffer[bufferIndex] = 0; // Terminate the buffer string + } + + editor_data.Identifier = Dialog->dialog_id; // this is the dialog identity (to be passed to callback) + editor_data.TextString = (char *)data->Message.text; // String to be displayed in output buffer + editor_data.FormatString = data->Buffer2; // Provide the editor with the format string + + if (Dialog->is_password) + { + editor_data.hide = TRUE; + } + + if (!Dialog->empty_ok) + editor_data.min_enter = 1; // Won't accept empty input + + data->edit_win = editor_start(data->parent_win, &editor_data); /* SPR#2086 */ // Create input window + + return WAP_OK; +} +#endif + +//T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog) +T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); /* WAP data */ + USHORT formatIndex; + USHORT bufferIndex; + USHORT bufferLength; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + USHORT titlelen; + USHORT mode; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_input_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtNull, (T_AUI_EDIT_CB)AUI_input_cb); +#endif /* NEW_EDITOR */ + + data->gen_pointer = Dialog->dialog_pointer; /* Needed by GLE */ + + if (Dialog->size > INPUT_MAX_LEN) + { + Dialog->size = INPUT_MAX_LEN; + } + + /* SPR#2393 - SH - Ensure input buffer isn't > max size */ + + if (Dialog->input_length > Dialog->size) + { + Dialog->input_length = Dialog->size; + } + + /* Terminate buffer */ + + Dialog->Input[Dialog->input_length] = 0; + + /* Convert input string */ + /* xreddymn Sep-10-2004 MMI-SPR-24121: Dialog->Input is the buffer passed by the browser, + * and should not be directly modified. Changes have been made to convert + * a copy of the buffer instead. + */ + //ATB_uc_text_convert(Dialog->Input, Dialog->input_length); + +#ifdef NEW_EDITOR + /* Buffer is unicode */ + bufferLength = ATB_uc_text_copy((USHORT *)data->Buffer, Dialog->Input, INPUT_MAX_LEN); + // xreddymn Sep-10-2004 MMI-SPR-24121 + ATB_uc_text_convert((USHORT*)data->Buffer, bufferLength); +#else + /* Buffer is ascii */ + bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN); +#endif /* NEW_EDITOR */ + + /* Convert title to MMI unicode and crop it to fit screen */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + if (Dialog->title_length>0) + { + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN); + ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH); +#ifdef NEW_EDITOR + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, (UBYTE *)data->Message.text); +#endif /* NEW_EDITOR */ + } + else + { +#ifdef NEW_EDITOR + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtUntitled, NULL); +#else + data->Message.text[0] = 0x7F80; + AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED); +#endif /* NEW_EDITOR */ + } + + /* Convert format characters to ascii */ + + ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length); + ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length); + + /* Set up standard editor parameters */ + +#ifdef NEW_EDITOR + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, Dialog->size+1); + + mode = ED_MODE_ALPHA; + + if (Dialog->format_length != 0) + { + AUI_edit_SetFormatStr(&editor_data, data->Buffer2, TRUE, ' '); + mode |= ED_MODE_FORMATTED; + } + + if (Dialog->is_password) + { + mode |= ED_MODE_HIDDEN; + } + + if (!Dialog->empty_ok) + { + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + } + + AUI_edit_SetMode(&editor_data, mode, DS_CURSOR_BAR); + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else + AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb); + + /* Need to set input mode & put fixed characters into input buffer */ + + if (Dialog->format_length != 0) + { + editor_data.mode = FORMAT_MODE; + formatIndex = 0; + bufferIndex = 0; + + while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2)) + { + /* Backslash character indicates fixed character */ + + if (data->Buffer2[formatIndex] == '\\') + { + formatIndex++; + /* Put fixed char into buffer */ + data->Buffer[bufferIndex] = data->Buffer2[formatIndex]; + } + + /* In a delimited field... */ + + else if (strchr("123456789*", data->Buffer2[formatIndex])) + { + if (bufferIndex<bufferLength) /* if we're not at the end of the string, */ + formatIndex--; /* stay where we are in the formatstring */ + else + formatIndex++; /* otherwise go to end of string */ + } + + /* If we're past the end of the existing buffer... */ + + else if (bufferIndex>=bufferLength) + { + data->Buffer[bufferIndex] = ' '; /* Fill it with empty space */ + } + bufferIndex++; + formatIndex++; + } + + data->Buffer[bufferIndex] = 0; /* Terminate the buffer string */ + } + + editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */ + editor_data.TextString = (char *)data->Message.text; /* String to be displayed in output buffer */ + editor_data.FormatString = data->Buffer2; /* Provide the editor with the format string */ + + /* Check if input needs to be hidden */ + + if (Dialog->is_password) + { + editor_data.hide = TRUE; + } + + /* Is an empty response OK? */ + + if (!Dialog->empty_ok) + editor_data.min_enter = 1; + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif + + return WAP_OK; +} + +/******************************************************************************* + + $Function: AUI_input_cb + + $Description: Callback function for the WAP input dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_input_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_INPUT_DIALOG_CNF DialogCnf; + BOOL edited; + USHORT textlen; /* SPR#1816 - SH*/ + + TRACE_FUNCTION("AUI_input_cb()"); + + if (!data) + { + return; + } + + + /* SPR#1816 - SH - Free message string */ + AUI_wap_string_free(&data->Message); + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + edited = FALSE; // Don't change text + break; + + default: + edited = TRUE; // Text is changed + break; + } + + // xreddymn Sep-09-2004 MMI-SPR-24121: data->Buffer is not expected to be ASCIIZ here +#ifdef NEW_EDITOR + textlen = LEa_strlen(data->Buffer); +#else // NEW_EDITOR + textlen = strlen(data->Buffer); +#endif // NEW_EDITOR + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; // Dialog id is passed from AUI_input + DialogCnf.Text = (USHORT *)AUI_wap_memory_alloc((textlen+1)*sizeof(USHORT)); + /* xreddymn Sep-08-2004 MMI-SPR-24121: Added different implementations for new and old editors. + * In case of the new editor, DialogCnf.Text is already in MMI Unicode and only requiers byte swapping. + */ +#ifdef NEW_EDITOR + DialogCnf.text_length = ATB_uc_text_copy((USHORT *)DialogCnf.Text, (USHORT *)data->Buffer, (USHORT)INPUT_MAX_LEN); + ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length); + ((USHORT*)DialogCnf.Text)[DialogCnf.text_length]='\0'; + DialogCnf.text_length++; // To accomodate End of String character '\0' +#else // NEW_EDITOR + /* SPR#1816 - SH - Convert buffer text to MMI unicode, then convert to normal unicode */ + DialogCnf.text_length = ATB_char_to_uc(DialogCnf.Text, data->Buffer); // ..and now updated input string + ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length); +#endif // NEW_EDITOR + DialogCnf.edited = edited; // TRUE if text changed + DialogCnf.dialog_pointer = data->gen_pointer; // Needed by GLE + + ATB_wap_input_dialog_closed(&DialogCnf); // Send data to ATB + + AUI_wap_memory_free((UBYTE *)DialogCnf.Text, (textlen+1)*sizeof(USHORT)); + + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + + // xreddymn Sep-08-2004 MMI-SPR-24121: After editing is complete, the browser may continue to update the screen + data->update_forbid=FALSE; + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_password_dialog_open + + $Description: Prompts the MMI to open a password dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + View - The current view + +*******************************************************************************/ +#if 0 +T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_EDITOR_DATA editor_data; + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_password_dialog_open"); +#endif + + /* SPR#1816 - SH - Title is now unicode */ + + if (Dialog->input_length > USERNAME_MAX_LEN) // Crop input to max length + { + Dialog->input_length = USERNAME_MAX_LEN; + Dialog->Input[USERNAME_MAX_LEN] = NULL; + } + + strncpy(data->Buffer, Dialog->Input, Dialog->input_length); /* Input field is char type */ + + /* Allocate, convert and crop title */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN); /* Convert title to MMI unicode */ + ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH); /* Crop title to fit */ + + /* Need to prompt for two separate things: the username and password! */ + + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1); + + editor_data.Identifier = Dialog->dialog_id; // this is the dialog identity (to be passed to callback) + editor_data.TextString = (char *)data->Message.text; + + data->edit_win = editor_start(data->parent_win, &editor_data); /* SPR#2086 */ // Create input window + + return WAP_OK; +} +#endif + +//T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog) +T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_password_dialog_open"); +#endif + + if (!data) + { + return WAP_FAIL; + } + + /* SPR#2393 - Clear buffer */ + + memset(data->Buffer, 0, USERNAME_MAX_LEN+1); /* Input field is char type */ + + /* Need to prompt for two separate things: the username and password! */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_password_cb_1); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPUsername, NULL); + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1); + + editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */ + editor_data.TextId = TxtISPUsername; /* SPR#2393 */ + + /* Don't update WAP browser window while editor is open */ + data->update_forbid = TRUE; + + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_password_cb_1 + + $Description: Callback function for the WAP password dialog, after username entered. + Prompts for password. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ +#if 0 +static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + T_EDITOR_DATA editor_data; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password_dialog_cb_1"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_LEFT: + data->Buffer2[0] = NULL; // Empty string for password + + AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE, + (T_EDIT_CB)AUI_password_cb_2); + + editor_data.Identifier = identifier; // this is the dialog identity + editor_data.TextString = (char *)data->Message.text; /* SPR#1816 - SH */ + editor_data.hide = TRUE; + + data->temp_win = data->edit_win; // Store pointer to this edit window + data->edit_win = editor_start(data->parent_win, &editor_data); /* SPR#2086 */ + + return; + break; + } + return; +} +#endif +//static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason) +static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; /* SPR#2393 */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password_dialog_cb_1"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + //AUI_destroy(data->win,EDIT_WIN); /* Destroy edit window */ + AUI_destroy(EDIT_WIN); + + /* SPR#2393 - SH - WAP browser can update again */ + data->update_forbid = FALSE; + + /* SPR#2393 - SH - Force an update, otherwise editor screen + * shows forever */ + win_show(data->browser_win); + + /* SPR#2393 - SH - Send NULL username/password to indicate dialog cancelled */ + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; + DialogCnf.input_length = 0; + DialogCnf.Input = NULL; + DialogCnf.password_length = 0; + DialogCnf.Password = NULL; + ATB_wap_password_dialog_closed(&DialogCnf); + break; + + case INFO_KCD_LEFT: + data->Buffer2[0] = NULL; /* Empty string for password */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtNull, (T_AUI_EDIT_CB)AUI_password_cb_2); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer2, PASSWORD_MAX_LEN+1); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPPassword, NULL); + + data->temp_win = data->edit_win; /* Store pointer to this edit window */ + data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); /* Create input window */ + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE, + (T_EDIT_CB)AUI_password_cb_2); + + editor_data.Identifier = identifier; /* this is the dialog identity */ + editor_data.TextString = (char *)data->Message.text; + editor_data.hide = TRUE; + + data->temp_win = data->edit_win; /* Store pointer to this edit window */ + data->edit_win = editor_start(data->parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return; + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_password_cb_2 + + $Description: Callback function for the WAP password dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_password_cb_2(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password_cb_2"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Free message string */ + AUI_wap_string_free(&data->Message); + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + data->edit_win = data->temp_win; // Reinstate previous edit window + data->temp_win = NULL; + break; + + case INFO_KCD_LEFT: + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; + DialogCnf.input_length = strlen(data->Buffer); + DialogCnf.Input = data->Buffer; + DialogCnf.password_length = strlen(data->Buffer2); + DialogCnf.Password = data->Buffer2; + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + data->edit_win = data->temp_win; + data->temp_win = NULL; + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + ATB_wap_password_dialog_closed(&DialogCnf); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_confirm_dialog_open + + $Description: Prompts the MMI to open a confirmation dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + View - The current view + +*******************************************************************************/ + +T_WAP_RES AUI_wap_confirm_dialog_open(T_WAP_MMI_CONFIRM_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + USHORT titlelen; + + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_confirm_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#1816 - SH - Title, Left SK, Right SK are now unicode */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN); // Convert current input to char type, store in output buffer + ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH); + AUI_text_to_uc(data->LeftSoftKey, Dialog->Ok_key, Dialog->ok_key_length); + AUI_text_to_uc(data->RightSoftKey, Dialog->Cancel_key, Dialog->cancel_key_length); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_confirm_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); + display_info.LSKString = (char *)data->LeftSoftKey; + display_info.RSKString = (char *)data->RightSoftKey; + display_info.Identifier = Dialog->dialog_id; + + info_dialog_softkeystrings (data->parent_win, &display_info); /* SPR#2086 */ + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_confirm_cb + + $Description: Callback function for the WAP confirmation dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_confirm_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_confirm_cb"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Free message string */ + AUI_wap_string_free(&data->Message); + + switch (reason) + { + case INFO_KCD_HUP: + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + break; + + case INFO_KCD_RIGHT: + DialogCnf.dialog_id = identifier; // Dialog id is passed from AUI_input + DialogCnf.answer = FALSE; // Confirmation is false + + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + ATB_wap_confirm_dialog_closed(&DialogCnf); // Send data to ATB + break; + + case INFO_KCD_LEFT: + DialogCnf.dialog_id = identifier; // Dialog id is passed from AUI_input + DialogCnf.answer = TRUE; // Confirmation is true + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + ATB_wap_confirm_dialog_closed(&DialogCnf); // Send data to ATB + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_info_dialog_open + + $Description: Prompts the MMI to open an info dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + View - The current view + +*******************************************************************************/ + +T_WAP_RES AUI_wap_info_dialog_open(T_WAP_MMI_INFO_DIALOG_REQ *Dialog, T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_info_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#1816 - SH - Title is now unicode */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN); // Store message in output buffer as char + ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_info_cb, THREE_SECS, 0 ); + info_dialog(data->parent_win, &display_info); /* SPR#2086 */ + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_info_cb + + $Description: Callback function for the WAP confirmation dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_info_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_info_cb"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Free message string */ + AUI_wap_string_free(&data->Message); + + DialogCnf.dialog_id = identifier; // Dialog id is passed from AUI_input + DialogCnf.answer = TRUE; // Confirmation is true + AUI_destroy(EDIT_WIN); /* SPR#2086 */ + ATB_wap_confirm_dialog_closed(&DialogCnf); // Send data to ATB + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_options_menu_open + + $Description: The ATB will send to the AUI the contents of the menu list + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: contextType - the context, to specify the first item in the menu + +*******************************************************************************/ + +T_WAP_RES AUI_wap_options_menu_open(UBYTE contextType) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE startIndex; + UBYTE optionIndex; + const USHORT optionsItems[] = {TxtBookmark, TxtBookmarks, TxtGoTo, TxtHomepage, TxtSoftBack, TxtReload, TxtExit }; + const USHORT contextItem[] = {TxtGoToLink, TxtEdit, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSave}; + T_WAP_LIST *OptionsList; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_options_menu_open"); +#endif + + if (!data) + { + return WAP_FAIL; + } + // xreddymn Jun-28-2005 MMI-SPR-32467 + ATB_animated_GIF_clear(); + + OptionsList = (T_WAP_LIST *)data->OptionsList; + data->update_forbid = TRUE; + startIndex = 0; + + OptionsList->no_of_entries = MAX_OPTIONS; + + if (contextType!=NULL) // If context key is supplied, put it in + { + OptionsList->no_of_entries++; + /* SPR#1816 - SH - Options are now unicode. Allocate memory and convert from text tags */ + OptionsList->Entry[0] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); + AUI_textid_to_uc((USHORT *)OptionsList->Entry[0], contextItem[contextType-1], SOFTKEY_MAX_LEN); + startIndex = 1; // Start filling menu from second entry + } + + for (optionIndex=startIndex; optionIndex<OptionsList->no_of_entries; optionIndex++) // Fill in rest of entries + { + /* SPR#1816 - SH - Options are now unicode. Allocate memory and convert from text tags */ + OptionsList->Entry[optionIndex] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); + + AUI_textid_to_uc((USHORT *)OptionsList->Entry[optionIndex], optionsItems[optionIndex-startIndex], SOFTKEY_MAX_LEN); + } + + data->optionsmenu_data = AUI_entry_list_create (data->parent_win, OptionsList, (ListCbFunc)AUI_options_menu_cb,0); + data->optionsmenu_win = data->optionsmenu_data->win; + + return WAP_OK; +} + +/******************************************************************************* + + $Function: savePluginImage + + $Description: Saves the plugin image into the Object Manager + //xrashmic 28 Jan, 2005 MMI-SPR-28166 + $Returns: void + + $Arguments: win - parent window + EntryListData - list menu data of bookmarks lsit + +*******************************************************************************/ + +void savePluginImage() +{ + TRACE_FUNCTION("savePluginImage"); + switch(PluginObjectType) + { + case IMAGE_JPG: + obj_Type=EMtMimeJpeg; + break; + case IMAGE_GIF: + obj_Type=EMtMimeGif; + break; + case IMAGE_PNG: + obj_Type=EMtMimePng; + break; + case IMAGE_WBMP: + obj_Type=EMtMimeWbmp; + break; + case IMAGE_BMP: + obj_Type=EMtMimeBmp; + break; + case IMAGE_UNKNOWN : + default: + obj_Type=EMtUnknown; + break; + } + if(saveObjectPlugin) + { + if(obj_Type==EMtUnknown) + information_dialog(TxtNotSupported, TxtType, NULL, NULL, TxtNull,TxtNull,FOREVER,KEY_RIGHT|KEY_HUP,NULL); + else + M4_StorePluginObject(downloaded_data, downloaded_data_size,obj_Type); + } + else + information_dialog(TxtImage,TxtLarge, NULL, NULL, TxtNull,TxtNull,FOREVER,KEY_RIGHT|KEY_HUP,NULL); +} +/******************************************************************************* + + $Function: AUI_options_menu_cb + + $Description: Callback function for options menu + + $Returns: void + + $Arguments: win - parent window + EntryListData - list menu data of bookmarks lsit + +*******************************************************************************/ +static void AUI_options_menu_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + UBYTE no_of_entries; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_options_menu_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + /* SPR#1721 - SH - Update forbid now set to false in AUI_destroy */ + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + no_of_entries = EntryListData->ListLength; + data->OptionSelect = EntryListData->ListPosition; // Store selected option no. + + if (no_of_entries>MAX_OPTIONS) // i.e. there's a contextual key in menu + { + if (data->OptionSelect==0) // if we've selected it... + { + AUI_destroy(OPTIONSMENU_WIN); /* SPR#2086 */ + //xrashmic 28 Jan, 2005 MMI-SPR-28166 + // For Plugin images, When Save item is selected in the option menu, + // we save the image into the object manager + if(pluginImageDisplayed) + savePluginImage(); + else + ATB_wap_options_menu_select(View); // tell ATB to do something + return; + } + else + data->OptionSelect--; // Otherwise, pretend it isn't there + } + + switch(data->OptionSelect) + { + case WAP_ADDBOOKMARK: + /* SPR#1816 - SH - Title is unicode, cast to char */ + if (ATB_wap_entry_add(View->Bookmarks, (char *)View->Title)==WAP_FAIL) // Try to add current title to bookmarks + AUI_info_dialog(TxtBookmarks, TxtFull); /* SPR#2086 */ + else + { + ATB_wap_entry_add(View->BookmarksURL, View->URL); // Store URL + ATB_wap_profile_save(View); // Save change to flash + AUI_info_dialog(TxtStored, NULL); /* SPR#2086 */ + } + break; + + case WAP_BOOKMARKS: + AUI_entry_list(View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0); /* SPR#2086 */ + break; + + case WAP_GOTO: + /* SPR#1684 - SH - Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(OPTIONS_WIN); /* SPR#2086 */ + } + data->options_win = bookMenuStart(win, WAPGoToAttributes(), 0); // Create WAP Menu again + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_goto_cb); // Add our own callback + break; + + case WAP_HOMEPAGE: + AUI_destroy(OPTIONSMENU_WIN); /* SPR#2086 */ + AUI_wap_connect_URL(View->Profile->Homepage); /* SPR#2086 - modified */ + break; + + case WAP_BACK: + AUI_destroy(OPTIONSMENU_WIN); /* SPR#2086 */ + ATB_wap_card_go_back(View); // Go to previous card + break; + + case WAP_RELOAD: + AUI_destroy(OPTIONSMENU_WIN); /* SPR#2086 */ + ATB_wap_card_refresh(View); // Reload current card + break; + + case WAP_EXIT: + AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */ + break; + } + break; + + case LISTS_REASON_BACK: // Exit menu (back, timeout etc). + case LISTS_REASON_CLEAR: + AUI_destroy(OPTIONSMENU_WIN); /* SPR#2086 */ + break; + + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_goto_cb + + $Description: Callback function for the goto URL menu + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +static void AUI_goto_cb(T_MFW_HND parent_win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); // WAP data + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_cb"); +#endif + + if (!data) + { + return; + } + + data->options_win = NULL; /* SPR#2086 */ + return; +} + + +/******************************************************************************* + + $Function: AUI_options_cb + + $Description: Callback function for the options menu + + $Returns: None + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +void AUI_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_options_cb"); +#endif + + if (!data) + { + return; + } + + data->options_win = NULL; + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_memory_alloc + + $Description: Called by the WAP.ATB to allocate memory. + + $Returns: Address if successful, null if not. + + $Arguments: size of memory to be allocated. + +*******************************************************************************/ +// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar +// Description: MFW memory size variable changed from U16 -> U32 +// Solution: The use of variable U16 has been replaced with U32 + +U8* AUI_wap_memory_alloc(U32 size) +{ +#ifdef TRACE_MEMALLOC + memUsed += size; + if (size<110) + { + memTracker[size]++; + TRACE_EVENT_P3("ALLOC %d, used = %d, tracking = %d", size, memUsed, memTracker[size]); + } + else + { + TRACE_EVENT_P2("ALLOC %d, used = %d", size, memUsed); + } +#endif + + return mfwAlloc(size); +} + + +/******************************************************************************* + + $Function: AUI_wap_memory_free + + $Description: Called by the WAP.ATB to free memory + + $Returns: + + $Arguments: address and size of memory to be freed. + +*******************************************************************************/ +// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar +// Description: MFW memory size variable changed from U16 -> U32 +// Solution: The use of variable U16 has been replaced with U32 + +U8 AUI_wap_memory_free(U8* address,U32 size) +{ +#ifdef TRACE_MEMALLOC + memUsed -= size; + if (size<110) + { + memTracker[size]--; + TRACE_EVENT_P3("FREE %d, used = %d, tracking = %d", size, memUsed, memTracker[size]); + } + else + { + TRACE_EVENT_P2("FREE %d, used = %d", size, memUsed); + } +#endif + + mfwFree(address,size); + return 1; +} + +/******************************************************************************* + + $Function: AUI_wap_string_alloc + + $Description: SPR#1816 - SH -Added + Allocates memory for a string. Will free any existing + stored string. + + $Returns: None. + + $Arguments: Size of string to be allocated, in unicode characters, not including + null terminator. + +*******************************************************************************/ + +void AUI_wap_string_alloc(T_WAP_STRING *string, USHORT size) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_string_alloc()"); + TRACE_EVENT_P1("Size of string: %d", size); +#endif + + if (string->length!=0) + { + /* If the size is correct, no allocation or freeing required */ + + if (string->length==size) + return; + + /* Otherwise, free the current message block */ + + AUI_wap_string_free(string); + } + + string->text = (USHORT *)AUI_wap_memory_alloc((size+1)*sizeof(USHORT)); + string->length = size; + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_string_free + + $Description: SPR#1816 - SH - Added + Frees an allocated string + + $Returns: None. + + $Arguments: string - Pointer to the string + +*******************************************************************************/ + +void AUI_wap_string_free(T_WAP_STRING *string) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_string_free()"); + TRACE_EVENT_P1("Size of string: %d", string->length); +#endif + + if (string->length!=0) + { + AUI_wap_memory_free((UBYTE *)string->text, (string->length+1)*sizeof(USHORT)); + string->text = NULL; + string->length = 0; + } + + return; +} + + +/******************************************************************************* + + $Function: ATB_wap_card_show + + $Description: Called by the WAP.ATB to show the and/or create the card window. + + $Returns: + + $Arguments: View - The current view + + +*******************************************************************************/ + +void AUI_wap_card_show_req(T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_card_show_req"); +#endif + + if (!data) + { + return; + } + + /* SPR#1739 - SH - If the connecting window or list window are still extant, + * destroy them */ + + AUI_destroy(CONNECT_WIN | LIST_WIN); /* SPR#2086 */ + + /* If WAP browser window doesn't exist, create it */ + + if (data->browser_win==NULL) + { + data->browser_win = AUI_win_create(data->parent_win); // Create WAP browser + } + + SEND_EVENT(data->browser_win,WAP_SHOW_CARD,0,0); // Initialise window + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_status_notify + + $Description: Called by the WAP.ATB when a status flag has changed + SPR#1574 - SH: + - Status is now just a value, rather than a bit field. + - Added two new states: ATB_WAP_ATTACHING, GPRS is trying to + attach, and ATB_WAP_ATTACH_FAILED, GPRS attach has + failed. + - Don't need to destroy connecting window, as this is done + automatically. + + $Returns: + + $Arguments: View - The current view + status - parameter which status has changed + +*******************************************************************************/ + +void AUI_wap_status_notify(T_WAP_VIEW *View, USHORT status) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_status_notify"); +#endif + + if (!data) + { + return; + } + + switch (status) + { + + /* If no status, destroy connecting window */ + + case ATB_WAP_NO_STATUS: + TRACE_EVENT("ATB_WAP_NO_STATUS"); + +// xreddymn Jun-21-2005 MMI-SPR-30291: +// Removed this as it causes WAP sub-menu to appear after the +// "Loading <URL>" dialog disappears and just before the WAP +// content is displayed. +// +// AUI_destroy(CONNECT_WIN); /* SPR#2086 */ + break; + + case ATB_WAP_ATTACHING: // When logging in + TRACE_EVENT("ATB_WAP_ATTACHING"); + AUI_connecting_dialog(ATB_WAP_ATTACHING); /* SPR#2086 */ + break; + + case ATB_WAP_ATTACH_FAILED: // When logging in + TRACE_EVENT("ATB_WAP_ATTACH_FAILED"); + AUI_destroy(BROWSER_WIN | CONNECT_WIN); /* SPR#2086 */ + AUI_info_dialog(TxtGPRS, TxtNotAvailable); /* SPR#2086 */ + break; + + case ATB_WAP_ERROR: // When logging in + TRACE_EVENT("ATB_WAP_ERROR"); + if (wap_callActive || data->connected) + { + AUI_destroy(BROWSER_WIN | CONNECT_WIN); /* SPR#2086 */ + AUI_info_dialog(TxtGPRS, TxtError); /* SPR#2086 */ + wap_callActive = FALSE; // Declare WAP call in progress + data->connected = FALSE; + } + break; + + case ATB_WAP_ACTIVATE_FAILED: // When logging in + TRACE_EVENT("ATB_WAP_ACTIVATE_FAILED"); + AUI_destroy(CONNECT_WIN); /* SPR#2086 */ + AUI_end_call(-1); /* End GPRS data call */ + AUI_info_dialog(TxtConnection, TxtFailed); /* SPR#2086 */ + wap_callActive = FALSE; // Declare WAP call in progress + data->connected = FALSE; + break; + + case ATB_WAP_CONNECTING: // When connecting + TRACE_EVENT("ATB_WAP_CONNECTING"); + + wap_callActive = TRUE; // Declare WAP call in progress + data->connected = TRUE; + AUI_connecting_dialog(ATB_WAP_CONNECTING); /* SPR#2086 */ + break; + + case ATB_WAP_LOGGING_IN: // When logging in + TRACE_EVENT("ATB_WAP_LOGGING_IN"); + /* SPR#1824 - SH - If browser window is present, destroy it, + * so on re-creation it will be the top window */ + + AUI_destroy(BROWSER_WIN); /* SPR#2086 */ + + /* Display dialog with "Logging In" */ + AUI_connecting_dialog(ATB_WAP_LOGGING_IN); /* SPR#2086 */ + break; + + case ATB_WAP_DOWNLOADING: + TRACE_EVENT("ATB_WAP_DOWNLOADING"); + data->connected = TRUE; + /* SPR#2086 - SH - If downloading content, show progress */ + if (data->connect_win && View->object_id==WAP_DOWNLOAD_VIEW) + { + AUI_connecting_dialog(ATB_WAP_DOWNLOADING); /* SPR#2086 */ + } + break; + + /* Status to indicate card is being read + * from cache or from network */ + + case ATB_WAP_CARD_READING: + TRACE_EVENT("ATB_WAP_CARD_READING"); + if (data->connect_win) + { + AUI_connecting_dialog(ATB_WAP_CARD_READING); /* SPR#2086 */ + } + break; + + case ATB_WAP_ONLINE_CONNECTION_CLOSED: + TRACE_EVENT("ATB_WAP_ONLINE_CONNECTION_CLOSED"); + AUI_destroy(BROWSER_WIN | CONNECT_WIN | OPTIONS_WIN | OPTIONSMENU_WIN); /* SPR#2086 */ + data->connected = FALSE; + wap_callActive = FALSE; // WAP call no longer in progress + // Jun-08-2005 MMI-SPR-30291: Added patches from FG + TRACE_EVENT("Connection closed"); + //xrashmic 17 Aug, 2005 MMI-SPR-31364 + //To indicate to the user that wap ran out of memory and hence disconnected. + if(TRUE == data->wapOutOfMem) + { + information_dialog(TxtFatalError, TxtErrorOutOfMem,NULL,NULL,TxtNull,TxtSoftBack,FOREVER,KEY_RIGHT|KEY_HUP,0); + data->wapOutOfMem= FALSE; + } + else + AUI_info_dialog(TxtConnection, TxtDeActivated); // Just for debbuging + exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532 + break; + + case ATB_WAP_PLEASE_WAIT: + TRACE_EVENT("ATB_WAP_PLEASE_WAIT"); + AUI_connecting_dialog(ATB_WAP_PLEASE_WAIT); /* SPR#2086 */ + break; + + case ATB_WAP_SHUTTING_DOWN: + TRACE_EVENT("ATB_WAP_SHUTTING_DOWN"); + break; + + /* SPR#1982 - SH - New status, waiting for PDP context to deactivate */ + + case ATB_WAP_DEACTIVATING: + TRACE_EVENT("ATB_WAP_DEACTIVATING"); + AUI_connecting_dialog(ATB_WAP_DEACTIVATING); /* SPR#2086 */ + break; + + default: + TRACE_EVENT("** UNKNOWN STATUS **"); + return; + } + + if (data->browser_win) /*The card is prompted to show the status*/ + { + TRACE_EVENT("Updating card view for status."); + win_show(data->browser_win); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_change_soft_key + + $Description: Called by the WAP.ATB when the card requests a custom text for a + soft key + + $Returns: + + $Arguments: View - The current view + Label - The text of the custom soft key + length - Length of the text + keyId - The id of the key, to send to the AUS Browser + when the key is pressed. + +*******************************************************************************/ + + +void AUI_wap_change_soft_key(T_WAP_VIEW *View, USHORT *Label, USHORT length, USHORT keyId) +{ + T_WAP_DATA *data = AUI_wap_data(); + SHORT optionsWidth; + USHORT optionsLength; + SHORT labelWidth; + /* SPR#1816 - SH - Some shortcuts */ + char *LeftKeyTag = (char *)data->LeftSoftKey; + char *RightKeyTag = (char *)data->RightSoftKey; + USHORT *LeftKeyText = &data->LeftSoftKey[1]; + USHORT *RightKeyText = &data->RightSoftKey[1]; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_change_soft_key"); +#endif + + if (!data) + { + return; + } + + /* SPR#1816 - SH - Soft keys are unicode */ + + if (length > 0) + { + /* Insert unicode tag and convert to MMI unicode */ + + LeftKeyTag[0] = 0x80; + LeftKeyTag[1] = 0x7F; + optionsLength = AUI_textid_to_uc(LeftKeyText, TxtSoftOptions, SOFTKEY_MAX_LEN); + RightKeyTag[0] = 0x80; + RightKeyTag[1] = 0x7F; + ATB_uc_text_copy(RightKeyText, Label, length); // Convert RSK text to char type + ATB_uc_text_convert(RightKeyText, length); + + /* Make sure softkeys fit into the space by cropping them if necessary */ + + optionsWidth = ATB_uc_text_width(LeftKeyText, optionsLength); + labelWidth = ATB_uc_text_width(RightKeyText, length); + + if ((labelWidth+optionsWidth) > WAP_TOTAL_WIDTH) // If they don't fit... + { + optionsWidth = WAP_TOTAL_WIDTH-labelWidth-WAP_SOFTKEY_SPACING; // Try shortening "options" + if (optionsWidth<ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH)) // If it's too short.... + { + optionsWidth = ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH); // Shorten the other key + labelWidth = WAP_TOTAL_WIDTH-optionsWidth-WAP_SOFTKEY_SPACING; + } + } + ATB_uc_text_crop(LeftKeyText, optionsLength, optionsWidth); // Crop the texts + ATB_uc_text_crop(RightKeyText, length, labelWidth); + View->CustSoftKeys = TRUE; // We are using cust. soft keys + View->CustSoftKeyId = keyId; + } + else + View->CustSoftKeys = FALSE; + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_string + + $Description: SPR#1816 - SH - Renamed & modified for unicode + Gives the ATB the text of a required string (specific for now) + + $Returns: Pointer to the string + + $Arguments: string - The string to translate. If NULL, uses stringID + stringID - The string ID (see ATBData.h for list of strings) + +*******************************************************************************/ + +USHORT AUI_wap_stringID(USHORT *dest, USHORT destlen, USHORT stringID) +{ + USHORT *temp; + USHORT src; + USHORT length; + + switch (stringID) + { + case WAP_STRING_DOWNLOADING: + src = TxtDownloading; + break; + + case WAP_STRING_UPDATING: + src = TxtUpdating; + break; + + case WAP_STRING_UNTITLED: + src = TxtUntitled; + break; + + default: + src = TxtError; + break; + } + + length = AUI_textid_to_uc(dest, src, destlen); + + return length; +} + + +/******************************************************************************* + + $Function: AUI_textid_to_uc + + $Description: SPR#1816 - SH - Added + Converts an string from a text ID to an MMI-converted unicode string. + + $Returns: Length of resulting string + + $Arguments: dest - Place to store the result. + textId - The string to translate. + destlen - Maximum length of result + +*******************************************************************************/ + +static USHORT AUI_textid_to_uc(USHORT *dest, int textId, USHORT destlen) +{ + USHORT length; + char *srctext = MmiRsrcGetText(textId); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_string2unicode()"); +#endif + + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { + length = ATB_uc_text_copy(dest, (USHORT *)srctext, destlen); + } + else + { + length = ATB_char_to_uc(dest, srctext); + } + + return length; +} + + +/******************************************************************************* + + $Function: AUI_text_to_uc + + $Description: SPR#1816 - SH - Added + Converts an standard unicode string to an MMI-converted unicode string, + including the 0x80 at the start + + $Returns: N/A + + $Arguments: dest - Place to store the result. + src - The string to translate. + destLen - Size of destination array in unicode characters + +*******************************************************************************/ + +static USHORT AUI_text_to_uc(USHORT *dest, USHORT *src, USHORT destlen) +{ + USHORT length; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_text_to_uc()"); +#endif + + length = ATB_uc_text_copy(&dest[1], src, destlen); + ATB_uc_text_convert(&dest[1], length); + + dest[0] = 0x7F80; + + return length; +} + + +/* SPR#2086 - Removed obsolete function */ + + +/******************************************************************************* + + $Function: AUI_wap_extDestroy + + $Description: Allows external files to destroy the WAP application + + $Returns: + + $Arguments: + +*******************************************************************************/ + +void AUI_wap_extDestroy(void) +{ + AUI_destroy(ALL_WIN); /* SPR#2086 */ + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_call_connect + + $Description: SPR#1850 - SH - Called when a CSD call is connected + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +void AUI_wap_call_connect(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + if (!data) + { + return; + } + + if (data->View) + { + TRACE_FUNCTION("AUI_wap_call_connect()"); + data->View->cId = cId; /* SPR#1850 - SH - Call is connected */ + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_call_disconnect + + $Description: SPR#1656 - SH - Called when a CSD call is terminated + Called when a CSD call is terminated - informs WAP of this. + SPR#1850 - SH - Now parameter is passed indicating ID of call + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +void AUI_wap_call_disconnect(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_call_disconnect()"); + + if (!data) + { + return; + } + + if (data->View) + { + /* View exists; are we in the connected, or in the connecting screen? */ + + if (data->connected || data->connect_win || data->browser_win) + { + /* SPR#1850 - SH - Check it's the right call */ + + if (cId==data->View->cId) + { + ATB_wap_disconnect(data->View); /* SPR#1850 - SH - Disconnect WAP browser */ + data->View->cId = -1; /* SPR#1850 - SH - Call is disconnected */ + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + AUI_error_dialog(data->View, ERROR_CALL_DISCONNECTED); + } + } + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_end_call + + $Description: SPR#1575 - SH - Determine whether call is CSD or GPRS, + and attempt to end it. + NOTE: this function may be called after WAP is destroyed, so it should + never attempt to access WAP data without first checking that it is + non-null. + + $Returns: None. + + $Arguments: SPR#1850 - SH - Now provided with the call ID of the CSD call + (ignored for GPRS profile). + +*******************************************************************************/ + +void AUI_end_call(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_end_call()"); + + if (!data) + { + return; + } + + /* If WAP browser is active, inform it of disconnection */ + + if (data) + { + if (data->View) + { + /* SPR#1850 - SH - If there is a waiting incoming call, accept it now */ + + if (data->call_waiting) + { + cm_mt_accept(); + data->call_waiting = FALSE; + return; + } + + ATB_wap_disconnect(data->View); + + if (data->View->Profile->AccessType == WAP_CS_DATA) + { + /* SPR#1850 - SH - If call ID is not -1, call is active. + * End it using cm_disconnect */ + + if (data->View->cId!=-1) + { + TRACE_EVENT_P1("Disconnecting CSD call: %d", data->View->cId); + cm_disconnect(data->View->cId); + data->View->cId = -1; // Call is no longer active + } + + if (call_get_window()) + { + TRACE_EVENT("Destroying calling window."); + SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0); + data->View->cId = -1; + } + return; + } + else + { + TRACE_EVENT("Disconnect GPRS call."); + + /* SPR#1982 - SH - if GPRS call is not yet terminated, set + * status so "Please Wait" is shown until it is. */ + +#if 0 + + if (!disconnect_wap_call(WAP_GPRS_DATA)) + { + TRACE_EVENT("Waiting for disconnection."); + ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING); + } +#endif + + return; + } + } + } + + /* SPR#1850 - SH - If we've reached here, the the WAP application + * is closed, but the call is still open */ + + TRACE_EVENT("WAP is closed; attempting to end call"); + + /* SPR#1850 - SH - If call ID is not -1, call is active. + * End it using cm_disconnect */ + + if (cId!=-1) + { + TRACE_EVENT("Disconnecting CSD call in progress."); + cm_disconnect(cId); + } + + /* Destroy calling window */ + + if (call_get_window()) + { + TRACE_EVENT("Destroying calling window."); + SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0); + } + +#ifdef MMI_GPRS_ENABLED + /* Terminate any GPRS call in progress. + * SPR#1982 - SH - if GPRS call is not yet terminated, set + * status so "Please Wait" is shown until it is. */ +#if 0 + if (!disconnect_wap_call(WAP_GPRS_DATA)) + { + TRACE_EVENT("Waiting for disconnection."); + ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING); + } +#endif +#endif + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_in_call + + $Description: SPR#1850 - SH - Returns TRUE if a WAP CSD call is currently active. + + $Returns: TRUE or FALSE + + $Arguments: None. + +*******************************************************************************/ + +UBYTE AUI_wap_in_call(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + + UBYTE result; + + TRACE_FUNCTION("AUI_wap_in_call()"); + + if (!data) + { + return FALSE; + } + + result = FALSE; + + /* Ensure that view is open */ + + if (data->View) + { + /* If the call ID is not -1, there is a call in progress */ + if (data->View->cId!=-1) + { + result = TRUE; + } + } + + return result; +} + + +/******************************************************************************* + + $Function: AUI_wap_browser_disconnect() + + $Description: SPR#1850 - SH - Shuts down browser. Only use in the case where + there is an incoming call waiting to be accepted. + + $Returns: TRUE or FALSE + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_browser_disconnect() +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_browser_disconnect()"); + + if (!data) + { + return; + } + + if (data->View) + { + data->call_waiting = TRUE; /* There is a waiting call */ + ATB_wap_stop_download(data->View); /* Stop any active download */ + ATB_wap_disconnect(data->View); /* Disconnect the WAP browser */ + AUI_destroy(ALL_WIN); /* SPR#2086 */ + } + + return; +} + + +#ifdef MMI_GPRS_ENABLED + +/******************************************************************************* + + $Function: AUI_wap_gprs_cb + + $Description: Called when GPRS state changes. + + $Returns: None. + + $Arguments: +xrashmic 13 Feb, 2006 MMI-SPR-58532 +*******************************************************************************/ + +void AUI_wap_gprs_cb(UBYTE status) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_gprs_cb"); + + if (!data) + { + return; + } + + if (!data->View) + { + return; + } + + if (data->View->Profile->AccessType==WAP_GPRS_DATA) + { + switch (status) + { + case GPRS_CONTEXT_DEACTIVATE: + //Only for network initiated deactivation we need to exit wap + //i.e pdp deactivation received by the network. + if(!exitingWap && !MMSactive) + { + ATB_wap_stop_download(data->View); + AUI_wap_string_free(&data->Message); + AUI_destroy(RETURN_TO_MENU); + } + break; + } + } + return; +} +/******************************************************************************* + + $Function: AUI_wap_GPRS_status + + $Description: Called when GPRS state changes. If WAP is active, updates status. + SPR#1574 - SH - Added this function + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +void AUI_wap_gprs_status(UBYTE status) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_gprs_status"); + + if (!data) + { + return; + } + + if (!data->View) + { + return; + } + + if (data->View->Profile->AccessType==WAP_GPRS_DATA) + { + switch (status) + { + case GPRS_ATTACHED: + TRACE_EVENT("STATUS: Attached."); + + /* SPR#1189 - SH - Check that login is still proceeding */ + if (ATB_wap_status_get(data->View, ATB_WAP_ATTACHING)) + { + TRACE_EVENT("View is attaching!"); + ATB_wap_status_change(data->View, ATB_WAP_LOGGING_IN); + /* SPR#1575 - SH - Are now attached, can connect */ + connect_gprs(data->View->object_id); + } + break; + + case GPRS_OFF: + TRACE_EVENT("STATUS: Detached"); + if (data->connected) + { +#if 0 + disconnect_wap_call(WAP_GPRS_DATA); +#endif + ATB_wap_status_change(data->View, ATB_WAP_ATTACH_FAILED); + } + break; + + /* SPR#1824 - SH - Added these status values */ + + case GPRS_CONTEXT_ACTIVATE: + TRACE_EVENT("STATUS: Context Activated"); + break; + + case GPRS_CONTEXT_DEACTIVATE: + TRACE_EVENT("STATUS: Context Deactivated"); + /* SPR#1982 - SH - If we're deactivating, this is OK */ + if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING)) + { + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + } + /* SPR#1982 - SH - Also display message if status is PLEASE WAIT */ + else if (ATB_wap_status_get(data->View, ATB_WAP_PLEASE_WAIT) + || ATB_wap_status_get(data->View, ATB_WAP_CONNECTING) + || ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING) /* SPR#2086 */ + || ATB_wap_status_get(data->View, ATB_WAP_LOGGING_IN)) + { + ATB_wap_status_change(data->View, ATB_WAP_ACTIVATE_FAILED); + if (!data->View->secondaryIP) + { + ATB_wap_secondary_IP(data->View); + } + else + { + //xmzhou_trace_string("ATB_wap_data_call_disconnected 4"); + ATB_wap_data_call_disconnected(data->View); + } + } + break; + + case GPRS_ERROR: + TRACE_EVENT("STATUS: ERROR"); + AUI_end_call(-1); /* SPR#1850 - SH - Call ID is -1 for GPRS */ + ATB_wap_status_change(data->View, ATB_WAP_ERROR); + break; + } + } + return; +} +#endif /* MMI_GPRS_ENABLED */ + +/******************************************************************************* + + $Function: AUI_wap_content_get + + $Description: Fetches content + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: id - A distinct ID for this request. Returned in ATB_wap_content(). + Url - The URL of the content to download. + reload - If TRUE, any version of the requested content in the cache + will be ignored, and the content will be fetched from the network. + acceptHeader - Specifies if any Accept-Header fields will be sent with + the request. Can be NULL. + +*******************************************************************************/ + +void AUI_wap_content_get(UBYTE id, char *Url, BOOL reload, char *acceptHeader) +{ + T_WAP_DATA *data = AUI_wap_data(); + + //xmzhou_trace_string_value("data=",data); + + data->View->Title[0] = 0; + + + //xmzhou_trace_string_value("AUI_wap_content_get : data->connected", data->connected); + + if (!data->connected) + { + //xmzhou_trace_string("calling ATB_wap_status_change"); + ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); + } + //T_WAP_RES ATB_wap_content_get(UBYTE urlID, char *Url, BOOL reload, char *acceptHeader); + ATB_wap_content_get(id, Url, reload, acceptHeader); + + return; +} + + +/* M4 Begin: A.Mok - 06 OCT 2003 */ + +//TISHMMS Project +extern void AUI_wap_content_clone (UCHAR urlID, const CHAR *data, USHORT length, BOOL moreData, const CHAR *contentType, ULONG totalSize, SHORT errorNo); +/* M4 End: A.Mok - 06 OCT 2003 */ + + +/******************************************************************************* + + $Function: AUI_wap_content + + $Description: Content is sent from the browser on request. + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: urlID - Unique identifier for the request. + Data - the data sent + data_length - Length of the data in bytes + moreData - TRUE if there is more data to come + ContentType - Content type of the data + totalSize - Zero if data sent all in one block + +*******************************************************************************/ + +void AUI_wap_content(UBYTE urlID, + char *Data, + ULONG data_length, + BOOL moreData, + char *ContentType, + ULONG contentType_length, + ULONG totalSize) +{ + T_WAP_DATA *data = AUI_wap_data(); + + float data_length_kbytes; + char title[20]; + int offset; + TRACE_FUNCTION("AUI_wap_content()"); + + if (!data) + { + return; + } + + + + data->View->Title[0] = 0x7F80; + + //xmzhou_trace_string("****AUI_wap_content*****"); + //xmzhou_trace_string_value("urlID",urlID); + //xmzhou_trace_string_value("data_length",data_length); + //xmzhou_trace_string_value("moreData",moreData); + //xmzhou_trace_string(ContentType); + //xmzhou_trace_string_value("contentType_length",contentType_length); + //xmzhou_trace_string_value("totalSize",totalSize); +#if 0 + /* M4 Begin: A.Mok - 06 OCT 2003 */ + if (!strcmp ("application/vnd.wap.mms-message", ContentType)) + { + //xmzhou_trace_string("****AUI_wap_content_clone*****"); + AUI_wap_content_clone (urlID, Data, data_length, moreData, ContentType, totalSize, 0); + } + /* M4 End: A.Mok - 06 OCT 2003 */ +#endif + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + offset=downloaded_data_size; + downloaded_data_size += data_length; + + //If the has download started and the object is not a supported type, abort the download. + if(offset>0 && obj_Type==EMtUnknown) + { + TRACE_EVENT("Unsupported MIME type"); + ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + AUI_destroy(WAP_WIN); + return; + } + + // Depending on the Contenttype the Mime type is set here for inserting + // the object into the object manger of MMS + if(contentType_length>0) + { + if(strstr(ContentType,"Content-Type: image/jpeg")) + { + obj_Type = EMtMimeJpeg; + } + else if (strstr(ContentType,"Content-Type: image/gif")) + { + obj_Type = EMtMimeGif; + } + else if (strstr(ContentType,"Content-Type: image/png")) + { + obj_Type = EMtMimePng; + } + else if (strstr(ContentType,"Content-Type: audio/amr")) + { + obj_Type = EMtMimeAmr; + } + //xrashmic 4 Jan, 2005 MMI-SPR-27874 + //Added support for BMP and WBMP + else if(strstr(ContentType,"Content-Type: image/wbmp")) + { + obj_Type = EMtMimeWbmp; + } + else if(strstr(ContentType,"Content-Type: image/bmp")) + { + obj_Type = EMtMimeBmp; + } + // xreddymn Jan-31-2005 MMI-SPR-28483: Support MIDI objects + else if(strstr(ContentType,"Content-Type: audio/midi")) + { + obj_Type = EMtMimeMidi; + } + else if(strstr(ContentType,"Content-Type: audio/mid")) + { + obj_Type = EMtMimeMidi; + } + else + { + obj_Type = EMtUnknown; + } + } + if(downloaded_data_size<MAX_DOWNLOAD) + { + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + // If data is within the set limit continue downloading + if (downloaded_data_size<1024) + { + sprintf(title, "D/l: %db", downloaded_data_size); + //xmzhou_trace_string(title); + ATB_char_to_uc(&data->View->Title[1], title); + } + else + { + data_length_kbytes = (float)downloaded_data_size/(float)1024; + sprintf(title, "D/l: %.1fKb", data_length_kbytes); + //xmzhou_trace_string(title); + ATB_char_to_uc(&data->View->Title[1], title); + } + + /* If more data to come, don't display yet */ + memcpy((void *)(downloaded_data+offset), Data,data_length); + + if (moreData) + { + AUI_connecting_dialog(ATB_WAP_DOWNLOADING); /* SPR#2086 */ + return; + } + //xrashmic 4 Jan, 2005 MMI-SPR-27874 + // Adding seperate condition when the data is only few bytes, + // as data_length_kbytes is populated only for the images in kbytes + if (downloaded_data_size<1024) + sprintf(title, "Downloaded: %db", downloaded_data_size); + else + sprintf(title, "Downloaded: %.1fKb", data_length_kbytes); + //xmzhou_trace_string(title); + ATB_char_to_uc(&data->View->Title[1], title); + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + // When the data is downloaded completly, insert it into the object manager. + M4_StoreDownloadedObject(downloaded_data, downloaded_data_size,obj_Type); + } + else + { + //xrashmic 29 Nov, 2004 MMI-SPR-26161 + // If data exceeds the set limit abort the download + ATB_wap_change_view(WAP_DOWNLOAD_VIEW); + AUI_destroy(WAP_WIN); + return; + } + AUI_destroy(CONNECT_WIN | EDIT_WIN); /* SPR#2086 */ + + /* If WAP browser window doesn't exist, create it */ + + if (data->browser_win==NULL) + { + data->browser_win = AUI_win_create(data->parent_win); /* SPR#2086 */ + } + + win_show(data->browser_win); + + + + return; +} + +/* +T_WAP_RES ATB_wap_content_post( + UBYTE urlID, + char *Url, + BOOL reload, + char *acceptHeader, + char *Data, + ULONG data_length, + BOOL moreData, + char *ContentType, + UBYTE sendMode, + char *ContentDisp, + ULONG totalSize) +*/ +//TISHMMS Project + +void AUI_wap_content_post_more( +UBYTE urlID, + char *Data, + ULONG data_length, + BOOL moreData) +{ + //xmzhou_trace_string("AUI_wap_content_post_more called"); + + ATB_wap_content_post_more( + urlID, + Data, + data_length, + moreData); +} + +void AUI_wap_content_post(UBYTE urlID, + char *Url, + BOOL reload, + char *acceptHeader, + char *Data, + ULONG data_length, + BOOL moreData, + char *ContentType, + UBYTE sendMode, + char *ContentDisp, + ULONG totalSize) +{ + T_WAP_DATA *data = AUI_wap_data(); + + //xmzhou_trace_string("AUI_wap_content_post called"); + + data->View->Title[0] = 0; + + + //xmzhou_trace_string_value("AUI_wap_content_post : data->connected", data->connected); + + if (!data->connected) + { + //xmzhou_trace_string("AUI_wap_content_post: calling ATB_wap_status_change"); + ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); + } + + ATB_wap_content_post( + urlID, + Url, + reload, + acceptHeader, + Data, + data_length, + moreData, + ContentType, + sendMode, + ContentDisp, + totalSize); + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_view_changed + + $Description: Notify AUI that view has been changed + SPR#2086 - SH - Added + + $Returns: None. + + $Arguments: View - The new view + +*******************************************************************************/ + +void AUI_wap_view_changed(T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_view_changed()"); + + if (!data) + { + return; + } + + data->View = View; + if (View) + { + data->view_id = View->object_id; + } + else + { + data->view_id = WAP_NO_VIEW; + } + + TRACE_EVENT_P1("New view is %d", data->view_id); + + return; +} + +/******************************************************************************* + + $Function: AUI_mms_gprs_reset_callback + + $Description: Remove GPRS event callback that was assigned when sending MMS + + $Returns: None + + $Arguments: None + + xreddymn Apr-02-2005 MMI-SPR-29936 + +*******************************************************************************/ + +void AUI_mms_gprs_reset_callback(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + if(data != NULL) + { + GPRS_SetCallback(data->parent_win, NULL); + } +} + +/******************************************************************************* + + $Function: AUI_mms_gprs_status + + $Description: GPRS event callback function when sending MMS + + $Returns: None + + $Arguments: status: GPRS status codes posted through this argument + + xreddymn Apr-02-2005 MMI-SPR-29936 + +*******************************************************************************/ + +void AUI_mms_gprs_status(UBYTE status) +{ + if(GPRS_ERROR == status) + { + T_WAP_DATA *data = AUI_wap_data(); + + AUI_mms_status_notify(ATB_WAP_ATTACH_FAILED); + AUI_mms_gprs_reset_callback(); + AUI_mms_cancel_send(); + ATB_wap_disconnect(data->View); + } +} + +/******************************************************************************* + + $Function: AUI_mms_gprs_set_callback + + $Description: Assign GPRS event callback when sending MMS + + $Returns: None + + $Arguments: None + + xreddymn Apr-02-2005 MMI-SPR-29936 + +*******************************************************************************/ + +void AUI_mms_gprs_set_callback(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + if(data != NULL) + { + GPRS_SetCallback(data->parent_win, (T_GPRS_CB)AUI_mms_gprs_status); + } +} + +// May 19 2005 REF: MMI-SPR-29887 xrashmic +// To display an Error Message when user tries to retrieve the MMS with GPRS disabled SIM. +void AUI_retrivemms_gprs_status(UBYTE status) +{ + if(GPRS_ERROR == status) + { + T_WAP_DATA *data = AUI_wap_data(); + AUI_mms_status_notify(ATB_WAP_ATTACH_FAILED); + AUI_mms_gprs_reset_callback(); + AUI_mms_cancel_recieve(); + ATB_wap_disconnect(data->View); + } +} + // May 19 2005 REF: MMI-SPR-29887 xrashmi + // Call back function for GPRS connection. +void AUI_retrievemms_gprs_set_callback(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + if(data != NULL) + { + GPRS_SetCallback(data->parent_win, (T_GPRS_CB)AUI_retrivemms_gprs_status); + } +} + +//xrashmic 08 Feb, 2005 MMI-SPR-27853 +/******************************************************************************* + + $Function: AUI_mmssend_cb + + $Description: Call back function for all send mms info dialog screens + + $Returns: None. + + $Arguments: +//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 +//Sepearted the call back funtion for the sending and receving mms dialog screns. +*******************************************************************************/ +void AUI_mmssend_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_EVENT("AUI_mmssend_cb"); + data->mms_win=NULL; + data->mms_win_type=0; + // xrashmic 30 Nov, 2004 MMI-SPR-26145 + // Deleting the compose and option window after sending the MMS + if(mms_create_opt_hnd) + { + MMI_DestoryWindow(mms_create_opt_hnd); + mms_create_opt_hnd=NULL; + if(mms_create_hnd) + { + MMI_DestoryWindow(mms_create_hnd); + mms_create_hnd=NULL; + } + //xrashmic 14 Dec, 2004 MMI-SPR-23921 + // Deleting the forward window if it was created. + else if(mms_Fwdcreate_hnd) + { + MMI_DestoryWindow(mms_Fwdcreate_hnd); + mms_Fwdcreate_hnd=NULL; + //The options window containing "forward" options. + } + // Apr 07 2005 REF: MMI-SPR-27826 x0012849 + // To avoid crash when a user replies to the MMS which is there in Inbox + // Delete the options window not only while forwarding but also while replying + // May 11 2005 REF: MMI-SPR-29887 x0012849 + // The code is Moved to get the list of MMS refreshed each time we go out and come back to the list. + } + if(g_OptionsWin) + { + MMI_DestoryWindow(g_OptionsWin); + g_OptionsWin=NULL; + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + // To refresh the list of MMS, after this the first item in the list is highlighted + if(g_MmsBoxWin) + SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder); + + } + //CRR 25577: 06 oct 2004 - xpradipg + //we check if the current window is the MMS Inbox list window and then post + //the redraw event which will refresh the list + if(mmsboxwinhnd) + { + SEND_EVENT(mmsboxwinhnd, MWM_REDRAW, 0,(void *)folder); + } +} + + +/******************************************************************************* + + $Function: AUI_mmsrcv_cb + + $Description: Call back function for all receive mms info dialog screens + + $Returns: None. + + $Arguments: + //xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637 +//Sepearted the call back funtion for the sending and receving mms dialog screns. +*******************************************************************************/ +void AUI_mmsrcv_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_EVENT("AUI_mmsrcv_cb"); + data->mms_win=NULL; + data->mms_win_type=0; + + if(g_OptionsWin) + { + //Removing the Inbox option screen + MMI_DestoryWindow(g_OptionsWin); + g_OptionsWin=NULL; + if(g_MmsReadWin) + { + //Removing the Inbox->option->Read screen + MMI_DestoryWindow(g_MmsReadWin); + g_MmsReadWin=NULL; + } + else if(mms_Fwdcreate_hnd) + { + //Removing the Inbox->option->Forward screen + MMI_DestoryWindow(mms_Fwdcreate_hnd); + mms_Fwdcreate_hnd=NULL; + + } + else if(mms_create_hnd) + { + //Removing the Inbox->option->Reply screen + MMI_DestoryWindow(mms_create_hnd); + mms_create_hnd=NULL; + } + else if(MMSBox_Extract_exec_win) + { + if(g_MmsExtractEdtWin) + { + //Removing the Inbox->option->extract->list->rename screen + AUI_edit_Destroy(g_MmsExtractEdtWin); + g_MmsExtractEdtWin=NULL; + } + //Removing the Inbox->option->extract->list screen + MMI_DestoryWindow(MMSBox_Extract_exec_win); + MMSBox_Extract_exec_win=NULL; + } + } + if(g_MmsBoxWin) + SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder); +} + +// xreddymn Mar-25-2005 MMI-SPR-26144 +/******************************************************************************* + + $Function: AUI_mms_cancel_status + + $Description: Used to check if MMS send was cancelled + + $Returns: Returns 1 if user has canceled sending MMS + + $Arguments: None + +*******************************************************************************/ + +UBYTE AUI_mms_cancel_status(void) +{ + if(mms_cancel_status) + { + mms_cancel_status=0; + return(1); + } + else return(0); +} + +/******************************************************************************* + + $Function: AUI_mms_cancel_send + + $Description: This function is called to cancel sending MMS + Posts cancel events to MMS and WAP clients + + $Returns: None. + + $Arguments: None + +*******************************************************************************/ + +void AUI_mms_cancel_send(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + cancel_TMsend(); + ATB_wap_content_cancel(get_urlID()); +} + +//May 17 2005 REF: MMI-SPR-29887 x0012849 +// Called when user cancels the retrieving MMS operation. +void AUI_mms_cancel_recieve(void) +{ + cancel_TMrecieve(); + //Jun 28 2005 REF: MMI-SPR-29887 x0012849 + // Here delete the body file if created any earlier. + Delete_Body(); + ATB_wap_content_cancel(get_urlIDget()); +} +/******************************************************************************* + + $Function: AUI_mms_cancel_cb + + $Description: Call back function for AUI_mms_dialog + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +void dialog_info_destroy (T_MFW_HND own_window); + +void AUI_mms_cancel_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + TRACE_FUNCTION("AUI_mms_cancel_cb"); + data->mms_win=NULL; + data->mms_win_type=MMS_TYPE_NONE; + progressValue=0; + data->mms_cancel=1; + mms_cancel_status=1; + AUI_mms_cancel_send(); + AUI_mms_cancel_exit(); + dspl_Enable(1); +} +//May 17 2005 REF: MMI-SPR-29887 x0012849 +// Call back for canceling Retrieving MMS + +void AUI_mms_recieve_cancel_cb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + TRACE_FUNCTION(" AUI_mms_recieve_cancel_cb"); + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + is_downloadcancelled = TRUE; + data->mms_win=NULL; + data->mms_win_type=MMS_TYPE_NONE; + // Jun 23 2005 REF: MMI-SPR-29887 x0012849 + AUI_mms_status_notify(MMS_RECEIVE_FAIL); + AUI_mms_cancel_recieve(); + dspl_Enable(1); +} + +/******************************************************************************* + + $Function: AUI_mms_cancel_exit + + $Description: This function exits the MMS composer when user has canceled + sending MMS. Currently this is not used. But will be required + when MMI-SPR-26144 is solved + + $Returns: None. + + $Arguments: None + +*******************************************************************************/ + +void AUI_mms_cancel_exit(void) +{ + // xrashmic 30 Nov, 2004 MMI-SPR-26145 + // Deleting the compose and option window after sending the MMS + if(mms_create_opt_hnd) + { + MMI_DestoryWindow(mms_create_opt_hnd); + mms_create_opt_hnd=NULL; + if(mms_create_hnd) + { + MMI_DestoryWindow(mms_create_hnd); + mms_create_hnd=NULL; + } + //xrashmic 14 Dec, 2004 MMI-SPR-23921 + // Deleting the forward window if it was created. + else if(mms_Fwdcreate_hnd) + { + MMI_DestoryWindow(mms_Fwdcreate_hnd); + mms_Fwdcreate_hnd=NULL; + //The options window containing "forward" options. + if(g_OptionsWin) + { + MMI_DestoryWindow(g_OptionsWin); + g_OptionsWin=NULL; + } + } + } + //xrashmic 26144 +} + +/******************************************************************************* + + $Function: AUI_ems_dialog + + $Description: To display the indication of new ems in the idle screen + xrashmic 26 Aug, 2004 MMI-SPR-23931 + + $Returns: None. + + $Arguments: +*******************************************************************************/ +void AUI_ems_dialog() +{ + //CRR 25577: 06 oct 2004 - xpradipg + //we check if the current window is the MMS Inbox list window and then post + //the redraw event which will refresh the list + if(mmsboxwinhnd) + { + SEND_EVENT(mmsboxwinhnd, MWM_REDRAW, 0,(void *)folder); + } + addNewEMS(); + return; +} + +/******************************************************************************* + + $Function: information_dialog + + $Description: To display info dialog screens. + xrashmic 29 Nov, 2004 MMI-SPR-26161 + + $Returns: None. + + $Arguments: +*******************************************************************************/ +T_MFW_HND information_dialog(USHORT TxtId1, USHORT TxtId2,char* Txt1, char* Txt2, USHORT SoftKeyTxtId1, USHORT SoftKeyTxtId2, int timer, T_MFW_EVENT keyEvents, T_VOID_FUNC callback) +{ + T_DISPLAY_DATA display_info; + T_MFW_HND parent_win = mfwParent(mfw_header()); + T_MFW_HND win; + TRACE_FUNCTION("information_dialog"); + dlg_initDisplayData_TextId( &display_info, SoftKeyTxtId1, SoftKeyTxtId2, TxtId1, TxtId2, COLOUR_WAP_POPUP); + display_info.TextString=Txt1; + display_info.TextString2=Txt2; + dlg_initDisplayData_events( &display_info,callback, timer, keyEvents); + display_info.Identifier = 0; + win=info_dialog(parent_win, &display_info); + dspl_Enable(0); + win_show(win); + dspl_Enable(1); + return win; +} + +#else /* #ifdef FF_GPF_TCPIP */ + +/******************************************************************************* + + 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: + $Project code: + $Module: + $File: AUIWap.c + $Revision: + + $Author: Condat(UK) + $Date: + +******************************************************************************** + + Description: + The user interface for WAP. Provides the required menus, lists, dialogs and + utilises the functionality of the ATB appropriately. + +******************************************************************************** + + $History: AUIWap.c + + 14/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version. + + $End + +*******************************************************************************/ + + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else /* NEW_FRAME */ + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif /* NEW_FRAME */ + +#include "mfw_sys.h" + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_kbd.h" +#ifndef NEW_EDITOR +#include "mfw_edt.h" +#endif +#include "mfw_tim.h" +#include "mfw_phb.h" +#include "mfw_sms.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_lng.h" +#include "mfw_sat.h" +#include "mfw_kbd.h" +#include "mfw_nm.h" +#include "mfw_cm.h" + +#include "dspl.h" + +#include "MmiMmi.h" +#include "MmiMain.h" +#include "MmiDummy.h" +#include "MmiDialogs.h" +#include "MmiLists.h" +#include "mmiCall.h" + +#include "MmiMenu.h" +#include "MmiSoftKeys.h" +#include "MmiResources.h" + +#include "MmiBlkLangDB.h" +#include "MmiBookUtils.h" +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#else +#include "MmiEditor.h" +#endif +#include "MmiBookShared.h" +#include "ATBData.h" +#include "wap_types.h" +#include "ATBWapAUI.h" +#include "ATBWapACI.h" +#include "mmiSmsMenu.h" +#include "mmismssend.h" +#include "AUIWap.h" +#include "AUIWapext.h" +#ifdef MMI_GPRS_ENABLED +#include "MmiGprs.h" +#endif + +#include "cus_aci.h" +#include "p_sim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + +#include "mmiColours.h" +#include "font_bitmaps.h" + +/* Define this to trace memory allocations & freeings */ +#undef TRACE_MEMALLOC + + +/* List menu attributes + * + * Needed for creating the menu. + */ + +static MfwMnuAttr list_menuAttrib = +{ + &menuArea, + MNU_LEFT | MNU_LIST | MNU_CUR_LINE, + -1, + NULL, + 0, + COLOUR_LIST_XX, TxtNull, MNUATTRSPARE +}; + +/* + Local Handler: the WAP window (At the moment only one instance possible in BMI) +*/ + +MfwHnd wap_main_window = 0; +static BOOL wap_callActive = FALSE; + +/* Set up variables and functions for tracing purposes */ + +#ifdef TRACE_MEMALLOC +U16 memUsed = 0; +UBYTE memTracker[110] = {0}; +#endif + +int check_memory(void) +{ + TRACE_EVENT_P1("Memory left: %d", mfwCheckMemoryLeft()); + return; +} + + +/******************************************************************************* + + $Function: AUI_menu + + $Description: The main WAP menu + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_menu(MfwMnu* menu, MfwMnuItem* item) +{ + T_MFW_HND win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_menu"); +#endif + + win = AUI_create(mfwParent( mfw_header())); + + if (!win) + { + TRACE_EVENT("ERROR - Wap Already Open"); + } + + check_memory(); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_please_wait + + $Description: Creates a "Please Wait" message that will hang around until WAP has + been started + + $Returns: Window handle of the created window + + $Arguments: parent_win - the parent window + +*******************************************************************************/ + +T_MFW_HND AUI_please_wait(T_MFW_HND parent_win) +{ + T_DISPLAY_DATA display_info; + + TRACE_FUNCTION("AUI_please_wait()"); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_please_wait_cb, 10000, 0 ); + + return info_dialog(parent_win,&display_info); +} + + +/******************************************************************************* + + $Function: AUI_please_wait_cb + + $Description: Timeout callback for the please wait window + + $Returns: None. + + $Arguments: win - the parent window + +*******************************************************************************/ + +void AUI_please_wait_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_please_wait_cb()"); +#endif + + if (!data) + { + return; + } + + switch(reason) + { + case INFO_TIMEOUT: + SEND_EVENT(win, DIALOG_DESTROY, NULL, NULL); + AUI_destroy(data->win, ALL_WIN); + AUI_info_dialog(NULL, TxtTimedOut, TxtNull); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_start_done + + $Description: WAP has started - can create new view + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_start_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_NEW_VIEW_IND wap_view; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_start_done"); +#endif + + if (!data) + { + return; + } + + /* Start view */ + + wap_view.object_id = 1; + wap_view.uaMode = 1; /* Specifies WML user agent */ + wap_view.view_width = WAP_SCREEN_WIDTH; /* Width of screen for browser */ + wap_view.view_height = WAP_SCREEN_HEIGHT; /* Height of screen for browser */ + wap_view.font_height = WAP_CHAR_HEIGHT; /* Height of latin font */ + wap_view.unicode_height = WAP_CHAR_HEIGHT; /* Height of unicode font */ + wap_view.unicode_width = WAP_CHAR_WIDTH; /* Width of characters in unicode font */ + + /* Get height and widths of all latin characters in current font */ + + wap_view.font_width_length = 256; + wap_view.font_width = (UBYTE *)AUI_wap_memory_alloc(256*sizeof(UBYTE)); + font_getAllAsciiWidths(wap_view.font_width); + + /* Create the view */ + + data->View = ATB_wap_new_view(&wap_view, (void *)data); + + AUI_wap_memory_free(wap_view.font_width, 256*sizeof(UBYTE)); + + /* We're not connected as yet */ + + data->connected = FALSE; + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_new_view_done + + $Description: View has started - can create menu + + $Returns: None + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_new_view_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_new_view_done"); +#endif + + if (!data) + { + return; + } + + /* Initialise window */ + + SEND_EVENT(data->win,WAP_INIT,0,0); + + /* Destroy temp_win, if it exists */ + + if (data->temp_win) + { + SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL); + data->temp_win = NULL; + } + + /* Create WAP main menu */ + + data->menu_win = bookMenuStart(data->win, WAPMenuAttributes(), 0); + SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb); + + return; +} + + +/******************************************************************************* + + $Function: AUI_menu_cb + + $Description: Callback function for the WAP menu + + $Returns: None. + + $Arguments: parent_win - the WAP data window + identifier - unused + reason - unused + +*******************************************************************************/ + +static void AUI_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_menu_cb"); +#endif + + if (!data) + { + return; + } + + /* SPR#2413 - SH - If still disconnecting, don't allow WAP application to be + * destroyed. */ + + if (data->View != NULL) + { + if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING)) + { + /* Recreate menu */ + + data->menu_win = bookMenuStart(data->win, WAPMenuAttributes(), 0); + SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb); + return; + } + } + + AUI_destroy(data->win, WAP_WIN); + return; +} + + +/******************************************************************************* + + $Function: AUI_homepage + + $Description: Enter WAP browser with URL=homepage URL + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_homepage(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_homepage"); +#endif + + if (!data) + { + return NULL; + } + + /* Connect & attempt to download homepage */ + + AUI_connect_URL(data->win, data->View->Profile->Homepage); + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_create + + $Description: Creates a window (never shown) to which is attached all the data that + is used in WAP. This is distinct from the WAP card browser window, + which is created dynamically. + + $Returns: Pointer to the new window + + $Arguments: parent win - pointer to the parent window of the data window + +*******************************************************************************/ + +T_MFW_HND AUI_create (T_MFW_HND parent_win) +{ + T_MFW_WIN *win_data; + T_WAP_DATA *data; + T_MMI_WAP_START_IND wap_start; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_create"); +#endif + + /* Check if one instance of WAP already activated */ + + if (wap_main_window) + { + TRACE_EVENT("*** WAP window already open ***"); + return NULL; + } + + data = (T_WAP_DATA *)AUI_wap_memory_alloc (sizeof (T_WAP_DATA)); + + /* Create the WAP data window */ + + data->update_forbid = FALSE; + + data->win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_cb); + if (data->win==NULL) + { + TRACE_EVENT("*** Failed to create main WAP window ***"); + AUI_wap_memory_free((UBYTE *)data, sizeof (T_WAP_DATA)); + return NULL; + } + + /* Create window handler */ + + wap_main_window = data->win; + data->main_kbd = kbd_create (data->win, KEY_ALL, (T_MFW_CB)AUI_main_kbd_cb); + + data->mmi_control.dialog = (T_DIALOG_FUNC)AUI_control; + data->mmi_control.data = (void *)data; + data->parent_win = parent_win; + win_data = ((T_MFW_HDR *)data->win)->data; + win_data->user = (void *)data; /* Attach data to window */ + + /* Reset various window pointers */ + + data->edit_win = NULL; + data->options_win = NULL; + data->sub_options_win = NULL; /* SPR#2324 */ + data->sub_sub_options_win = NULL; /* SPR#2324 */ + data->list_win = NULL; + data->menu_win = NULL; + data->browser_win = NULL; + data->list_data = NULL; + data->connect_win = NULL; + data->error_win = NULL; + data->call_waiting = FALSE; + + /* Allocate memory for some strings. */ + + data->Buffer = (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT)); /* Input buffer 1 */ + data->Buffer2 = (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT)); /* Input buffer 2 */ + data->Message.text = NULL; + data->Message.length = 0; + data->LeftSoftKey = (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); /* Left softkey text */ + data->RightSoftKey = (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); /* Right softkey text */ + + /* Create list for options menu */ + + data->OptionsList = ATB_wap_entry_list_create(WAP_OPTIONS_LIST, MAX_OPTIONS+1, OPTIONS_MAX_LEN, TRUE); + + /* Generate "Please wait" window while WAP starts up */ + + data->temp_win = AUI_please_wait(data->win); + data->View = NULL; /* View has not yet been created */ + + /* SPR#2346 - SH - Set up GPRS notification callback */ + +#ifdef MMI_GPRS_ENABLED + GPRS_SetCallback(data->win, (T_GPRS_CB)AUI_wap_gprs_status); +#endif /* MMI_GPRS_ENABLED */ + + /* Start the WAP Browser */ + + ATB_wap_start(&wap_start); + return data->win; +} + + +/******************************************************************************* + + $Function: AUI_wap_data + + $Description: Returns the WAP data pointer + + $Returns: Pointer to WAP data + + $Arguments: None + +*******************************************************************************/ + +T_WAP_DATA *AUI_wap_data (void) +{ + T_MFW_WIN *win_data; + T_WAP_DATA *data; + + if (wap_main_window==NULL) + { + TRACE_EVENT("** WAP not active **"); + return NULL; + } + + win_data = ((T_MFW_HDR *)wap_main_window)->data; + data = (T_WAP_DATA *)win_data->user; + + return data; +} + + +/******************************************************************************* + + $Function: AUI_destroy + + $Description: Destroys the specified WAP windows and their data + + $Returns: void + + $Arguments: win - pointer to the browser window + windows - determines which windows will be destroyed. + (e.g. LIST_WIN | EDIT_WIN | OPTIONS_WIN | WAP_WIN) + +*******************************************************************************/ + +void AUI_destroy (T_MFW_HND win, USHORT windows) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT entryIndex; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy"); +#endif + + if (data==NULL) + { + TRACE_EVENT("*** Could not destroy data ***"); + return; + } + + /* If we are closing the browser or exiting WAP, disconnect the call */ + + if ((windows & WAP_WIN) || (windows==RETURN_TO_MENU)) + { + if (data->View) + { + AUI_wap_end_call(data->View->cId); + } + else + { + AUI_wap_end_call(0); + } + } + + /* Check to see if WAP Browser Window should be destroyed */ + + if ((windows & BROWSER_WIN) && (data->browser_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy browser"); +#endif + + /* Destroy the browser window */ + + AUI_win_destroy(data->browser_win); + data->browser_win = NULL; + + /* Write history list to FFS */ + + ATB_wap_profile_save(data->View); + } + + /* Check to see if Connection Dialog should be destroyed */ + + if ((windows & CONNECT_WIN) && (data->connect_win != NULL)) + { + SEND_EVENT(data->connect_win,DIALOG_DESTROY,0,0); + data->connect_win = NULL; + } + + /* Check to see if WAP Main Menu should be destroyed */ + + if ((windows & MENU_WIN) && (data->menu_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy menu"); +#endif + bookMenuDestroy(data->menu_win); + data->menu_win = NULL; + } + + /* Check to see if Options Menu should be destroyed */ + + if ((windows & OPTIONSMENU_WIN) && (data->optionsmenu_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy optionsmenu"); +#endif + /* WAP page can now update */ + + data->update_forbid = FALSE; + + /* Remove all options list entries */ + + for (entryIndex=0; entryIndex<(data->OptionsList->no_of_entries); entryIndex++) + { + if (data->OptionsList->Entry[entryIndex]!=NULL) + { + AUI_wap_memory_free((UBYTE *)data->OptionsList->Entry[entryIndex], (SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); + data->OptionsList->Entry[entryIndex] = NULL; + } + } + + /* Destroy the list itself */ + + if (data->optionsmenu_data) + { + AUI_wap_memory_free((UBYTE *)data->optionsmenu_data->List, (data->optionsmenu_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); + AUI_wap_memory_free((UBYTE *)data->optionsmenu_data, sizeof(ListMenuData)); + data->optionsmenu_data = NULL; + } + + listsDestroy(data->optionsmenu_win); + data->optionsmenu_win = NULL; + } + + /* Check to see if List Window should be destroyed */ + + if ((windows & LIST_WIN) && (data->list_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_destroy list"); +#endif + if (data->list_data) + { + AUI_wap_memory_free((UBYTE *)data->list_data->List, (data->list_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); + AUI_wap_memory_free((UBYTE *)data->list_data, sizeof(ListMenuData)); + data->list_data = NULL; + } + listsDestroy(data->list_win); + data->list_win = NULL; + } + + /* Check to see if Options Window should be destroyed */ + + if ((windows & OPTIONS_WIN) && (data->options_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy options"); +#endif + bookMenuDestroy(data->options_win); + data->options_win = NULL; + } + + /* Check to see if Editor should be destroyed */ + + if ((windows & EDIT_WIN) && (data->edit_win != NULL)) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy editor"); +#endif + +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->edit_win); +#else + editor_destroy(data->edit_win); +#endif /* NEW_EDITOR */ + data->edit_win = NULL; + } + + /* Check to see if WAP Application should be destroyed */ + + if (windows & WAP_WIN) + { +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy WAP"); +#endif + /* Turn off GPRS notificaton */ +#ifdef MMI_GPRS_ENABLED + GPRS_SetCallback(NULL, NULL); +#endif /* MMI_GPRS_ENABLED */ + + /* Destroy the error dialog if it exists */ + + if (data->error_win) + { + SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0); + data->error_win = NULL; + } + + /* Display "Please wait" dialog; WAP destroy will complete on callback */ + + if (!data->temp_win) + { + data->temp_win = AUI_please_wait(data->win); + } + + /* If there's a view around, prepare the cache to shut down */ + + if (data->View) + { + /* Set status to shutting down */ + ATB_wap_status_change(data->View, ATB_WAP_SHUTTING_DOWN); + ATB_wap_cache_prepare(); + } + else /* No view exists, destroy WAP straight away */ + { + ATB_wap_destroy(); + } + } + + /* If all windows have been destroyed except main window, + * recreate menu */ + + if (windows==RETURN_TO_MENU) + { + AUI_wap_new_view_done(); + } + +#ifdef TRACE_AUIWAP + TRACE_EVENT("AUI_destroy end"); +#endif + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_cache_prepare_done + + $Description: Cache is prepared for WAP_TERMINATE + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_cache_prepare_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_cache_prepare_done()"); + + if (!data) + { + return; + } + + /* If we're shutting down, continue the process */ + + if (ATB_wap_status_get(data->View, ATB_WAP_SHUTTING_DOWN)) + { + TRACE_EVENT("We are shutting down"); + ATB_wap_destroy(); + } + else + { + /* Otherwise, the cache is being resized */ + TRACE_EVENT("*** CACHE RESIZE ***"); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_close_view_done + + $Description: Called when a view has been closed + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_close_view_done(void) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_close_view_done"); +#endif + + ATB_wap_destroy(); +} + + +/******************************************************************************* + + $Function: AUI_wap_terminate_done + + $Description: Called when a WAP termination is complete + + $Returns: void + + $Arguments: None + +*******************************************************************************/ + +void AUI_wap_terminate_done(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_terminate_done()"); +#endif + + if (!data) + { + return; + } + + if (data!=NULL) + { + if (data->temp_win) + { + SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL); + data->temp_win = NULL; + } + + /* Free memory for some message strings */ + + AUI_wap_memory_free ((UBYTE *)data->Buffer, (INPUT_MAX_LEN+1)*sizeof(USHORT)); /* Delete input buffer 1 */ + AUI_wap_memory_free ((UBYTE *)data->Buffer2, (INPUT_MAX_LEN+1)*sizeof(USHORT)); /* Delete input buffer 2 */ + AUI_wap_string_free(&data->Message); /* Delete output buffer */ + AUI_wap_memory_free ((UBYTE *)data->LeftSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); /* Delete left softkey text */ + AUI_wap_memory_free ((UBYTE *)data->RightSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); /* Delete right softkey text */ + + /* Destroy options menu list */ + + ATB_wap_entry_list_destroy(data->OptionsList); + + /* Destroy the WAP data window */ + + win_delete(data->win); + wap_main_window = 0; + AUI_wap_memory_free ((UBYTE *)data, sizeof (T_WAP_DATA)); + } + +#ifdef TRACE_MEMALLOC +{ +UBYTE trackIndex; + for (trackIndex = 0; trackIndex<110; trackIndex++) + { + TRACE_EVENT_P2("TRACKINDEX %d is %d", trackIndex, memTracker[trackIndex]); + } +} +#endif + + return; +} + + +/******************************************************************************* + + $Function: AUI_cb + + $Description: Callback function for WAP data window. This window displays "not + connected", since its appearance means a connection failure has + occurred. Apart from this, all information to be displayed should be + in the other WAP windows (browser window, options window etc). + + $Returns: void + + $Arguments: event - window handle event + win - WAP browser window + +*******************************************************************************/ + +static int AUI_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_cb"); +#endif + + switch (event) + { + case E_WIN_VISIBLE: + if (win->flags & E_WIN_VISIBLE) + { + dspl_ClearAll(); + /* If this screen is displayed, the connection has been + * terminated, so display 'Not Connected' */ + PROMPT(4,12,0, TxtNotConnected); + displaySoftKeys(TxtReload,TxtExit); + } + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_main_kbd_cb + + $Description: Cope with a keypress from the "Not Connected" screen. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: event, keyboard - standard keyboard callback arguments + +*******************************************************************************/ + +static int AUI_main_kbd_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_main_kbd_cb()"); +#endif + + if (!data) + { + return; + } + + switch (keyboard->code) + { + case KCD_HUP: + case KCD_RIGHT: + AUI_destroy(data->win, RETURN_TO_MENU); + break; + + case KCD_LEFT: + AUI_connect_URL(data->win, data->View->URL); + break; + + default: + break; + } + + return MFW_EVENT_CONSUMED; +} + + + +/******************************************************************************* + + $Function: AUI_control + + $Description: Dialog function for WAP data window. Since this window only + displays the "not connected" message, currently this function can + only show the window. + + $Returns: void + + $Arguments: win - WAP data window + event - Window handle event + value - not used + parameter - not used + +*******************************************************************************/ + +void AUI_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_control"); +#endif + + switch (event) + { + case WAP_INIT: + win_show(win); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_connecting_dialog + + $Description: Show "Connecting..." dialog (displayed while sending configuration + information to WAP gateway) + + $Returns: Window handler + + $Arguments: win - pointer to the WAP data window + +*******************************************************************************/ + +T_MFW_HND AUI_connecting_dialog (T_MFW_HND win, ULONG status) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + int timer; + T_MFW_EVENT keyEvents; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connecting_dialog"); +#endif + + if (!data) + { + return; + } + + /* Standard values for events */ + + timer = FOREVER; + keyEvents = KEY_CLEAR | KEY_RIGHT; + + /* Decide on message to display depending on status */ + + switch(status) + { + case ATB_WAP_ATTACHING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtAttaching, TxtGPRS, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_LOGGING_IN: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtConnecting, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_CONNECTING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtLoggingIn, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN); + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_CARD_READING: + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP); + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1); /* +1 space for 0x80 */ + data->Message.text[0] = 0x7F80; + ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN); + /* Show name of card being read */ + display_info.TextString2 = (char *)data->Message.text; + break; + + case ATB_WAP_DEACTIVATING: + /* Waiting for context to deactivate, dialog with no cancel button */ + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP); + timer = TEN_SECS; + keyEvents = 0; + break; + + case ATB_WAP_PLEASE_WAIT: + default: + dlg_initDisplayData_TextId(&display_info, TxtNull, TxtCancel, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP); + break; + } + + /* Destroy any previous dialog */ + + AUI_destroy(data->win, CONNECT_WIN); + + /* Create new dialog */ + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_connecting_dialog_cb, timer, keyEvents ); + + return info_dialog(data->win, &display_info); +} + + +/******************************************************************************* + + $Function: AUI_connecting_dialog_cb + + $Description: Callback function for connecting dialog + + $Returns: void + + $Arguments: win - pointer to the WAP data window + identifier - identifies function that has called callback + reason - reason for callback + +*******************************************************************************/ + +void AUI_connecting_dialog_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connecting_dialog_cb"); +#endif + + /* Dialog has been destroyed, set handle to NULL */ + + data->connect_win = NULL; + + /* Free memory allocated for status message */ + + AUI_wap_string_free(&data->Message); + + switch(reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + /* If browser is active, completely exit WAP. + * Otherwise, just return to last menu. */ + + if (data->browser_win) + { + AUI_destroy(data->win, RETURN_TO_MENU); + } + else + { + /* Cancel any pending operation */ + ATB_wap_stop_download(data->View); + /* End the call. */ + AUI_wap_end_call(data->View->cId); + /* Indicate we're no longer connected */ + if (!ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING)) + { + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + } + } + break; + + default: + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_connect_URL + + $Description: Connects to WAP gateway (if required) and starts to download URL + + $Returns: None. + + $Arguments: win - pointer to the WAP data window + URL - URL to connect to + +*******************************************************************************/ + +void AUI_connect_URL (T_MFW_HND win, char *URL) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connect_URL"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + /* If the browser is already visible, we can destroy the other windows */ + + if (data->browser_win) + { + AUI_destroy(data->win, LIST_WIN | MENU_WIN | OPTIONSMENU_WIN | EDIT_WIN | OPTIONS_WIN); + } + + /* Display "Please Wait" to cover delay until call dialog is displayed. + * Only display "Please Wait" if browser window is not open. */ + + if (!data->browser_win || !data->connected) + { + ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); + } + + /* If we're not connected, send configuration data to WAP Browser */ + + if (!data->connected) + { + ATB_wap_profile_send(View); + } + + /* This is now the current URL */ + + strcpy(View->URL, URL); + + /* Send event requesting URL download */ + + ATB_wap_download_url(View, URL, TRUE); + + /* Destroy some windows for now; we want to return to the list win + * if the connection is cancelled */ + + AUI_destroy(data->win, OPTIONS_WIN | EDIT_WIN); + + return; +} + + +/******************************************************************************* + + $Function: AUI_win_create + + $Description: Create the WAP card browser window + + $Returns: void + + $Arguments: parent_win - Pointer to the WAP data window + +*******************************************************************************/ + +T_MFW_HND AUI_win_create (T_MFW_HND parent_win) +{ + T_MFW_WIN *win_data; + T_WAP_BROWSER *data = (T_WAP_BROWSER *)AUI_wap_memory_alloc(sizeof(T_WAP_BROWSER)); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_create"); +#endif + + /* Create the browser window */ + + data->win = win_create(parent_win,0,E_WIN_VISIBLE, (T_MFW_CB)AUI_win_cb); + + /* Create keyboard handler */ + + data->kbd = kbd_create (data->win, KEY_ALL, (T_MFW_CB)AUI_kbd_cb); + data->kbd_long = kbd_create (data->win, KEY_ALL|KEY_LONG, (T_MFW_CB)AUI_kbd_long_cb); + + /* Create window handler */ + + data->mmi_control.dialog = (T_DIALOG_FUNC)AUI_win_control; + data->mmi_control.data = (void *)data; + data->parent_win = parent_win; + win_data = ((T_MFW_HDR *)data->win)->data; + win_data->user = (void *)data; /* Attach browser data to window */ + + return data->win; +} + + +/******************************************************************************* + + $Function: AUI_win_destroy + + $Description: Destroy the WAP card browser window + + $Returns: void + + $Arguments: win - Pointer to the WAP browser window + +*******************************************************************************/ + +int AUI_win_destroy (T_MFW_HND win) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_WAP_BROWSER *data = (T_WAP_BROWSER *)win_data->user; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_destroy"); +#endif + + /* Delete keyboard handlers */ + + kbd_delete(data->kbd); + kbd_delete(data->kbd_long); + + /* Delete window */ + + win_delete(win); + AUI_wap_memory_free((UBYTE *)data, sizeof(T_WAP_BROWSER)); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_win_control + + $Description: Dialog function for WAP Browser window + + $Returns: None. + + $Arguments: win - WAP card browser window + event - Window handle event + value - not used + parameter - not used + +*******************************************************************************/ + +void AUI_win_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_WAP_BROWSER *data = (T_WAP_BROWSER *)win_data->user; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_control"); +#endif + + switch (event) + { + case WAP_INIT: + break; + + case WAP_SHOW_CARD: + win_show(win); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_win_cb + + $Description: Callback function for browser window + + $Returns: None. + + $Arguments: event - window handle event + win - WAP browser window + +*******************************************************************************/ + +static int AUI_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_win_cb"); +#endif + + if (!data) + { + return NULL; + } + + if (data->update_forbid) + { + return NULL; + } + + switch (event) + { + case E_WIN_VISIBLE: + if (win->flags & E_WIN_VISIBLE) + { + /* Clear the browser area */ + + resources_setColour( COLOUR_WAP ); + dspl_ClearAll(); + + /* Display the buffered page */ + + ATB_wap_buffer_display(data->View); + + /* Display softkeys */ + + resources_setSKColour( COLOUR_WAP ); + + /* Display "Cancel" when downloading or reading in a card */ + if (ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING) + || ATB_wap_status_get(data->View, ATB_WAP_CARD_READING)) + { + displaySoftKeys(TxtNull, TxtCancel); + } + else + { + if (data->View->CustSoftKeys) + { + displayCustSoftKeys((char *)data->LeftSoftKey, (char *)data->RightSoftKey); + } + else + { + if (data->View->CanGoBack) + displaySoftKeys(TxtSoftOptions, TxtSoftBack); /* Show "options" and "back" */ + else + displaySoftKeys(TxtSoftOptions, TxtNull); /* Only show "options" if we can't go back */ + } + } + } + break; + + default: + return 0; + } + return 1; +} + + +/******************************************************************************* + + $Function: AUI_kbd_cb + + $Description: Keyboard event handler for browser window + + $Returns: status int + + $Arguments: event - window handle event + keyboard - keyboard control block + +*******************************************************************************/ + +static int AUI_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_kbd_cb"); +#endif + + if (!data) + { + return NULL; + } + + View = data->View; + + switch (keyboard->code) + { + case KCD_LEFT: + /* Open options menu if not downloading or reading a card */ + if (!ATB_wap_status_get(View, ATB_WAP_DOWNLOADING) + && !ATB_wap_status_get(View, ATB_WAP_CARD_READING)) + { + AUI_wap_options_menu_open(ATB_wap_buffer_identify_element(View)); + } + break; + + case KCD_RIGHT: + /* Open options menu if not downloading or reading a card */ + if (ATB_wap_status_get(View, ATB_WAP_DOWNLOADING) + || ATB_wap_status_get(View, ATB_WAP_CARD_READING)) + { + ATB_wap_stop_download(View); + } + else + { + if (View->CustSoftKeys) + ATB_wap_key_selected(View, View->CustSoftKeyId); /* Customised right soft key */ + else + ATB_wap_card_go_back(View); /* Otherwise default is "Back" */ + } + break; + + /* Scroll card up */ + + case KCD_MNUUP: + ATB_wap_card_key_event(View, WAP_KEY_UP); + break; + + /* Scroll card down */ + + case KCD_MNUDOWN: + ATB_wap_card_key_event(View, WAP_KEY_DOWN); + break; + + /* Scroll card left */ + + case KCD_MNULEFT: + case KCD_1: + ATB_wap_card_key_event(View, WAP_KEY_LEFT); + break; + + /* Scroll card right */ + + case KCD_MNURIGHT: + case KCD_3: + ATB_wap_card_key_event(View, WAP_KEY_RIGHT); + break; + + /* Top of card */ + + case KCD_2: + ATB_wap_card_scroll(View,0); + break; + + /* Scroll up a page */ + + case KCD_5: + ATB_wap_card_scroll(View,View->cardYPosition-WAP_PAGE_SCROLL); + /* SPR#2266 - SH - Sending 'key up' has the effect of selecting the bottom available + * link on the scrolled page */ + ATB_wap_card_key_event(View, WAP_KEY_UP); + break; + + /* Scroll down a page */ + + case KCD_8: + ATB_wap_card_scroll(View,View->cardYPosition+WAP_PAGE_SCROLL); + /* SPR#2266 - SH - Sending 'key down' has the effect of selecting the top available + * link on the scrolled page */ + ATB_wap_card_key_event(View, WAP_KEY_DOWN); + break; + + /* Bottom of card */ + + case KCD_0: + ATB_wap_card_scroll(View,View->cardHeight-WAP_SCREEN_HEIGHT); + break; + + /* Select*/ + + case KCD_MNUSELECT: + case KCD_CALL: + ATB_wap_card_key_event(View, WAP_KEY_SELECT); + break; + + /* Exit WAP */ + + case KCD_HUP: + ATB_wap_stop_download(View); + AUI_destroy(data->win,RETURN_TO_MENU); + break; + + /* Toggle image scaling */ + + case KCD_STAR: + View->Status ^= WAP_STATUS_SCALEIMAGES; + ATB_wap_profile_save(data->View); + ATB_wap_card_refresh(View); + break; + + default: + break; + } + return MFW_EVENT_CONSUMED; +} + + +static int AUI_kbd_long_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard) +{ + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_goto_www + + $Description: Opens up a text edit screen for entering URLs with "www." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_www(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_www"); +#endif + + AUI_edit(GET_TEXT(TxtWWWdot),WAP_GOTO_URL,TxtEnterURL,URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_goto_wap + + $Description: Opens up a text edit screen for entering URLs with "wap." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_wap(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_wap"); +#endif + + AUI_edit(GET_TEXT(TxtWAPdot),WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: MMI_AUI_goto_other + + $Description: Opens up a blank text edit screen for entering URLs + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_goto_other(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_other"); +#endif + + AUI_edit("",WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_edit + + $Description: Opens up a text edit screen for editing URLs + + $Returns: + + $Arguments: shortcut - pointer to a string that will appear in the editor + identifier - specifies what to do with the URL (connect, store etc). + prompt - textId of prompt to display + maxlen - maximum length of the edited string + +*******************************************************************************/ + +int AUI_edit(char *shortcut, USHORT identifier, USHORT prompt, USHORT maxlen) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit"); +#endif + + if (!data) + { + return; + } + + /* Ensure requested buffer size is not too big */ + + if (maxlen>INPUT_MAX_LEN) + maxlen = INPUT_MAX_LEN; + + /* 'shortcut' is what is placed into the buffer before editing */ + + if (identifier==WAP_EDIT_HOMEPAGE) + shortcut = data->View->Profile->Homepage; + + if (identifier==WAP_EDIT_APN) + shortcut = data->View->Profile->APN; + + + if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY) + { + /* Clear editor for name */ +#ifdef NEW_EDITOR + ATB_uc_text_copy((USHORT *)data->Buffer, (USHORT *)shortcut, CARD_TITLE_MAX_LEN); + AUI_edit_create(data->win, identifier, prompt, maxlen, TRUE); +#else + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN); + AUI_edit_create(data->win, identifier, prompt, maxlen*2+2, TRUE); +#endif + } + else + { + strcpy(data->Buffer, shortcut); + AUI_edit_create(data->win, identifier, prompt, maxlen, FALSE); + } + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_edit_create + + $Description: Creates the edit screen + + $Returns: none. + + $Arguments: parent_win - the originating window + identifier - purpose for edit window (e.g. go to URL) + prompt - textId of prompt to display + maxlen - maximum length of the editor + unicode - TRUE if editor is unicode + +*******************************************************************************/ + +static T_MFW_HND AUI_edit_create(MfwHnd parent_win, USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit_create"); +#endif + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA, prompt, (T_AUI_EDIT_CB)AUI_edit_cb); + + if (unicode) + { + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, maxlen); + } + else + { + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, maxlen); + } + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb); + editor_data.TextId = prompt; /* Prompt to display above editor */ + editor_data.Identifier = identifier; /* Purpose of edit window (for callback) */ + + data->edit_win = editor_start(data->win,&editor_data); +#endif /* NEW_EDITOR */ + + return data->edit_win; +} + + +/******************************************************************************* + + $Function: AUI_edit_cb + + $Description: Callback function for edit screen. This performs the following functions, + the user having provided a new or updated URL: + + - Goto URL + - Editing of Bookmark and History entries + - Add new bookmark + - Edit homepage + + $Returns: void + + $Arguments: win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_edit_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_edit_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch (reason) + { + case INFO_KCD_LEFT: + switch (identifier) + { + /* Go to URL */ + + case WAP_GOTO_URL: + AUI_connect_URL(data->win, data->Buffer); + break; + + /* Edit Bookmark name */ + + case WAP_EDIT_BOOKMARK: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ +#ifdef NEW_EDITOR + ATB_wap_entry_change(View->Bookmarks, data->Buffer, data->OptionSelect); +#else /* NEW_EDITOR */ + ATB_wap_entry_change(View->Bookmarks, &data->Buffer[2], data->OptionSelect); +#endif /* NEW_EDITOR */ + ATB_wap_profile_save(View); + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged); + break; + + /* Edit Bookmark URL */ + + case WAP_EDIT_BOOKMARK_URL: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ + ATB_wap_entry_change(View->BookmarksURL, data->Buffer, data->OptionSelect); + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged); /* Display "Changed" message */ + break; + + /* Edit History name */ + + case WAP_EDIT_HISTORY: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ +#ifdef NEW_EDITOR + ATB_wap_entry_change(View->History, data->Buffer, data->OptionSelect); +#else /* NEW_EDITOR */ + ATB_wap_entry_change(View->History, &data->Buffer[2], data->OptionSelect); +#endif /* NEW_EDITOR */ + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged); /* Display "Changed" message */ + break; + + /* Edit History URL */ + + case WAP_EDIT_HISTORY_URL: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ + ATB_wap_entry_change(View->HistoryURL, data->Buffer, data->OptionSelect); + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged); /* Display "Changed" message */ + break; + + /* Add Bookmark */ + + case WAP_ADD_BOOKMARK: + AUI_destroy(data->win, EDIT_WIN); /* Destroy editor */ + strcpy(data->Buffer2, data->Buffer); /* Store URL in second buffer */ + /* Clear editor for name */ +#ifdef NEW_EDITOR + data->Buffer[0] = 0; + data->Buffer[1] = 0; +#else /* NEW_EDITOR */ + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + data->Buffer[2] = 0; + data->Buffer[3] = 0; +#endif /* NEW_EDITOR */ + AUI_edit_create(data->win, WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN, TRUE); + break; + + /* Add Bookmark name */ + + case WAP_ADD_BOOKMARK_NAME: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ + if (ATB_wap_entry_add(View->BookmarksURL, data->Buffer2)==WAP_FAIL) /* Add URL entry */ + { + AUI_info_dialog(data->win, TxtBookmarks, TxtFull); /* If list is full, say so */ + } + else + { +#ifdef NEW_EDITOR + ATB_wap_entry_add(View->Bookmarks, data->Buffer); +#else /* NEW_EDITOR */ + ATB_wap_entry_add(View->Bookmarks, &data->Buffer[2]); +#endif /* NEW_EDITOR */ + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtStored); + } + break; + + /* Edit Homepage URL */ + + case WAP_EDIT_HOMEPAGE: + strcpy(View->Profile->Homepage, data->Buffer); /* Change the homepage */ + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_destroy(data->win, EDIT_WIN); /* Kill the editor */ + AUI_info_dialog(data->win, TxtChanged, NULL); /* "Changed" */ + break; + + /* Edit APN */ + + case WAP_EDIT_APN: + strcpy(View->Profile->APN, data->Buffer); /* Change the homepage */ + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_destroy(data->win, EDIT_WIN); + AUI_info_dialog(data->win, TxtChanged, NULL); /* "Changed" */ + break; + + default: + break; + } + break; + + /* RSK or HUP key exits menu */ + + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: /* (Exit from Editor) */ + AUI_destroy(data->win,EDIT_WIN); /* Destroy edit window */ + if (identifier == WAP_ADD_BOOKMARK_NAME) /* If we've destroyed the name editor, */ + { + strcpy(data->Buffer, data->Buffer2); /* copy the URL back into the editor */ + AUI_edit_create(data->win, WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN, FALSE); + } + break; + + default: + break; + } + + return; +} + +/******************************************************************************* + + $Function: AUI_list_redraw + + $Description: When changing, adding, or deleting bookmarks or history list items, + this function is called to display the appropriate dialog. On callback, + the AUI_list_redraw_cb() function redraws the appropriate list. + + $Returns: None. + + $Arguments: list - The type of list to be redrawn + TxtId - The text string to be displayed in a dialog for 3s + +*******************************************************************************/ + +static void AUI_list_redraw(USHORT list, USHORT TxtId) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + + if (!data) + { + return; + } + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_list_redraw_cb, THREE_SECS, 0 ); + display_info.Identifier = list; + + info_dialog(data->win, &display_info); + + return; +} + + +/******************************************************************************* + + $Function: AUI_list_redraw_cb + + $Description: Called when a 3s info dialog times out: the appropriate list is + redrawn (history, bookmarks). + + $Returns: None. + + $Arguments: win - the parent window + identifier - stores the type of list + reson - not used. + +*******************************************************************************/ + +static void AUI_list_redraw_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_list_redraw_cb()"); + + if (!data) + { + return; + } + + /* SPR#2324 - SH - Kill any residual list, editor or options window */ + + AUI_destroy(data->win, LIST_WIN | EDIT_WIN | OPTIONS_WIN); + + /* Redraw the appropriate list */ + + switch(identifier) + { + case WAP_BOOKMARKS_LIST: + AUI_entry_list(data->win, data->View->Bookmarks, (ListCbFunc)AUI_bookmarks_list_cb,0); + break; + + case WAP_HISTORY_LIST: + AUI_entry_list(data->win, data->View->History, (ListCbFunc)AUI_history_list_cb,0); + break; + + /* SPR#2324 - SH - Cursor now indicates current profile */ + case WAP_PROFILES_LIST: + AUI_entry_list(data->win, data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb, data->View->ProfileId); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add + + $Description: New bookmark menu item. Checks to see if bookmarks are full; + if so, displays message and exits. Otherwise, brings up usual + new bookmark shortcut menu. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_NEW_VIEW_IND wap_view; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_start_done"); +#endif + + if (!data) + { + return; + } + + /* If there is space in the bookmarks list */ + + if (data->View->Bookmarks->no_of_entries < data->View->Bookmarks->max_entries) + { + /* Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(data->win, OPTIONS_WIN); + } + /* Create Add Bookmark Menu */ + data->options_win = bookMenuStart(data->win, WAPNewBookmarkAttributes(), 0); + } + else + { + AUI_info_dialog(data->win, TxtBookmarks, TxtFull); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_www + + $Description: Opens up a text edit screen for entering URLs with "www." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_www(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_www"); +#endif + + AUI_edit(GET_TEXT(TxtWWWdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_wap + + $Description: Opens up a text edit screen for entering URLs with "wap." entered. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_wap(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_wap"); +#endif + + AUI_edit(GET_TEXT(TxtWAPdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_add_other + + $Description: Opens up a blank text edit screen for entering URLs + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_add_other(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_add_other"); +#endif + + AUI_edit("",WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_list + + $Description: List Bookmarks menu option + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_list(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_list"); +#endif + + if (!data) + { + return 0; + } + + /* Create the list menu */ + + AUI_entry_list(data->win, data->View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_list_cb + + $Description: Callback function for bookmarks list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of bookmarks list + +*******************************************************************************/ + +static void AUI_bookmarks_list_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_list_cb"); + TRACE_EVENT_P1("Exit reason: %d", EntryListData->Reason); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + + data->OptionSelect = EntryListData->ListPosition; /* Store selected bookmark no. */ + data->URLSelect = View->BookmarksURL->Entry[data->OptionSelect]; /* Store the URL of the bookmark */ + + /* Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(data->win, OPTIONS_WIN); + } + data->options_win = bookMenuStart(win, WAPBookOptMenuAttributes(), 0); /* Create bookmark options menu */ + break; + + case LISTS_REASON_SEND: + data->OptionSelect = EntryListData->ListPosition; /* Store selected bookmark no. */ + data->URLSelect = View->BookmarksURL->Entry[data->OptionSelect]; /* Store the URL of the bookmark */ + + AUI_connect_URL(data->win, data->URLSelect); /* The selected menu item is the new URL */ + break; + + case LISTS_REASON_CLEAR: + case LISTS_REASON_HANGUP: + case LISTS_REASON_BACK: /* Exit list menu */ + AUI_destroy(data->win,LIST_WIN); /* Kill the list window */ + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_goto + + $Description: Open up the selected bookmark in the WAP browser + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_goto(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_goto"); +#endif + + return AUI_entry_goto(WAP_BOOKMARKS_LIST); +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_edit + + $Description: Edit the name of the selected bookmark + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + char *Entry; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_edit()"); +#endif + + if (!data) + { + return 0; + } + + Entry = data->View->Bookmarks->Entry[data->OptionSelect]; /* The bookmark name to be edited */ + + AUI_edit(Entry, WAP_EDIT_BOOKMARK, TxtEditName, CARD_TITLE_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_edit_url + + $Description: Edit the URL of the selected bookmark + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_edit_url(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + char *Entry; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_edit_url()"); +#endif + + if (!data) + { + return 0; + } + + Entry = data->View->BookmarksURL->Entry[data->OptionSelect]; /* The bookmark URL to be edited */ + + AUI_edit(Entry, WAP_EDIT_BOOKMARK_URL, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_delete + + $Description: Delete the selected bookmark from the bookmarks list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_bookmarks_delete(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_delete"); +#endif + + AUI_entry_delete(WAP_DELETE_BOOKMARK); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_bookmarks_sendSMS + + $Description: Open up a bookmark in an SMS write editor + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_bookmarks_sendSMS(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_sendSMS"); +#endif + + AUI_entry_sendSMS(); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_list + + $Description: List History menu option + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_history_list(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + char *Entry; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_list()"); +#endif + + if (!data) + { + return 0; + } + + /* Create the history list menu */ + + AUI_entry_list(data->win, data->View->History, (ListCbFunc) AUI_history_list_cb,0); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_list_cb + + $Description: Callback function for history list menu + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of history lsit + +*******************************************************************************/ + +static void AUI_history_list_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_list_cb()"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + + data->OptionSelect = EntryListData->ListPosition; /* Store selected history entry no.*/ + data->URLSelect = View->HistoryURL->Entry[data->OptionSelect]; /* Store the URL of the history entry*/ + + /* Destroy any previous options menu existing */ + + if (data->options_win) + { + AUI_destroy(data->win, OPTIONS_WIN); + } + + /* Create history options menu */ + + data->options_win = bookMenuStart(data->win, WAPHistOptMenuAttributes(), 0); + break; + + case LISTS_REASON_SEND: + data->OptionSelect = EntryListData->ListPosition; /* Store selected bookmark no..*/ + data->URLSelect = View->HistoryURL->Entry[data->OptionSelect]; /* Store the URL of the bookmark.*/ + + /* Download the selected page */ + + AUI_connect_URL(data->win, data->URLSelect); + break; + + case LISTS_REASON_BACK: /* Exit menu */ + AUI_destroy(data->win,LIST_WIN); /* Destroy list window */ + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_history_goto + + $Description: Open up the selected history entry in the WAP browser + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_goto(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_goto"); +#endif + + return AUI_entry_goto(WAP_HISTORY_LIST); +} + + +/******************************************************************************* + + $Function: AUI_history_edit + + $Description: Edit the name of the selected history entry + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + USHORT *EntryUC; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_edit"); +#endif + + if (!data) + { + return 0; + } + + /* Edit string after NUMBER_PADDING */ + + EntryUC = (USHORT *)data->View->History->Entry[data->OptionSelect]; + + AUI_edit((char *)&EntryUC[NUMBER_PADDING], WAP_EDIT_HISTORY, TxtEditName, CARD_TITLE_MAX_LEN); + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_edit_url + + $Description: Edit the URL of the selected history entry + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_edit_url(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + char *Entry; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_bookmarks_edit()"); +#endif + + if (!data) + { + return 0; + } + + Entry = data->View->HistoryURL->Entry[data->OptionSelect]; + + AUI_edit(Entry, WAP_EDIT_HISTORY_URL, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_delete + + $Description: Delete the selected entry from the history list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_delete(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_delete"); +#endif + + AUI_entry_delete(WAP_DELETE_HISTORY); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_history_clear + + $Description: Deletes all entries in history list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_clear(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_clear"); +#endif + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtExit, TxtOkToDelete, TxtNull, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); + display_info.Identifier = WAP_CLEAR_HISTORY; + info_dialog(data->win, &display_info); + return 1; +} + + +/******************************************************************************* + + $Function: AUI_history_addbook + + $Description: Adds a history item to the bookmarks list + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_history_addbook(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + USHORT *EntryUC; + char *URL; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_addbook()"); +#endif + + if (!data) + { + return 0; + } + + View = data->View; + + /* Add string after NUMBER_PADDING in unicode */ + + EntryUC = (USHORT *)View->History->Entry[data->OptionSelect]; /* Text of the history entry */ + URL = View->HistoryURL->Entry[data->OptionSelect]; /* URL of the entry */ + + /* Try to add history item to bookmarks */ + + if (ATB_wap_entry_add(View->Bookmarks, (char *)&EntryUC[NUMBER_PADDING])==NULL) + { + AUI_info_dialog(data->win, TxtBookmarks, TxtFull); /* if it's full, say "Bookmarks Full" */ + } + else + { + ATB_wap_entry_add(View->BookmarksURL, URL); + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtStored, NULL); /* Display "Stored" message */ + } + return 1; +} + + +/******************************************************************************* + + $Function: AUI_history_sendSMS + + $Description: Open up a history entry in an SMS write editor + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_history_sendSMS(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_history_sendSMS"); +#endif + + AUI_entry_sendSMS(); + + return MFW_EVENT_CONSUMED; +} + + +/* SPR#2324 - SH - Removed AUI_profiles_list */ + + +/******************************************************************************* + + $Function: AUI_profiles_setup + + $Description: Lists names of all profiles in flash, in order to change settings + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profiles_setup(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_setup"); +#endif + + if (!data) + { + return 0; + } + + View = data->View; + + /* Create the profile list menu + * SPR#2324 - SH - Don't store current profile yet */ + + AUI_entry_list(data->win, View->ProfilesList, (ListCbFunc) AUI_profiles_setup_cb, View->ProfileId); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profiles_setup_cb + + $Description: Callback function for profiles list menu + SPR#2324 - SH - Changed menu behaviour + + $Returns: void + + $Arguments: win - WAP data window + EntryListData - list menu data of profiles list + +*******************************************************************************/ + +static void AUI_profiles_setup_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_setup_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + data->OptionSelect = EntryListData->ListPosition; /* The id of the selected profile */ + + switch(EntryListData->Reason) + { + case LISTS_REASON_SEND: + case LISTS_REASON_SELECT: + /* The user has chosen a profile. Store the original profile ID */ + data->profile_store = data->View->ProfileId; + + /* If it's different from the original, read in the new profile. */ + + if (data->OptionSelect!=data->View->ProfileId) + { + ATB_wap_profile_read(View, data->OptionSelect); + } + + /* Destroy any previous options menu existing */ + + if (data->options_win) + { + AUI_destroy(data->win, OPTIONS_WIN); + } + data->options_win = bookMenuStart(data->win, WAPProfOptionsAttributes(), 0); + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_profiles_options_cb); + break; + + case LISTS_REASON_BACK: + AUI_destroy(data->win,LIST_WIN); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_profiles_options_cb + + $Description: Callback function for profiles options window + + $Returns: void + + $Arguments: win - WAP data window + identifier, reason - Not used + +*******************************************************************************/ + +static void AUI_profiles_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_options_cb"); +#endif + + if (!data) + { + return; + } + + data->options_win = NULL; + + /* If the edited profile is different from the selected profile, change back */ + + if (data->profile_store!=data->View->ProfileId) + { + ATB_wap_profile_read(data->View, data->profile_store); + /* Recreate list menu so it points to original profile */ + AUI_destroy(data->win, LIST_WIN); + AUI_entry_list(data->win, data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,data->profile_store); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_profile_select + + $Description: Profile is selected, return to main menu + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_select(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + /* Store the current profile */ + data->profile_store = data->View->ProfileId; + ATB_wap_profile_save(data->View); + + AUI_info_dialog(data->win, TxtChanged, TxtNull); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_change + + $Description: Bring up slightly different menus depending on whether profile is + GPRS or Dialup. + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_change(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + /* Only allow modification of the GPRS settings if GPRS is switched on */ +#ifdef GPRS + if (data->View->Profile->AccessType==WAP_GPRS_DATA) + { + data->sub_options_win = bookMenuStart(data->win, WAPGPRSProfileAttributes(), 0); + } + else +#endif + { + data->sub_options_win = bookMenuStart(data->win, WAPDialupProfileAttributes(), 0); + } + + SEND_EVENT(data->sub_options_win, ADD_CALLBACK, NULL, (void *)AUI_profile_change_cb); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_change_cb + + $Description: Callback function for profile change window + + $Returns: void + + $Arguments: Standard menu callback parameters + +*******************************************************************************/ + +static void AUI_profile_change_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profiles_options_cb"); +#endif + + if (!data) + { + return; + } + + data->sub_options_win = NULL; + + return; +} + + +/******************************************************************************* + + $Function: AUI_profile_delete + + $Description: Delete the highlighted profile + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_delete(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + + /* Don't let user delete last profile */ + + if (data->View->ProfilesList->no_of_entries==1) + { + AUI_info_dialog(data->win, TxtNotAllowed, TxtNull); + } + else + { + /* Present option to delete profile */ + AUI_entry_delete(WAP_DELETE_PROFILE); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_new + + $Description: Add a new profile + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_new(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE newProfileId; + + /* Check if profiles are full */ + + if (data->View->ProfilesList->no_of_entries==data->View->ProfilesList->max_entries) + { + AUI_info_dialog(data->win, TxtProfiles, TxtFull); + } + else + { + /* Add the profile */ + newProfileId = data->View->ProfilesList->no_of_entries; + ATB_wap_profile_default(newProfileId); + ATB_wap_entry_add(data->View->ProfilesList, data->View->ProfilesList->Entry[newProfileId]); + ATB_wap_profile_save(data->View); + AUI_list_redraw(WAP_PROFILES_LIST, TxtStored); + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_reset + + $Description: Reset profiles to default values + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_reset(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_reset"); +#endif + + if (!data) + { + return; + } + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtResetProfiles, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_profile_reset_cb, FIVE_SECS, KEY_LEFT | KEY_RIGHT | KEY_CLEAR | KEY_HUP ); + + info_dialog(data->parent_win, &display_info); + return; +} + + +/******************************************************************************* + + $Function: AUI_profile_reset_cb + + $Description: Callback from reset profiles dialog + + $Returns: None + + $Arguments: Standard info dialog callback arguments + +*******************************************************************************/ + +static void AUI_profile_reset_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_reset_cb"); +#endif + + if (!data) + { + return; + } + + switch(reason) + { + case INFO_KCD_LEFT: + AUI_destroy(data->win, LIST_WIN); + ATB_wap_profile_default_create(TRUE); + ATB_wap_profile_names_read(data->View); + ATB_wap_profile_read(data->View, data->View->ProfileId); + AUI_list_redraw(WAP_PROFILES_LIST, TxtReset); + break; + + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + break; + } + + return ; +} + + +/******************************************************************************* + + $Function: AUI_entry_list + + $Description: Create an entry list and store its pointer in list_win/list_data + + $Returns: pointer to list menu data + + $Arguments: win - the WAP data window + EntryList - pointer to entry list table + Callback - the callback function + pos - the default highlighted option + +*******************************************************************************/ + +static int AUI_entry_list (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_list"); +#endif + + if (!data) + { + return 0; + } + + /* Destroy previous list, if it exists */ + + if (data->list_win) + { + AUI_destroy(data->win, LIST_WIN); + } + + /* Create new list */ + + data->list_data = AUI_entry_list_create (data->win, EntryList, Callback, pos); + if (data->list_data) + data->list_win = data->list_data->win; /* Attach the resulting window to the data */ + else + { + data->list_win = NULL; /* No window created */ + } + return 1; +} + + +/******************************************************************************* + + $Function: AUI_entry_list_create + + $Description: Create an entry list for Bookmarks/History/Profiles, or options menu + + $Returns: pointer to list menu data + + $Arguments: win - the WAP data window + EntryList - pointer to bookmarks table + Callback - the callback function for the entry list + pos - the default highlighted option + +*******************************************************************************/ + +static ListMenuData * AUI_entry_list_create (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos) +{ + ListMenuData *EntryListData; + USHORT entryIndex; + USHORT no_of_entries = EntryList->no_of_entries; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_list_create"); +#endif + + /* If list is empty, display "Empty List */ + + if (no_of_entries==0) + { + AUI_info_dialog(win, TxtEmpty, NULL); + return NULL; + } + + /* Allocate memory for list data */ + + EntryListData = (ListMenuData *)AUI_wap_memory_alloc (sizeof(ListMenuData)); + + if (EntryListData==NULL) + return NULL; + + EntryListData->List = (T_MFW_MNU_ITEM *) AUI_wap_memory_alloc (no_of_entries*sizeof (T_MFW_MNU_ITEM)); + + if (EntryListData->List==NULL) + return NULL; + + /* Fill Menu List */ + + for (entryIndex=0; entryIndex < no_of_entries; entryIndex++) + { + mnuInitDataItem(&EntryListData->List[entryIndex]); + + if (EntryList->Entry[entryIndex]!=NULL) + EntryListData->List[entryIndex].str = (char *)EntryList->Entry[entryIndex]; /* Copy Entry into list */ + else + EntryListData->List[entryIndex].str = GET_TEXT(TxtEmpty); /* ...otherwise "Empty" */ + + EntryListData->List[entryIndex].flagFunc = item_flag_none; + } + + /* Fill common parameters for list handling */ + + EntryListData->ListLength = no_of_entries; + EntryListData->CursorPosition = 1; /* Starting position */ + EntryListData->ListPosition = pos+1; + if (pos>3) + EntryListData->CursorPosition = pos-3; /* Make sure highlight is on screen */ + EntryListData->SnapshotSize = 5; /* 5 entries on the screen at once */ + EntryListData->Font = 0; + + /* SPR#2324 - SH - Now only options list uses 'Select' */ + + if (EntryList->type==WAP_OPTIONS_LIST) // For these lists, left soft key is Select + EntryListData->LeftSoftKey = TxtSoftSelect; + else + EntryListData->LeftSoftKey = TxtSoftOptions; + + EntryListData->RightSoftKey = TxtSoftBack; + EntryListData->KeyEvents = KEY_ALL; + EntryListData->Reason = 0; + EntryListData->Strings = TRUE; /* Use strings not text ID's */ + EntryListData->Attr = &list_menuAttrib; + EntryListData->autoDestroy = FALSE; /* Don't destroy on exit */ + + /* Display the list */ + + listDisplayListMenu(win, EntryListData, (ListCbFunc)Callback,(UBYTE)EntryList->unicode); + + return EntryListData; +} + + +/******************************************************************************* + + $Function: AUI_entry_goto + + $Description: Open up the selected bookmark/history entry in the WAP browser + + $Returns: + + $Arguments: identifier - specifies whether history or bookmarks list + +*******************************************************************************/ + +int AUI_entry_goto(WAP_LIST_TYPE identifier) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_goto"); +#endif + + if (!data) + { + return 0; + } + + switch(identifier) + { + case WAP_BOOKMARKS_LIST: + case WAP_HISTORY_LIST: + AUI_connect_URL(data->win, data->URLSelect); + break; + } + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_entry_delete + + $Description: Delete the selected entry from the history/bookmarks list + + $Returns: + + $Arguments: identifier - specifies history list or bookmarks list + +*******************************************************************************/ + +int AUI_entry_delete(UBYTE identifier) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_delete"); +#endif + + if (!data) + { + return 0; + } + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT ); + display_info.Identifier= identifier; /* Type of list */ + + info_dialog(data->win, &display_info); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_entry_delete_cb + + $Description: Callback function for delete confirmation + + $Returns: + + $Arguments: win - WAP data window + identifier - Type of list + reason - reason for callback + +*******************************************************************************/ + +void AUI_entry_delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_delete_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch(identifier) + { + case WAP_DELETE_BOOKMARK: + switch (reason) + { + case INFO_KCD_LEFT: + /* Destroy the old list */ + + AUI_destroy(data->win, LIST_WIN); + + /* Delete the selected bookmark name and URL */ + + ATB_wap_entry_remove(View->Bookmarks, data->OptionSelect); + ATB_wap_entry_remove(View->BookmarksURL, data->OptionSelect); + ATB_wap_profile_save(View); /* Save change to flash */ + + /* Redraw list */ + + AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + + case WAP_DELETE_HISTORY: + switch (reason) + { + case INFO_KCD_LEFT: + /* Destroy the old list */ + + AUI_destroy(data->win, LIST_WIN); + + /* Delete the selected bookmark name and URL */ + + ATB_wap_entry_remove(View->History, data->OptionSelect); + ATB_wap_entry_remove(View->HistoryURL, data->OptionSelect); + ATB_wap_renumber_history(View->History); /* Renumber history list */ + ATB_wap_profile_save(View); /* Save change to flash */ + + /* Redraw list */ + + AUI_list_redraw(WAP_HISTORY_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + + /* SPR#2324 - SH - For deleting connection profile */ + + case WAP_DELETE_PROFILE: + switch (reason) + { + case INFO_KCD_LEFT: + AUI_destroy(data->win, LIST_WIN); /* Destroy the old list */ + ATB_wap_profile_delete(data->View, data->OptionSelect); /* Shifts profile data up */ + if (data->OptionSelect==(data->View->ProfilesList->no_of_entries-1)) + { + /* It's the last entry in the list: read in the previous entry */ + data->OptionSelect--; + } + /* Read in the new profile */ + ATB_wap_profile_read(data->View, data->OptionSelect); + ATB_wap_profile_save(View); // Save change to flash + AUI_list_redraw(WAP_PROFILES_LIST, TxtEntryDeleted); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + + case WAP_CLEAR_HISTORY: + switch (reason) + { + case INFO_KCD_LEFT: + /* Delete all history names and URLs */ + + ATB_wap_entry_remove_all(View->History); + ATB_wap_entry_remove_all(View->HistoryURL); + ATB_wap_profile_save(View); /* Save change to flash */ + + /* Redraw list */ + + AUI_entry_list(data->win, View->History, (ListCbFunc)AUI_history_list_cb,0); + break; + case INFO_KCD_RIGHT: + case INFO_KCD_CLEAR: + break; + default: + break; + } + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_entry_sendSMS + + $Description: Open up an SMS editing screen with the selected URL + + $Returns: + + $Arguments: none + +*******************************************************************************/ + +int AUI_entry_sendSMS(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_SmsUserData UserData; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_entry_sendSMS"); +#endif + + if (!data) + { + return 0; + } + + /* Copy name into SMS editing buffer with a blank number */ + + strcpy((char *)UserData.TextBuffer, data->URLSelect); + UserData.NumberBuffer[0] = 0; + UserData.CentreBuffer[0] = 0; + + + //CRR 25259: xpradipg 28 sep 2004 + //the window handler assignment to data->edit_win is removed + SmsSend_SEND_start(data->parent_win, &UserData); // Start editing SMS + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_profile_name_edit + + $Description: Opens up a text edit screen for editing the name of a profile + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_profile_name_edit"); +#endif + + if (!data) + { + return 0; + } + + +#ifdef NEW_EDITOR + /* Store name in editor buffer */ + + ATB_uc_text_copy((USHORT *)data->Buffer, data->View->Profile->Title, PROFILENAME_MAX_LEN); + + /* Set up editor. */ + + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtProfileName, (T_AUI_EDIT_CB)AUI_profile_name_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, PROFILENAME_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + + data->edit_win = AUI_edit_Start(data->win, &editor_data); + +#else /* NEW_EDITOR */ + /* Clear editor for name */ + + data->Buffer[0] = 0x80; + data->Buffer[1] = 0x7F; + ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, PROFILENAME_MAX_LEN); + + /* Set up editor. */ + + AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+2)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb); + + editor_data.TextId = TxtProfileName; + editor_data.min_enter = 1; /* Avoid returning empty strings */ + + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_profile_name_edit_cb + + $Description: Callback function for editing a profile's title + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_profile_name_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_profile_name_edit_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win, EDIT_WIN); /* Right soft key kills editor */ + break; + + case INFO_KCD_LEFT: + + /* cq12466 MZ Destroy the editor related window */ + AUI_destroy(data->win, EDIT_WIN ); + + /* Change profile name */ +#ifdef NEW_EDITOR + ATB_wap_entry_change(View->ProfilesList, data->Buffer, View->ProfileId); +#else /* NEW_EDITOR */ + ATB_wap_entry_change(View->ProfilesList, &data->Buffer[2], View->ProfileId); +#endif /* NEW_EDITOR */ + ATB_wap_profile_save(View); /* Save change to flash */ + + /* cq12466 MZ Display the confirmation screen only and return to the WAP profile + settings list. */ + AUI_info_dialog(data->win, TxtChanged, NULL); + + break; + + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_dialupNumber + + $Description: Opens up a numeric edit screen for editing the dialup number + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_dialupNumber(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_dialup_number"); +#endif + + if (!data) + { + return 0; + } + + strcpy(data->Buffer, data->View->Profile->DialupNumber); + AUI_number_edit(data->win, WAP_DIALUP_NUMBER, TxtDialupNumber); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_IPAddress1 + + $Description: Opens up a numeric edit screen for editing the primary IP address + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress1"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->IPAddress1, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_IP_ADDRESS1, ED_MODE_FORMATTED, TxtIPAddress, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS1; + editor_data.TextId = TxtIPAddress; /* "IP Address" rather than "IP Address 1" (less confusing)*/ + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_IPAddress2 + + $Description: Opens up a numeric edit screen for editing the secondary IP address + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_IPAddress2"); +#endif + + if (!data) + { + return 0; + } + + /* Copy IP address into edit buffer */ + + strncpy(data->Buffer, data->View->Profile->IPAddress2, IPADDRESS_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, WAP_IP_ADDRESS2, ED_MODE_FORMATTED, TxtIPAddress2, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0'); + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb); + editor_data.Identifier = WAP_IP_ADDRESS2; + editor_data.TextId = TxtIPAddress2; + editor_data.min_enter = 1; + editor_data.FormatString = "NNN\\.NNN\\.NNN\\.NNN"; + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_Port1 + + $Description: Opens up a numeric edit screen for editing the primary port + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_Port1(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_Port1"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->Port1); + AUI_number_edit(data->win, WAP_PORT1, TxtPort1); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_Port2 + + $Description: Opens up a numeric edit screen for editing the secondary port + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_Port2(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_Port2"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->Port2); + AUI_number_edit(data->win, WAP_PORT2, TxtPort2); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_APN + + $Description: Opens up a numeric edit screen for editing the APN + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_APN(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_APN"); +#endif + + AUI_edit(NULL,WAP_EDIT_APN, TxtAPN, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_username + + $Description: Opens up a text edit screen for editing the ISP username + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_username(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_username"); +#endif + + if (!data) + { + return 0; + } + + /* Copy name into editing buffer */ + + strncpy(data->Buffer, data->View->Profile->Username, USERNAME_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_username_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1); + + data->edit_win = AUI_edit_Start(data->win, &editor_data); + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb); + + editor_data.TextId = TxtISPUsername; + editor_data.hide = FALSE; + + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_username_cb + + $Description: Callback function for editing the ISP username + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_username_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_username_cb"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win, EDIT_WIN); /* Right soft key kills editor */ + break; + + case INFO_KCD_LEFT: + AUI_destroy(data->win, EDIT_WIN); /* Kill editor */ + strcpy(data->View->Profile->Username, data->Buffer); /* Change username */ + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); /* Display "Changed" message */ + break; + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_password + + $Description: Opens up a text edit screen for editing the ISP password + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_password(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password"); +#endif + + if (!data) + { + return 0; + } + + /* Copy password into editing buffer */ + + strncpy(data->Buffer, data->View->Profile->Password, PASSWORD_MAX_LEN+1); + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtISPPassword, (T_AUI_EDIT_CB)AUI_password_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, PASSWORD_MAX_LEN+1); + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb); + + editor_data.TextId = TxtISPPassword; + editor_data.hide = TRUE; /* Password is hidden (*****) */ + + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_password_cb + + $Description: Callback function for editing the ISP password + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (just 0 so far) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_password_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION(" AUI_password_cb"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win, EDIT_WIN); /* Right soft key kills editor */ + break; + + case INFO_KCD_LEFT: + AUI_destroy(data->win, EDIT_WIN); /* Kill editor */ + strcpy(data->View->Profile->Password, data->Buffer); /* Change password */ + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); /* Display "Changed" message */ + break; + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_response_timer + + $Description: Opens up a numeric edit screen for editing the server number + + $Returns: none. + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +int AUI_response_timer(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_response_timer"); +#endif + + if (!data) + { + return 0; + } + + sprintf(data->Buffer, "%d", data->View->Profile->ResponseTimer); + AUI_number_edit(data->win, WAP_RESPONSE_TIMER, TxtResponseTimer); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_number_edit + + $Description: Opens up a numeric edit screen. + The digits to be edited should be in data->Buffer. + + $Returns: none. + + $Arguments: parent_win - the WAP data window + identifier - specifies which edit screen it is (server no. etc) + prompt - prompt, e.g "IP Address" + +*******************************************************************************/ + +int AUI_number_edit(T_MFW_HND parent_win, int identifier, USHORT prompt) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + + if (!data) + { + return 0; + } + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, 0, prompt, (T_AUI_EDIT_CB)AUI_number_edit_cb); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, NUMBER_MAX_LEN+1); + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + + data->edit_win = AUI_edit_Start(parent_win, &editor_data); + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb); + + editor_data.Identifier = identifier; + editor_data.TextId = prompt; + editor_data.min_enter = 1; + + data->edit_win = editor_start(parent_win, &editor_data); +#endif /* NEW_EDITOR */ + + return 1; +} + + +/******************************************************************************* + + $Function: validate_IP_address + + $Description: Check the validity of an IP address in the form 255.255.255.255 + + $Returns: BOOL, TRUE if valid, else FALSE + + $Arguments: buffer - the ASCIIZ string containing the IP address to validate + +*******************************************************************************/ + +static BOOL validate_IP_address(char *buffer) +{ + char temp[16]; + char *token; + int value; + + if (strlen(buffer) > sizeof(temp)-1) + return FALSE; + + strcpy(temp, buffer); + for (token = strtok(temp, "."); + token != NULL; + token = strtok(NULL, ".")) + { + value = atoi(token); + + if ((value < 0) || (value > 255)) + return FALSE; + } + + return TRUE; +} + + +/******************************************************************************* + + $Function: AUI_number_edit_cb + + $Description: Callback function for editing a number + + $Returns: void + + $Arguments: parent_win - the WAP data window + identifier - identifier for the edit type (server or service no.) + reason - reason for callback + +*******************************************************************************/ + +static void AUI_number_edit_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + T_WAP_PROFILE *Profile; + int value; + BOOL valid; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_number_edit_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + Profile = View->Profile; + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win, EDIT_WIN); /* Just kill window if back pressed */ + break; + + case INFO_KCD_LEFT: + { + switch(identifier) + { + case WAP_DIALUP_NUMBER: + /* Copy the dialup number to the Profile */ + strcpy(Profile->DialupNumber, data->Buffer); + valid = TRUE; + break; + + case WAP_IP_ADDRESS1: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + /* Copy the IP address to the Profile */ + strcpy(Profile->IPAddress1, data->Buffer); + } + else + { + bookShowInformation(data->win, TxtOutofRange, NULL, NULL); + } + break; + + case WAP_IP_ADDRESS2: + valid = validate_IP_address(data->Buffer); + + if (valid) + { + /* Copy the IP address to the Profile */ + strcpy(Profile->IPAddress2, data->Buffer); + } + else + { + bookShowInformation(data->win, TxtOutofRange, NULL, NULL); + } + break; + + case WAP_PORT1: + value = atoi(data->Buffer); + if (value>=0 && value<=0xFFFF) + { + /* Store the port number in the Profile */ + valid = TRUE; + Profile->Port1 = value; + } + else + { + valid = FALSE; + bookShowInformation(data->win, TxtOutofRange, NULL, NULL); + } + break; + + case WAP_PORT2: + value = atoi(data->Buffer); + if (value>=0 && value<=0xFFFF) + { + /* Store the port number in the Profile */ + valid = TRUE; + Profile->Port2 = value; + } + else + { + valid = FALSE; + bookShowInformation(data->win, TxtOutofRange, NULL, NULL); + } + break; + + case WAP_RESPONSE_TIMER: + value = atoi(data->Buffer); + if (value>=0 && value<=0xFFFF) + { + /* Store the response timer in the Profile */ + valid = TRUE; + Profile->ResponseTimer = value; + } + else + { + valid = FALSE; + bookShowInformation(data->win, TxtOutofRange, NULL, NULL); + } + break; + } + + if (valid) + { + AUI_destroy(data->win, EDIT_WIN); + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); /* Display "Changed" message */ + } + } + break; + + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: MMI_AUI_homepage_edit + + $Description: Opens up a text edit screen for changing the homepage URL + + $Returns: MFW_EVENT_CONSUMED + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_homepage_edit(MfwMnu* menu, MfwMnuItem* item) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_homepage_edit"); +#endif + + AUI_edit(NULL,WAP_EDIT_HOMEPAGE, TxtEditURL, URL_MAX_LEN); + + return MFW_EVENT_CONSUMED; +} + + +/******************************************************************************* + + $Function: AUI_connectionType + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionType(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionType"); +#endif + + if (!data) + { + return 0; + } + + /* Open the menu */ + /* cq12466 MZ store sub options info for later use. */ + data->sub_sub_options_win = bookMenuStart(data->win, WAPConnectionTypeAttributes(), 0); + SEND_EVENT(data->sub_sub_options_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionType); + + return; +} + + +/******************************************************************************* + + $Function: AUI_connectionType_set + + $Description: Set WAP connection to temporary or permanent + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionType_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionType_set"); +#endif + + if (!data) + { + return 0; + } + + /* Change connection type */ + + data->View->Profile->ConnectionType = menu->lCursor[menu->level]; + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); /* "Changed" */ + + /* cq 12466 MZ return to sub menu options dialog.*/ + bookMenuDestroy(data->sub_sub_options_win); + data->sub_sub_options_win = NULL; + return 1; +} + + +/******************************************************************************* + + $Function: AUI_connectionSpeed + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionSpeed(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionSpeed"); +#endif + + if (!data) + { + return 0; + } + + /* Open the menu */ + + setting_win = bookMenuStart(data->win, WAPConnectionSpeedAttributes(), 0); + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionSpeed); + + return; +} + + +/******************************************************************************* + + $Function: AUI_connectionSpeed_set + + $Description: Set WAP connection speed to analogue, digital + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_connectionSpeed_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_connectionSpeed_set"); +#endif + + if (!data) + { + return 0; + } + + /* Change connection speed */ + + data->View->Profile->ConnectionSpeed = menu->lCursor[menu->level]; + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_security + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_security(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_security_on"); +#endif + + if (!data) + { + return 0; + } + + /* Open up the menu */ + /* cq12466 MZ store submenu window info .*/ + data->sub_sub_options_win = bookMenuStart(data->win, WAPSecurityOptionAttributes(), 0); + SEND_EVENT(data->sub_sub_options_win , DEFAULT_OPTION, NULL, &data->View->Profile->Security); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_security_set + + $Description: Switch security on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_security_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_security_off"); +#endif + + if (!data) + { + return 0; + } + + /* Change security value */ + + data->View->Profile->Security = (BOOL)menu->lCursor[menu->level]; + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); + + /* cq12466 MZ destroy sub menu option return to previous menu. */ + bookMenuDestroy(data->sub_sub_options_win); + data->sub_sub_options_win = NULL; + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_access + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_access(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_access"); +#endif + + if (!data) + { + return 0; + } + + /* SPR#2324 - SH - Need to keep a handle of this menu, + * as we'll explicitly destroy it when GPRS or Dialup is chosen */ + + data->sub_sub_options_win = bookMenuStart(data->win, WAPGPRSDialupAttributes(), 0); + SEND_EVENT(data->sub_sub_options_win, DEFAULT_OPTION, NULL, &data->View->Profile->AccessType); // Add our own callback + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_access_set + + $Description: Set access type + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_access_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_access_set"); +#endif + + if (!data) + { + return 0; + } + + /* Change access type */ + + data->View->Profile->AccessType = menu->lCursor[menu->level]; + ATB_wap_profile_save(data->View); + AUI_info_dialog(data->win, TxtChanged, NULL); + + /* SPR#2324 - SH - Display "Changed" dialogue. On callback, will redisplay the + * appropriate settings menu - GPRS or Dialup */ + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChanged, TxtNull, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_access_menu, THREE_SECS, 0 ); + + info_dialog(data->win, &display_info); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_access_menu + + $Description: Display the appropriate menu for the access type. + SPR#2324 - SH - Added + + $Returns: None. + + $Arguments: win - the parent window + identifier - stores the access type + reson - not used. + +*******************************************************************************/ + +static void AUI_access_menu(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_access_menu"); +#endif + + if (!data) + { + return; + } + + /* Destroy the GPRS/Dialup menu */ + + bookMenuDestroy(data->sub_sub_options_win); + data->sub_sub_options_win = NULL; + + /* Destroy the old settings menu */ + + bookMenuDestroy(data->sub_options_win); + data->sub_options_win = NULL; + + /* Create a new settings menu of the appropriate type */ + + switch(data->View->Profile->AccessType) + { + case WAP_GPRS_DATA: + data->sub_options_win = bookMenuStart(win, WAPGPRSProfileAttributes(), 0); + break; + case WAP_CS_DATA: + data->sub_options_win = bookMenuStart(win, WAPDialupProfileAttributes(), 0); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_savehist + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_savehist(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE SaveHistory; + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_savehist"); +#endif + + if (!data) + { + return 0; + } + + /* Open the menu */ + + setting_win = bookMenuStart(data->win, WAPSaveHistoryAttributes(), 0); + + /* SaveHistory = 1 or 0 depending on flag */ + + SaveHistory = (data->View->Status & WAP_STATUS_SAVEHISTORY)/WAP_STATUS_SAVEHISTORY; + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &SaveHistory); + + return 1; +} + +/******************************************************************************* + + $Function: AUI_savehist_set + + $Description: Set save history on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_savehist_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_savehist_set"); +#endif + + if (!data) + { + return 0; + } + + if (menu->lCursor[menu->level]) + data->View->Status |= WAP_STATUS_SAVEHISTORY; + else + data->View->Status &= ~WAP_STATUS_SAVEHISTORY; + + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_scaleimages + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_scaleimages(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE ScaleImages; + T_MFW_HND setting_win; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_scaleimages"); +#endif + + if (!data) + { + return 0; + } + + /* Open the menu */ + + setting_win = bookMenuStart(data->win, WAPScaleImagesAttributes(), 0); + + /* ScaleImages = 1 or 0 depending on flag */ + + ScaleImages = (data->View->Status & WAP_STATUS_SCALEIMAGES)/WAP_STATUS_SCALEIMAGES; + SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &ScaleImages); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_scaleimages_set + + $Description: Set image scaling on or off + + $Returns: + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int AUI_scaleimages_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_scaleimages_set"); +#endif + + if (!data) + { + return 0; + } + + if (menu->lCursor[menu->level]) + data->View->Status |= WAP_STATUS_SCALEIMAGES; + else + data->View->Status &= ~WAP_STATUS_SCALEIMAGES; + + ATB_wap_profile_save(data->View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtChanged, NULL); + + return 1; +} + + +/******************************************************************************* + + $Function: AUI_info_dialog + + $Description: Display message for three seconds + + $Returns: None. + + $Arguments: parent_win - Parent window + TextId - Id of text string to display + +*******************************************************************************/ + +static void AUI_info_dialog(T_MFW_HND parent_win, USHORT TxtId1, USHORT TxtId2) +{ + T_DISPLAY_DATA display_info; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_info_dialog"); +#endif + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId1, TxtId2, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, 0 ); + display_info.Identifier = 0; + + info_dialog(parent_win, &display_info); + return; +} + + +/******************************************************************************* + + $Function: AUI_error_dialog + + $Description: Display error message for three seconds + + $Returns: None. + + $Arguments: View - The current view + errorCode - Number of the error + +*******************************************************************************/ + +void AUI_error_dialog(T_WAP_VIEW *View, SHORT errorCode) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + static char errorNumber[20]; + USHORT errId1, errId2; + USHORT lsk, rsk; + SHORT newCode; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_error_dialog"); +#endif + + if (!data) + { + return; + } + + /* Intercept fatal error */ + + if (errorCode==8002) + { + TRACE_EVENT("WAP MEMORY FULL"); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftOK, TxtFatalError, TxtErrorOutOfMem, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_RIGHT); + info_dialog(data->parent_win, &display_info); + AUI_destroy(data->win, ALL_WIN); + + return; + } + + /* Convert the error code to text */ + TRACE_EVENT_P1("WAP Error: %d", errorCode); + + /* Handle standard error */ + + errId1 = TxtNull; + errId2 = TxtNull; + newCode = errorCode; + + if ((errorCode>=69 && errorCode<=101) + || (errorCode>=64 && errorCode<=67) + || errorCode==1013) + { + newCode = ERROR_COMMUNICATION_SERVER; + } + + else if ((errorCode>=0 && errorCode<=9) + || (errorCode>=224 && errorCode<=227) + || (errorCode>=229 && errorCode<=234) + || (errorCode>=5300 && errorCode<=5399) + || errorCode==1010 || errorCode==1018) + { + newCode = ERROR_COMMUNICATION_GATEWAY; + } + + else if ((errorCode>=1301 && errorCode<=3014) + || (errorCode>=4002 && errorCode<=5099) + || (errorCode>=5200 && errorCode<=5299) + || (errorCode>=5400 && errorCode<=5499) + || (errorCode>=6001 && errorCode<=8001) + || errorCode==1003 || errorCode==1004 + || errorCode==1012 || errorCode==1015 + || errorCode==1016 || errorCode==1019 + || errorCode==1104) + { + newCode = ERROR_UNEXPECTED; + } + + else if (errorCode>=5100 && errorCode<=5199) + { + newCode = ERROR_SECURITY; + } + + switch(newCode) + { + case ERROR_GPRS_NOT_SUPPORTED: + errId1 = TxtGPRS; + errId2 = TxtNotSupported; + break; + + case ERROR_CALL_DISCONNECTED: + errId1 = TxtConnection; + errId2 = TxtFailed; + break; + + case 8001: + errId1 = TxtErrorMemLow; break; + + /* Error type 1 */ + case 68: + errId2 = TxtPageNotFound; break; + /* Error type 2 */ + case 1008: + errId2 = TxtInvalidURL; break; + /* Error type 3 */ + case 1009: + errId2 = TxtNoResponse; break; + /* Error type 4 */ + case 1011: case 1017: case 1207: + errId2 = TxtAccessDenied; break; + /* Error type 5 */ + case 1005: case 1006: case 1007: + case 1020: case 1101: case 1102: + case 1105: case 1108: + errId2 = TxtErrorInPage; break; + /* Error type 6 */ + case 1202: case 1203: case 1204: + case 1205: case 1206: case 1208: + case 1209: case 1210: case 1211: + case 1212: case 1213: + errId2 = TxtScriptError; break; + /* Error type 7 */ + case ERROR_COMMUNICATION_SERVER: + errId2 = TxtServerError; break; + /* Error type 8 */ + case ERROR_COMMUNICATION_GATEWAY: + errId2 = TxtGatewayError; break; + /* Error type 9 */ + case ERROR_UNEXPECTED: + errId2 = TxtUnexpectedErr; break; + /* Error type 10 */ + case 1103: + errId2 = TxtCharacterSet; break; + /* Error type 11 */ + case 1106: + errId2 = TxtWBXMLError; break; + /* Error type 13 */ + case 8002: + /* This error already intercepted above */ + case 1001: + errId2 = TxtErrorOutOfMem; break; + /* Error type 14 */ + case 228: + errId2 = TxtGatewayBusy; break; + /* Error type 15 */ + case 1014: + errId2 = TxtNoResponse; break; + /* Error type 16 */ + case ERROR_SECURITY: + errId2 = TxtSecurityFail; break; + + case 4001: + errId2 = TxtNoResponse; + break; + + default: + if (errorCode<10) + errId2 = TxtErrorWTP; + else if (errorCode<100) + errId2 = TxtErrorHTTP; + else if (errorCode<1000) + errId2 = TxtErrorWSP; + else if (errorCode<2000) + errId2 = TxtErrorWAE; + else if (errorCode<3000) + errId2 = TxtErrorWSPCL; + else if (errorCode<4000) + errId2 = TxtErrorWSPCM; + else if (errorCode<5000) + errId2 = TxtErrorWTP; + else if (errorCode<6000) + errId2 = TxtErrorWTLS; + else if (errorCode<7000) + errId2 = TxtErrorWDP; + else if (errorCode<8000) + errId2 = TxtErrorUDCP; + break; + } + + /* Decide on soft keys. If browser is not present, can only exit. */ + + if (data->browser_win) + { + lsk = TxtReload; + rsk = TxtSoftBack; + } + else + { + lsk = TxtNull; + rsk = TxtExit; + } + + /* Set up dialog display data */ + + dlg_initDisplayData_TextId( &display_info, lsk, rsk, errId1, errId2, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_LEFT | KEY_RIGHT); + + /* If no errId1, use "Error <num>" */ + + if (errId1==TxtNull) + { + sprintf(errorNumber, "%s %d", GET_TEXT(TxtError), errorCode); + display_info.TextString = errorNumber; + } + + if (errId2==TxtNull) + { + errId2 = TxtUnknown; + } + + display_info.Callback = (T_VOID_FUNC)AUI_error_cb; + + /* Destroy any previous error dialog */ + + if (data->error_win) + { + SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0); + } + data->error_win = info_dialog(data->win, &display_info); + + return; +} + + +/******************************************************************************* + + $Function: AUI_error_cb + + $Description: Callback function for the WAP error dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_error_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_error_cb"); +#endif + + if (!data) + { + return; + } + + /* Error window has been destroyed */ + + data->error_win = NULL; + data->update_forbid = FALSE; + + /* Destroy any connecting dialog */ + + AUI_destroy(data->win, CONNECT_WIN); + + switch(reason) + { + /* Right soft key: Back*/ + + case INFO_KCD_RIGHT: + if (data->browser_win && data->View) + { + ATB_wap_card_go_back(data->View); + } + else /* Connecting failed, exit */ + { + AUI_destroy(data->win, RETURN_TO_MENU); + } + break; + + /* Left soft key: Reload */ + + case INFO_KCD_LEFT: + /* If browser window is not present, try + * to connect again */ + if (data->browser_win) + { + ATB_wap_card_refresh(data->View); + } + else + { + AUI_connect_URL(data->win, data->View->URL); + } + break; + } + + return; +} + + +#ifdef NEW_EDITOR +// Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C +// Fix: Define an alternate positon for the standard editor. +#define EDT_ALT_POS 1 + +/******************************************************************************* + + $Function: AUI_standard_editor + + $Description: Sets up standard attributes for a WAP editor + + $Returns: None + + $Arguments: editor_data - pointer to existing editor_data + buffer - Text buffer to edit + size - maximum length of editor + mode - editor mode + callback - callback function + unicode - TRUE if editor is unicode + +*******************************************************************************/ + +static void AUI_standard_editor(T_AUI_EDITOR_DATA *editor_data, USHORT identifier, USHORT mode, USHORT titleId, T_AUI_EDIT_CB Callback) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_standard_editor"); +#endif + + AUI_edit_SetDefault(editor_data); + AUI_edit_SetEvents(editor_data, identifier, FALSE, FOREVER, Callback); + AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, titleId, NULL); + +// Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C +// Fix: AUI_edit_SetAltTextStr is added in the AUI_Standard_editor() with soft key back option. + + AUI_edit_SetAltTextStr(editor_data, EDT_ALT_POS, TxtSoftOK, TRUE, TxtSoftBack); + AUI_edit_SetMode(editor_data, mode, DS_CURSOR_BAR); + AUI_edit_SetDisplay(editor_data, ZONE_WAP_EDITOR, COLOUR_EDITOR, EDITOR_FONT); + + return; +} + +#else /* NEW_EDITOR */ + +/******************************************************************************* + + $Function: AUI_standard_editor + + $Description: Sets up standard attributes for a WAP editor + + $Returns: None + + $Arguments: editor_data - pointer to existing editor_data + buffer - Text buffer to edit + size - maximum length of editor + mode - editor mode + callback - callback function + +*******************************************************************************/ + +static void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback) +{ +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_standard_editor"); +#endif + editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR ); + editor_data->editor_attr.font = 0; + + editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER); + editor_data->destroyEditor = FALSE; /* Default: don't destroy editor on exit */ + editor_data->hide = FALSE; /* Default: input not hidden */ + editor_data->Identifier = 0; + + return; +} + +#endif /* NEW_EDITOR */ + + +/******************************************************************************* + + $Function: AUI_wap_input_dialog_open + + $Description: Prompts the MMI to open an input dialog given a particular format and + string. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + +*******************************************************************************/ + +T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog) +{ + T_WAP_DATA *data = AUI_wap_data(); /* WAP data */ + USHORT formatIndex; + USHORT bufferIndex; + USHORT bufferLength; +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + USHORT titlelen; + USHORT mode; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_input_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* Set up editor */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtNull, (T_AUI_EDIT_CB)AUI_input_cb); +#endif /* NEW_EDITOR */ + + data->gen_pointer = Dialog->dialog_pointer; /* Needed by GLE */ + + if (Dialog->size > INPUT_MAX_LEN) + { + Dialog->size = INPUT_MAX_LEN; + } + + /* SPR#2393 - SH - Ensure input buffer isn't > max size */ + + if (Dialog->input_length > Dialog->size) + { + Dialog->input_length = Dialog->size; + } + + /* Terminate buffer */ + + Dialog->Input[Dialog->input_length] = 0; + + /* Convert input string */ + ATB_uc_text_convert(Dialog->Input, Dialog->input_length); + +#ifdef NEW_EDITOR + /* Buffer is unicode */ + bufferLength = ATB_uc_text_copy((USHORT *)data->Buffer, Dialog->Input, INPUT_MAX_LEN); +#else + /* Buffer is ascii */ + bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN); +#endif /* NEW_EDITOR */ + + /* Convert title to MMI unicode and crop it to fit screen */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + if (Dialog->title_length>0) + { + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN); + ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH); +#ifdef NEW_EDITOR + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, (UBYTE *)data->Message.text); +#endif /* NEW_EDITOR */ + } + else + { +#ifdef NEW_EDITOR + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtUntitled, NULL); +#else + data->Message.text[0] = 0x7F80; + AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED); +#endif /* NEW_EDITOR */ + } + + /* Convert format characters to ascii */ + + ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length); + ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length); + + /* Set up standard editor parameters */ + +#ifdef NEW_EDITOR + AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, Dialog->size+1); + + mode = ED_MODE_ALPHA; + + if (Dialog->format_length != 0) + { + AUI_edit_SetFormatStr(&editor_data, data->Buffer2, TRUE, ' '); + mode |= ED_MODE_FORMATTED; + } + + if (Dialog->is_password) + { + mode |= ED_MODE_HIDDEN; + } + + if (!Dialog->empty_ok) + { + AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); + } + + AUI_edit_SetMode(&editor_data, mode, DS_CURSOR_BAR); + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else + AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb); + + /* Need to set input mode & put fixed characters into input buffer */ + + if (Dialog->format_length != 0) + { + editor_data.mode = FORMAT_MODE; + formatIndex = 0; + bufferIndex = 0; + + while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2)) + { + /* Backslash character indicates fixed character */ + + if (data->Buffer2[formatIndex] == '\\') + { + formatIndex++; + /* Put fixed char into buffer */ + data->Buffer[bufferIndex] = data->Buffer2[formatIndex]; + } + + /* In a delimited field... */ + + else if (strchr("123456789*", data->Buffer2[formatIndex])) + { + if (bufferIndex<bufferLength) /* if we're not at the end of the string, */ + formatIndex--; /* stay where we are in the formatstring */ + else + formatIndex++; /* otherwise go to end of string */ + } + + /* If we're past the end of the existing buffer... */ + + else if (bufferIndex>=bufferLength) + { + data->Buffer[bufferIndex] = ' '; /* Fill it with empty space */ + } + bufferIndex++; + formatIndex++; + } + + data->Buffer[bufferIndex] = 0; /* Terminate the buffer string */ + } + + editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */ + editor_data.TextString = (char *)data->Message.text; /* String to be displayed in output buffer */ + editor_data.FormatString = data->Buffer2; /* Provide the editor with the format string */ + + /* Check if input needs to be hidden */ + + if (Dialog->is_password) + { + editor_data.hide = TRUE; + } + + /* Is an empty response OK? */ + + if (!Dialog->empty_ok) + editor_data.min_enter = 1; + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = editor_start(data->win, &editor_data); +#endif + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_input_cb + + $Description: Callback function for the WAP input dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_input_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_INPUT_DIALOG_CNF DialogCnf; + BOOL edited; + USHORT textlen; + + TRACE_FUNCTION("AUI_input_cb()"); + + if (!data) + { + return; + } + + /* Allow WAP browser window updates */ + + data->update_forbid = FALSE; + + /* Destroy editor */ + + AUI_destroy(data->win,EDIT_WIN); + + /* Free message string */ + AUI_wap_string_free(&data->Message); + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + edited = FALSE; /* Don't change text */ + break; + + default: + edited = TRUE; /* Text is changed */ + break; + } + + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; /* Dialog id is passed from AUI_input */ + DialogCnf.edited = edited; /* TRUE if text changed */ + DialogCnf.dialog_pointer = data->gen_pointer; /* Needed by GLE */ + +#ifdef NEW_EDITOR + textlen = ATB_string_UCLength((USHORT *)data->Buffer); +#else /* NEW_EDITOR */ + textlen = strlen(data->Buffer); +#endif /* NEW_EDITOR */ + + DialogCnf.Text = (USHORT *)AUI_wap_memory_alloc((textlen+1)*sizeof(USHORT)); + +#ifdef NEW_EDITOR + /* Copy buffer text */ + DialogCnf.text_length = ATB_uc_text_copy(DialogCnf.Text, (USHORT *)data->Buffer, textlen); +#else /* NEW_EDITOR */ + /* Convert buffer text to MMI unicode */ + DialogCnf.text_length = ATB_char_to_uc(DialogCnf.Text, data->Buffer); +#endif /* NEW_EDITOR */ + + /* Convert to standard unicode */ + ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length); + + ATB_trace_ushort_string(DialogCnf.Text, (USHORT)DialogCnf.text_length); + + /* Send data to ATB */ + + ATB_wap_input_dialog_closed(&DialogCnf); + + AUI_wap_memory_free((UBYTE *)DialogCnf.Text, (textlen+1)*sizeof(USHORT)); + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_password_dialog_open + + $Description: Prompts the MMI to open a password dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + +*******************************************************************************/ + +T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_password_dialog_open"); +#endif + + if (!data) + { + return WAP_FAIL; + } + + /* SPR#2393 - Clear buffer */ + + memset(data->Buffer, 0, USERNAME_MAX_LEN+1); /* Input field is char type */ + + /* Need to prompt for two separate things: the username and password! */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_password_cb_1); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPUsername, NULL); + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + data->edit_win = AUI_edit_Start(data->win, &editor_data); +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1); + + editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */ + editor_data.TextId = TxtISPUsername; /* SPR#2393 */ + + /* Don't update WAP browser window while editor is open */ + data->update_forbid = TRUE; + + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_password_cb_1 + + $Description: Callback function for the WAP password dialog, after username entered. + Prompts for password. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif /* NEW_EDITOR */ + T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; /* SPR#2393 */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password_dialog_cb_1"); +#endif + + if (!data) + { + return; + } + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win,EDIT_WIN); /* Destroy edit window */ + + /* SPR#2393 - SH - WAP browser can update again */ + data->update_forbid = FALSE; + + /* SPR#2393 - SH - Force an update, otherwise editor screen + * shows forever */ + win_show(data->browser_win); + + /* SPR#2393 - SH - Send NULL username/password to indicate dialog cancelled */ + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; + DialogCnf.input_length = 0; + DialogCnf.Input = NULL; + DialogCnf.password_length = 0; + DialogCnf.Password = NULL; + ATB_wap_password_dialog_closed(&DialogCnf); + break; + + case INFO_KCD_LEFT: + data->Buffer2[0] = NULL; /* Empty string for password */ + +#ifdef NEW_EDITOR + AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtNull, (T_AUI_EDIT_CB)AUI_password_cb_2); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer2, PASSWORD_MAX_LEN+1); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPPassword, NULL); + + data->temp_win = data->edit_win; /* Store pointer to this edit window */ + data->edit_win = AUI_edit_Start(data->win, &editor_data); /* Create input window */ + +#else /* NEW_EDITOR */ + AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE, + (T_EDIT_CB)AUI_password_cb_2); + + editor_data.Identifier = identifier; /* this is the dialog identity */ + editor_data.TextString = (char *)data->Message.text; + editor_data.hide = TRUE; + + data->temp_win = data->edit_win; /* Store pointer to this edit window */ + data->edit_win = editor_start(data->win, &editor_data); +#endif /* NEW_EDITOR */ + + return; + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_password_cb_2 + + $Description: Callback function for the WAP password dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_password_cb_2(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_password_cb_2"); +#endif + + if (!data) + { + return; + } + + /* SPR#2393 - SH - Only allow browser updates if editor is accepted */ + + switch (reason) + { + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_destroy(data->win,EDIT_WIN); /* Destroy this edit window */ + data->edit_win = data->temp_win; /* Reinstate previous edit window */ + data->temp_win = NULL; /* SPR#2393 */ + break; + + case INFO_KCD_LEFT: + /* SPR#2393 - Allow WAP browser window updates */ + data->update_forbid = FALSE; + + /* Destroy password dialog first so that + * password is stored in original buffer */ + AUI_destroy(data->win,EDIT_WIN); /* Destroy 2nd edit window */ + data->edit_win = data->temp_win; + AUI_destroy(data->win,EDIT_WIN); /* Destroy 1st edit window */ + data->temp_win = NULL; /* SPR#2393 */ + + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; + DialogCnf.input_length = strlen(data->Buffer); + DialogCnf.Input = data->Buffer; + DialogCnf.password_length = strlen(data->Buffer2); + DialogCnf.Password = data->Buffer2; + ATB_wap_password_dialog_closed(&DialogCnf); + break; + } + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_confirm_dialog_open + + $Description: Prompts the MMI to open a confirmation dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + +*******************************************************************************/ + +T_WAP_RES AUI_wap_confirm_dialog_open(T_WAP_MMI_CONFIRM_DIALOG_REQ *Dialog) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + USHORT titlelen; + + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_confirm_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* Title, Left SK, Right SK */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN); + ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH); + AUI_text_to_uc(data->LeftSoftKey, Dialog->Ok_key, Dialog->ok_key_length); + AUI_text_to_uc(data->RightSoftKey, Dialog->Cancel_key, Dialog->cancel_key_length); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_confirm_cb, FOREVER, KEY_LEFT | KEY_RIGHT ); + display_info.LSKString = (char *)data->LeftSoftKey; + display_info.RSKString = (char *)data->RightSoftKey; + display_info.Identifier = Dialog->dialog_id; + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + info_dialog_softkeystrings (data->win, &display_info); + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_confirm_cb + + $Description: Callback function for the WAP confirmation dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_confirm_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_confirm_cb"); +#endif + + if (!data) + { + return; + } + + /* Allow WAP browser window updates */ + + data->update_forbid = FALSE; + + /* SPR#2393 - SH - Set up DialogCnf structure */ + + DialogCnf.object_id = data->View->object_id; + DialogCnf.dialog_id = identifier; /* Dialog id is passed from AUI_input */ + + /* Free message string */ + + AUI_wap_string_free(&data->Message); + + switch (reason) + { + case INFO_KCD_LEFT: + DialogCnf.answer = TRUE; /* Confirmation is false */ + break; + + default: + case INFO_KCD_RIGHT: + DialogCnf.answer = FALSE; /* Confirmation is false */ + break; + } + + ATB_wap_confirm_dialog_closed(&DialogCnf); /* Send data to ATB */ + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_info_dialog_open + + $Description: Prompts the MMI to open an info dialog. + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: Dialog - Dialog information + +*******************************************************************************/ + +T_WAP_RES AUI_wap_info_dialog_open(T_WAP_MMI_INFO_DIALOG_REQ *Dialog) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_DISPLAY_DATA display_info; + USHORT titlelen; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_info_dialog_open"); +#endif + + if (!data) + { + return 0; + } + + /* Message */ + + AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN); + + titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN); + ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH); + + dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_info_cb, THREE_SECS, 0 ); + + /* Set identifier to dialog id */ + display_info.Identifier = Dialog->dialog_id; + + /* Don't update WAP browser window while editor is open */ + + data->update_forbid = TRUE; + + info_dialog(data->win, &display_info); + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_info_cb + + $Description: Callback function for the WAP confirmation dialog. + + $Returns: void + + $Arguments: win - the WAP data window + identifier - this is the dialog id + reason - reason for callback + +*******************************************************************************/ + +static void AUI_info_cb(T_MFW_HND win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_MMI_WAP_INFO_DIALOG_CNF DialogCnf; /* SPR#2393 */ + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_info_cb"); +#endif + + if (!data) + { + return; + } + + /* Allow WAP browser window updates */ + + data->update_forbid = FALSE; + + /* Free message string */ + + AUI_wap_string_free(&data->Message); + + DialogCnf.object_id = data->View->object_id; /* SPR#2393 */ + DialogCnf.dialog_id = identifier; /* Dialog id is passed from AUI_input */ + + /* Send data to ATB */ + + ATB_wap_info_dialog_closed(&DialogCnf); /* SPR#2393 */ + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_options_menu_open + + $Description: The ATB will send to the AUI the contents of the menu list + + $Returns: WAP_OK if successful, WAP_FAIL if otherwise + + $Arguments: contextType - the context, to specify the first item in the menu + +*******************************************************************************/ + +static T_WAP_RES AUI_wap_options_menu_open(UBYTE contextType) +{ + T_WAP_DATA *data = AUI_wap_data(); + UBYTE startIndex; + UBYTE optionIndex; + const USHORT optionsItems[] = {TxtBookmark, TxtBookmarks, TxtGoTo, TxtHomepage, TxtSoftBack, TxtReload, TxtExit }; + const USHORT contextItem[] = {TxtGoToLink, TxtEdit, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect}; + T_WAP_LIST *OptionsList; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_options_menu_open"); +#endif + + if (!data) + { + return WAP_FAIL; + } + + OptionsList = (T_WAP_LIST *)data->OptionsList; + data->update_forbid = TRUE; + startIndex = 0; + + OptionsList->no_of_entries = MAX_OPTIONS; + + /* If context key is supplied, insert it as first item in menu */ + + if (contextType!=NULL) + { + OptionsList->no_of_entries++; + /* Allocate memory and convert first entries from text tag */ + OptionsList->Entry[0] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); + AUI_textid_to_uc((USHORT *)OptionsList->Entry[0], contextItem[contextType-1], SOFTKEY_MAX_LEN); + + startIndex = 1; /* Start filling menu from second entry */ + } + + /* Fill in rest of entries */ + + for (optionIndex=startIndex; optionIndex<OptionsList->no_of_entries; optionIndex++) + { + /* Allocate memory and convert options entries from text tags */ + OptionsList->Entry[optionIndex] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT)); + + AUI_textid_to_uc((USHORT *)OptionsList->Entry[optionIndex], optionsItems[optionIndex-startIndex], SOFTKEY_MAX_LEN); + } + + /* Create the options list */ + + data->optionsmenu_data = AUI_entry_list_create (data->win, OptionsList, (ListCbFunc)AUI_options_menu_cb,0); + data->optionsmenu_win = data->optionsmenu_data->win; + + return WAP_OK; +} + + +/******************************************************************************* + + $Function: AUI_options_menu_cb + + $Description: Callback function for options menu + + $Returns: void + + $Arguments: win - parent window + EntryListData - list menu data of bookmarks lsit + +*******************************************************************************/ + +static void AUI_options_menu_cb(T_MFW_HND win, ListMenuData *EntryListData) +{ + T_WAP_DATA *data = AUI_wap_data(); + T_WAP_VIEW *View; + UBYTE no_of_entries; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_options_menu_cb"); +#endif + + if (!data) + { + return; + } + + View = data->View; + + switch(EntryListData->Reason) + { + case LISTS_REASON_SELECT: + /* Option is selected... */ + no_of_entries = EntryListData->ListLength; + data->OptionSelect = EntryListData->ListPosition; /* Store selected option no. */ + + /* Check if there's a contextual key in menu */ + + if (no_of_entries>MAX_OPTIONS) + { + if (data->OptionSelect==0) /* if we've selected it... */ + { + AUI_destroy(win, OPTIONSMENU_WIN); /* Destroy options menu */ + ATB_wap_options_menu_select(View); /* Inform ATB */ + return; + } + else + data->OptionSelect--; /* Otherwise, pretend it isn't there */ + } + + switch(data->OptionSelect) + { + case WAP_ADDBOOKMARK: + /* Try to add current title to bookmarks */ + + if (ATB_wap_entry_add(View->Bookmarks, (char *)View->Title)==WAP_FAIL) + AUI_info_dialog(data->win, TxtBookmarks, TxtFull); /* if it's full, say "Bookmarks Full" */ + else + { + ATB_wap_entry_add(View->BookmarksURL, View->URL); /* Store URL */ + ATB_wap_profile_save(View); /* Save change to flash */ + AUI_info_dialog(data->win, TxtStored, NULL); /* Display "Stored" message */ + } + break; + + case WAP_BOOKMARKS: + /* Open up bookmarks list */ + AUI_entry_list(win, View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0); + break; + + case WAP_GOTO: + /* Destroy any previous options menu existing */ + if (data->options_win) + { + AUI_destroy(data->win, OPTIONS_WIN); + } + + /* Create "Go To" options menu */ + + data->options_win = bookMenuStart(win, WAPGoToAttributes(), 0); + SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_goto_cb); + break; + + case WAP_HOMEPAGE: + /* Connect to homepage */ + AUI_destroy(win, OPTIONSMENU_WIN); + AUI_connect_URL(win, View->Profile->Homepage); + break; + + case WAP_BACK: + /* Go back */ + AUI_destroy(win, OPTIONSMENU_WIN); + ATB_wap_card_go_back(View); + break; + + case WAP_RELOAD: + /* Reload current card */ + AUI_destroy(win, OPTIONSMENU_WIN); + ATB_wap_card_refresh(View); + break; + + case WAP_EXIT: + /* Exit WAP, return to menu */ + AUI_destroy(win, RETURN_TO_MENU); + break; + } + break; + + /* Exit menu */ + + case LISTS_REASON_BACK: + case LISTS_REASON_CLEAR: + AUI_destroy(win,OPTIONSMENU_WIN); /* Return to browser */ + break; + + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_goto_cb + + $Description: Callback function for the goto URL menu + + $Returns: + + $Arguments: menu - pointer to current menu + item - pointer to current menu item + +*******************************************************************************/ + +static void AUI_goto_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_goto_cb"); +#endif + + if (!data) + { + return; + } + + data->menu_win = NULL; + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_memory_alloc + + $Description: Allocate a block of memory + + $Returns: Address if successful, null if not. + + $Arguments: size of memory to be allocated. + +*******************************************************************************/ +// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar +// Description: MFW memory size variable changed from U16 -> U32 +// Solution: The use of variable U16 has been replaced with U32 + +UBYTE* AUI_wap_memory_alloc(U32 size) +{ +#ifdef TRACE_MEMALLOC + memUsed += size; + if (size<110) + { + memTracker[size]++; + TRACE_EVENT_P2("ALLOC %d, tracking = %d", size, memTracker[size]); + } + else + { + TRACE_EVENT_P2("ALLOC %d, used = %d", size, memUsed); + } +#endif + + return mfwAlloc(size); +} + + +/******************************************************************************* + + $Function: AUI_wap_memory_free + + $Description: Called by the WAP.ATB to free memory + + $Returns: + + $Arguments: address and size of memory to be freed. + +*******************************************************************************/ +// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar +// Description: MFW memory size variable changed from U16 -> U32 +// Solution: The use of variable U16 has been replaced with U32 + +void AUI_wap_memory_free(UBYTE* address,U32 size) +{ +#ifdef TRACE_MEMALLOC + memUsed -= size; + if (size<110) + { + memTracker[size]--; + TRACE_EVENT_P2("FREE %d, tracking = %d", size, memTracker[size]); + } + else + { + TRACE_EVENT_P2("FREE %d, used = %d", size, memUsed); + } +#endif + + mfwFree(address,size); + return; +} + +/******************************************************************************* + + $Function: AUI_wap_string_alloc + + $Description: Allocates memory for a string. Will free any existing + stored string. + + $Returns: None. + + $Arguments: Size of string to be allocated, in unicode characters, not including + null terminator. + +*******************************************************************************/ + +static void AUI_wap_string_alloc(T_WAP_STRING *string, USHORT size) +{ + if (string->length!=0) + { + /* If the size is correct, no allocation or freeing required */ + + if (string->length==size) + return; + + /* Otherwise, free the current message block */ + + AUI_wap_string_free(string); + } + + string->text = (USHORT *)AUI_wap_memory_alloc((size+1)*sizeof(USHORT)); + string->length = size; + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_string_free + + $Description: Frees an allocated string + + $Returns: None. + + $Arguments: string - Pointer to the string + +*******************************************************************************/ + +static void AUI_wap_string_free(T_WAP_STRING *string) +{ + if (string->length!=0) + { + AUI_wap_memory_free((UBYTE *)string->text, (string->length+1)*sizeof(USHORT)); + string->text = NULL; + string->length = 0; + } + + return; +} + + +/******************************************************************************* + + $Function: ATB_wap_card_show + + $Description: Called by the WAP ATB to show the and/or create the card window. + + $Returns: None. + + $Arguments: View - The current view + + +*******************************************************************************/ + +void AUI_wap_card_show_req(T_WAP_VIEW *View) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_card_show_req"); +#endif + + if (!data) + { + return; + } + + /* If the connecting window or list window are still extant, + * destroy them */ + + AUI_destroy(data->win, CONNECT_WIN | LIST_WIN); + + /* If WAP browser window doesn't exist, create it */ + + if (data->browser_win==NULL) + { + data->browser_win = AUI_win_create(data->win); + } + + /* Initialise browser window */ + + SEND_EVENT(data->browser_win,WAP_SHOW_CARD,0,0); + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_status_notify + + $Description: Called by the WAP ATB when a status flag has changed + + $Returns: None. + + $Arguments: View - The current view + status - parameter which status has changed + +*******************************************************************************/ + +void AUI_wap_status_notify(T_WAP_VIEW *View, USHORT status) +{ + T_WAP_DATA *data = AUI_wap_data(); + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_status_notify"); +#endif + + if (!data) + { + return; + } + + switch (status) + { + + /* If no status, destroy connecting window */ + + case ATB_WAP_NO_STATUS: + TRACE_EVENT("ATB_WAP_NO_STATUS"); + AUI_destroy(data->win, CONNECT_WIN); + break; + + /* GPRS attach in progress */ + + case ATB_WAP_ATTACHING: + TRACE_EVENT("ATB_WAP_ATTACHING"); + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_ATTACHING); + break; + + /* GPRS failed to attach */ + + case ATB_WAP_ATTACH_FAILED: + TRACE_EVENT("ATB_WAP_ATTACH_FAILED"); + AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN); + AUI_info_dialog(data->win, TxtGPRS, TxtNotAvailable); + break; + + /* GPRS error occurred */ + + case ATB_WAP_ERROR: + TRACE_EVENT("ATB_WAP_ERROR"); + if (wap_callActive || data->connected) + { + AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN); + AUI_info_dialog(data->win, TxtGPRS, TxtError); + wap_callActive = FALSE; + data->connected = FALSE; + } + break; + + /* PDP context activation failed */ + + case ATB_WAP_ACTIVATE_FAILED: + TRACE_EVENT("ATB_WAP_ACTIVATE_FAILED"); + AUI_destroy(data->win, CONNECT_WIN); + AUI_wap_end_call(-1); /* End GPRS data call */ + AUI_info_dialog(data->win, TxtConnection, TxtFailed); + wap_callActive = FALSE; + data->connected = FALSE; + break; + + /* Connection to WAP gateway is proceeding */ + + case ATB_WAP_CONNECTING: + TRACE_EVENT("ATB_WAP_CONNECTING"); + + wap_callActive = TRUE; + data->connected = TRUE; + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_CONNECTING); + break; + + /* Connection has been established */ + + case ATB_WAP_LOGGING_IN: + TRACE_EVENT("ATB_WAP_LOGGING_IN"); + /* If browser window is present, destroy it, + * so on re-creation it will be the top window */ + + AUI_destroy(data->win, BROWSER_WIN); + + /* Display dialog with "Logging In" */ + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_LOGGING_IN); + break; + + /* Card is being downloaded from network */ + + case ATB_WAP_DOWNLOADING: + TRACE_EVENT("ATB_WAP_DOWNLOADING"); + data->connected = TRUE; + break; + + /* Status to indicate card is being read + * from cache or from network */ + + case ATB_WAP_CARD_READING: + TRACE_EVENT("ATB_WAP_CARD_READING"); + if (data->connect_win) + { + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_CARD_READING); + } + break; + + /* The connection has been closed */ + + case ATB_WAP_ONLINE_CONNECTION_CLOSED: + TRACE_EVENT("ATB_WAP_ONLINE_CONNECTION_CLOSED"); + AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN | OPTIONS_WIN | OPTIONSMENU_WIN); + data->connected = FALSE; + wap_callActive = FALSE; + break; + + /* WAP is waiting for a signal from the network */ + + case ATB_WAP_PLEASE_WAIT: + TRACE_EVENT("ATB_WAP_PLEASE_WAIT"); + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_PLEASE_WAIT); + break; + + /* WAP is shutting down */ + + case ATB_WAP_SHUTTING_DOWN: + TRACE_EVENT("ATB_WAP_SHUTTING_DOWN"); + break; + + /* Waiting for PDP context to deactivate */ + + case ATB_WAP_DEACTIVATING: + TRACE_EVENT("ATB_WAP_DEACTIVATING"); + data->connect_win = AUI_connecting_dialog(data->win, ATB_WAP_DEACTIVATING); + break; + + default: + TRACE_EVENT("** UNKNOWN STATUS **"); + return; + } + + if (data->browser_win) /*The card is prompted to show the status*/ + { + TRACE_EVENT("Updating card view for status."); + win_show(data->browser_win); + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_change_soft_key + + $Description: Called by the WAP.ATB when the card requests a custom text for a + soft key + + $Returns: None + + $Arguments: View - The current view + Label - The text of the custom soft key + length - Length of the text + keyId - The id of the key, to send to the AUS Browser + when the key is pressed. + +*******************************************************************************/ + +void AUI_wap_change_soft_key(T_WAP_VIEW *View, USHORT *Label, USHORT length, USHORT keyId) +{ + T_WAP_DATA *data = AUI_wap_data(); + SHORT optionsWidth; + USHORT optionsLength; + SHORT labelWidth; + char *LeftKeyTag = (char *)data->LeftSoftKey; + char *RightKeyTag = (char *)data->RightSoftKey; + USHORT *LeftKeyText = &data->LeftSoftKey[1]; + USHORT *RightKeyText = &data->RightSoftKey[1]; + +#ifdef TRACE_AUIWAP + TRACE_FUNCTION("AUI_wap_change_soft_key"); +#endif + + if (!data) + { + return; + } + + if (length > 0) + { + /* Insert unicode tag and convert to MMI unicode */ + + LeftKeyTag[0] = 0x80; + LeftKeyTag[1] = 0x7F; + optionsLength = AUI_textid_to_uc(LeftKeyText, TxtSoftOptions, SOFTKEY_MAX_LEN); + RightKeyTag[0] = 0x80; + RightKeyTag[1] = 0x7F; + ATB_uc_text_copy(RightKeyText, Label, length); + ATB_uc_text_convert(RightKeyText, length); + + /* Make sure softkeys fit into the space by cropping them if necessary */ + + optionsWidth = ATB_uc_text_width(LeftKeyText, optionsLength); + labelWidth = ATB_uc_text_width(RightKeyText, length); + + if ((labelWidth+optionsWidth) > WAP_TOTAL_WIDTH) /* If they don't fit... */ + { + optionsWidth = WAP_TOTAL_WIDTH-labelWidth-WAP_SOFTKEY_SPACING; /* Try shortening "options" */ + if (optionsWidth<ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH)) /* If it's too short.... */ + { + optionsWidth = ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH); /* Shorten the other key */ + labelWidth = WAP_TOTAL_WIDTH-optionsWidth-WAP_SOFTKEY_SPACING; + } + } + ATB_uc_text_crop(LeftKeyText, optionsLength, optionsWidth); /* Crop the texts */ + ATB_uc_text_crop(RightKeyText, length, labelWidth); + View->CustSoftKeys = TRUE; /* We are using cust. soft keys */ + View->CustSoftKeyId = keyId; + } + else + View->CustSoftKeys = FALSE; + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_stringID + + $Description: Gives the ATB the text of a required string (specific for now) + + $Returns: The length of the destination string. + + $Arguments: dest - The destination string (MMI Unicode) + destlen - Maximum length the destination string can be in Unicode characters. + stringID - The string required. + +*******************************************************************************/ + +USHORT AUI_wap_stringID(USHORT *dest, USHORT destlen, USHORT stringID) +{ + USHORT *temp; + USHORT src; + USHORT length; + + switch (stringID) + { + case WAP_STRING_DOWNLOADING: + src = TxtDownloading; + break; + + case WAP_STRING_UPDATING: + src = TxtUpdating; + break; + + case WAP_STRING_UNTITLED: + src = TxtUntitled; + break; + + default: + src = TxtError; + break; + } + + length = AUI_textid_to_uc(dest, src, destlen); + + return length; +} + + +/******************************************************************************* + + $Function: AUI_textid_to_uc + + $Description: Converts a string from a text ID to an MMI-converted unicode string. + + $Returns: Length of resulting string + + $Arguments: dest - Place to store the result. + textId - The string to translate. + destlen - Maximum length of result + +*******************************************************************************/ + +static USHORT AUI_textid_to_uc(USHORT *dest, int textId, USHORT destlen) +{ + USHORT length; + char *srctext = MmiRsrcGetText(textId); + + if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) + { + length = ATB_uc_text_copy(dest, (USHORT *)srctext, destlen); + } + else + { + length = ATB_char_to_uc(dest, srctext); + } + + return length; +} + + +/******************************************************************************* + + $Function: AUI_text_to_uc + + $Description: Converts a standard unicode string to an MMI-converted unicode string, + including the 0x80 at the start + + $Returns: N/A + + $Arguments: dest - Place to store the result. + src - The string to translate. + destLen - Size of destination array in unicode characters + +*******************************************************************************/ + +static USHORT AUI_text_to_uc(USHORT *dest, USHORT *src, USHORT destlen) +{ + USHORT length; + + length = ATB_uc_text_copy(&dest[1], src, destlen); + ATB_uc_text_convert(&dest[1], length); + + dest[0] = 0x7F80; + + return length; +} + + +/******************************************************************************* + + $Function: AUI_wap_launch_browser + + $Description: Launches the browser to a given URL and a bearer list arranged by priority. + + $Returns: TRUE-> succesfully launched, FALSE -> error + + $Arguments: The URL and the bearer list. + +*******************************************************************************/ + +T_MFW_HND AUI_wap_launch_browser(char *URL,UBYTE* bearer_list,UBYTE bearer_list_len) +{ + T_MFW_HND wap_window; + + if (!(wap_window = AUI_create(idle_get_window()))) + return NULL; /*Error */ + + AUI_connect_URL(wap_window,URL); + + return wap_window; +} + + +/******************************************************************************* + + $Function: AUI_wap_extDestroy + + $Description: Allows external files to destroy the WAP application + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_extDestroy(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + + if (!data) + { + return; + } + + AUI_destroy(data->win, ALL_WIN); + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_call_connect + + $Description: Called when a CSD call is connected + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +void AUI_wap_call_connect(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + if (!data) + { + return; + } + + if (data->View) + { + TRACE_FUNCTION("AUI_wap_call_connect()"); + data->View->cId = cId; + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_call_disconnect + + $Description: Called when a CSD call is terminated - informs WAP of this. + + $Returns: None. + + $Arguments: The ID of the call. + +*******************************************************************************/ + +void AUI_wap_call_disconnect(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_call_disconnect()"); + + if (!data) + { + return; + } + + if (data->View) + { + /* View exists; are we in the connected, or in the connecting screen? */ + + if (data->connected || data->connect_win || data->browser_win) + { + /* Check it's the right call */ + + if (cId==data->View->cId) + { + ATB_wap_disconnect(data->View); /* Disconnect WAP browser */ + data->View->cId = -1; + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + AUI_error_dialog(data->View, ERROR_CALL_DISCONNECTED); + } + } + } + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_end_call + + $Description: Determine whether call is CSD or GPRS, and attempt to end it. + + $Returns: None. + + $Arguments: cId - call ID of the CSD call (ignored for GPRS profile). + +*******************************************************************************/ + +void AUI_wap_end_call(SHORT cId) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_end_call()"); + + if (!data) + { + return; + } + + /* If WAP browser is active, inform it of disconnection */ + + if (data->View) + { + /* If there is a waiting incoming call, accept it now */ + + if (data->call_waiting) + { + cm_mt_accept(); + data->call_waiting = FALSE; + return; + } + + ATB_wap_disconnect(data->View); + + if (data->View->Profile->AccessType == WAP_CS_DATA) + { + /* If call ID is not -1, call is active. + * End it using cm_disconnect */ + + if (data->View->cId!=-1) + { + TRACE_EVENT_P1("Disconnecting CSD call: %d", data->View->cId); + cm_disconnect(data->View->cId); + data->View->cId = -1; + } + + if (call_get_window()) + { + TRACE_EVENT("Destroying calling window."); + SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0); + data->View->cId = -1; + } + return; + } + else + { + TRACE_EVENT("Disconnect GPRS call."); + + /* If GPRS call is not yet terminated, set + * status so "Please Wait" is shown until it is. */ + + if (!disconnect_wap_call(WAP_GPRS_DATA)) + { + TRACE_EVENT("Waiting for disconnection."); + ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING); + } + return; + } + } + + /* If we've reached here, the the WAP application + * is closed, but the call is still open */ + + TRACE_EVENT("WAP is closed; attempting to end call"); + + /* If call ID is not -1, call is active. + * End it using cm_disconnect */ + + if (cId!=-1) + { + TRACE_EVENT("Disconnecting CSD call in progress."); + cm_disconnect(cId); + } + + /* Destroy calling window */ + + if (call_get_window()) + { + TRACE_EVENT("Destroying calling window."); + SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0); + } + +#ifdef MMI_GPRS_ENABLED + /* Terminate any GPRS call in progress. + * If GPRS call is not yet terminated, set + * status so "Please Wait" is shown until it is. */ + if (!disconnect_wap_call(WAP_GPRS_DATA)) + { + TRACE_EVENT("Waiting for disconnection."); + ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING); + } +#endif + + return; +} + + +/******************************************************************************* + + $Function: AUI_wap_in_call + + $Description: Returns TRUE if a WAP CSD call is currently active. + + $Returns: TRUE or FALSE + + $Arguments: None. + +*******************************************************************************/ + +UBYTE AUI_wap_in_call(void) +{ + T_WAP_DATA *data = AUI_wap_data(); + + UBYTE result; + + TRACE_FUNCTION("AUI_wap_in_call()"); + + if (!data) + { + return FALSE; + } + + result = FALSE; + + /* Ensure that view is open */ + + if (data->View) + { + /* If the call ID is not -1, there is a call in progress */ + if (data->View->cId!=-1) + { + result = TRUE; + } + } + + return result; +} + + +/******************************************************************************* + + $Function: AUI_wap_browser_disconnect() + + $Description: Shuts down browser. Only use in the case where + there is an incoming call waiting to be accepted. + + $Returns: TRUE or FALSE + + $Arguments: None. + +*******************************************************************************/ + +void AUI_wap_browser_disconnect() +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_browser_disconnect()"); + + if (!data) + { + return; + } + + if (data->View) + { + data->call_waiting = TRUE; /* There is a waiting call */ + ATB_wap_stop_download(data->View); /* Stop any active download */ + ATB_wap_disconnect(data->View); /* Disconnect the WAP browser */ + AUI_destroy(data->win, ALL_WIN); /* Shut down WAP */ + } + + return; +} + + +#ifdef MMI_GPRS_ENABLED + +/******************************************************************************* + + $Function: AUI_wap_GPRS_status + + $Description: Called when GPRS state changes. If WAP is active, updates status. + + $Returns: None. + + $Arguments: status - The GPRS status + +*******************************************************************************/ + +void AUI_wap_gprs_status(UBYTE status) +{ + T_WAP_DATA *data = AUI_wap_data(); + + TRACE_FUNCTION("AUI_wap_gprs_status()"); + + if (!data) + { + return; + } + + if (data->View->Profile->AccessType==WAP_GPRS_DATA) + { + switch (status) + { + case GPRS_ATTACHED: + TRACE_EVENT("STATUS: Attached."); + + /* Check that login is still proceeding */ + + if (ATB_wap_status_get(data->View, ATB_WAP_ATTACHING)) + { + ATB_wap_status_change(data->View, ATB_WAP_LOGGING_IN); + /* Are now attached, can connect */ + connect_gprs(data->View->object_id); + } + break; + + case GPRS_OFF: + TRACE_EVENT("STATUS: Detached"); + disconnect_wap_call(WAP_GPRS_DATA); + ATB_wap_status_change(data->View, ATB_WAP_ATTACH_FAILED); + break; + + case GPRS_CONTEXT_ACTIVATE: + TRACE_EVENT("STATUS: Context Activated"); + break; + + case GPRS_CONTEXT_DEACTIVATE: + TRACE_EVENT("STATUS: Context Deactivated"); + + /* If we're deactivating, this is OK, finish closing */ + + if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING)) + { + ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED); + } + + /* Otherwise, PDP context activation has failed */ + + else if (ATB_wap_status_get(data->View, ATB_WAP_PLEASE_WAIT) + || ATB_wap_status_get(data->View, ATB_WAP_CONNECTING) + || ATB_wap_status_get(data->View, ATB_WAP_LOGGING_IN)) + { + ATB_wap_status_change(data->View, ATB_WAP_ACTIVATE_FAILED); + } + break; + + + case GPRS_ERROR: + TRACE_EVENT("STATUS: ERROR"); + AUI_wap_end_call(-1); /* Call ID is -1 for GPRS */ + ATB_wap_status_change(data->View, ATB_WAP_ERROR); + break; + } + } + return; +} +#endif /* MMI_GPRS_ENABLED */ +#endif /* !#ifdef FF_GPF_TCPIP */