diff src/aci2/bmi/AUIPinEditor.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/AUIPinEditor.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,973 @@
+/*******************************************************************************
+
+	CONDAT (UK)
+
+********************************************************************************
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.
+
+********************************************************************************
+
+ $Project name: Basic MMI
+ $Project code: BMI (6349)
+ $Module:   MMI
+ $File:       AUIPinEditor.c
+ $Revision:   1.0
+
+ $Author:   Condat(UK)
+ $Date:       22/02/01
+
+********************************************************************************
+
+ Description: Editor for PIN entry
+
+
+********************************************************************************
+
+ $History: AUIPinEditor.c
+
+ 	July 09, 2005   REF : MMI - 22565 - a0876501
+	Description:	Proper display of IMEI with CD byte.
+	Solution:		Increased the IMEI length from 16 to 18.                                                                           
+
+   	June 16, 2005  REF: CRR 31267  x0021334
+	Description: Handset ignore the initializtion of the PIN1/PIN2
+	Fix:	Cheking is done to ascertain if PIN1/PIN2 are initialised. If not, appropriate
+	       message is displayed to the user.
+
+ 	May 02, 2005   REF : LOCOSTO-ENH-30818 - xpradipg
+	Description:	IMEI retreival  by posting a call to ACI sAT_xx API
+	Solution:		The direct call to cl_get_imeisv() is replaced with the
+					call to the mmi_imei_retrieve() which inturn calls sAT_Dn() and
+					retrieves the IMEI info and stores it onto the global 
+					variable "imei"                                                                           
+  14/11/02      Original Condat(UK) BMI version.
+ $End
+
+*******************************************************************************/
+
+#define ENTITY_MFW
+
+/* includes */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#include "mfw_tim.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+#include "mfw_ss.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 "mfw_sim.h"
+#include "mfw_ssi.h"
+
+#include "dspl.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+#include "MmiDummy.h"
+#include "MmiMmi.h"
+
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "MmiIdle.h"
+#include "MmiResources.h"
+
+#include "cus_aci.h"
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+#include "mmiColours.h"
+
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#include "AUITextEntry.h"
+
+#include "AUIPinEditor.h"
+
+//Nov 17, 2005   REF : OMAPS00045901 - a0876501
+#define IMEI_DISP_LEN 18	/* IMEI display now includes CD byte. Hence the size has been increased from 16 to 18 */
+
+typedef struct
+{
+    T_MMI_CONTROL		mmi_control;
+    T_MFW_HND			parent;				// The parent window
+    T_MFW_HND			win;				// The edit window
+    T_MFW_HND			kbd;				// The keyboard handler
+    T_MFW_HND			kbd_long;			// The longpress keyboard handler
+    T_MFW_HND			timer;				// The timer for timeouts
+
+	T_ED_DATA			*editor;			/* The ATB editor */
+	T_AUI_EDITOR_DATA	editor_data;		/* The MMI editor data, provided by caller */
+    T_AUI_ENTRY_DATA	*entry_data;		/* The MMI text entry data */
+	
+	BOOL				haveTitle;			/* TRUE if a title is supplied */
+    T_ATB_TEXT			title;				/* Title of editor */
+
+	BOOL				hidden;
+
+	BOOL				doNextLongPress;	/* Flag used to notice/not notice long keypress */
+	BOOL				enteredMinChars;	/* Set to TRUE when at least min_enter characters have been entered */
+	BOOL				enteredSomeChars;	/* Set to TRUE if the length of the entered data is non-zero */
+	UBYTE				emergency_call;		/* Set to TRUE if number is an emergency call number */
+	UBYTE				ss_string;
+	char				imei[IMEI_DISP_LEN];/* IMEI display now includes CD byte. Hence the size has been increased from 16 to 18 */
+}
+T_AUI_PIN_DATA;
+
+#define AUI_MAX_PIN 16
+
+// June 16, 2005  REF: CRR 31267  x0021334
+extern BOOL pin1Flag; // This flag will be needed here
+
+typedef struct
+{
+	U8		pin_id;
+	char		puk_code[AUI_MAX_PIN + 1];
+	char		new_pin[AUI_MAX_PIN + 1];
+	char		cnf_pin[AUI_MAX_PIN + 1];
+}
+T_AUI_PINS;
+/* LOCAL FUNCTION PROTOTYPES */
+static T_MFW_HND AUI_pin_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data);
+static void AUI_pin_ExecCb(T_MFW_HND win, USHORT event, SHORT value, void *parameter);
+static int AUI_pin_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data);
+static int AUI_pin_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard);
+static int AUI_pin_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard);
+static UBYTE AUI_pin_CheckEmergency(T_AUI_PIN_DATA *data);
+T_MFW_SS_RETURN AUI_pin_CheckSSString(T_AUI_PIN_DATA *data);
+static BOOL AUI_pin_StripSSUnblock(char *cmd_string, T_AUI_PINS *pin_data);
+
+
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_Start
+
+ $Description:	Start the PIN editor.
+
+ $Returns:		None.
+
+ $Arguments:	None.
+
+*******************************************************************************/
+
+T_MFW_HND AUI_pin_Start(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
+{
+    T_MFW_HND win;
+
+    TRACE_FUNCTION ("AUI_pin_Start()");
+
+    win = AUI_pin_Create(parent, editor_data);
+
+    return win;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_Create
+
+ $Description:	Create the PIN editor.
+ 
+ $Returns:		Pointer to the editor's window.
+
+ $Arguments:	parent	-	The parent window.
+
+*******************************************************************************/
+
+static T_MFW_HND AUI_pin_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
+{
+    T_AUI_PIN_DATA	*data;
+    T_MFW_WIN     		*win_data;
+
+    TRACE_FUNCTION ("AUI_pin_Create()");
+    TRACE_EVENT_P1("Memory left (start): %d", mfwCheckMemoryLeft());
+
+ 	data = (T_AUI_PIN_DATA *)ALLOC_MEMORY(sizeof (T_AUI_PIN_DATA));
+ 	TRACE_EVENT_P1("Memory left (data): %d", mfwCheckMemoryLeft());
+
+	/* Create window handler */
+
+    data->win = win_create(parent, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_pin_WinCb);	// Create window
+	TRACE_EVENT_P1("Memory left (win): %d", mfwCheckMemoryLeft());
+
+    if (data->win==NULL)														// Make sure window exists
+    {
+		return NULL;
+    }
+
+	/* Connect the dialog data to the MFW-window */
+     
+    data->mmi_control.dialog	= (T_DIALOG_FUNC)AUI_pin_ExecCb;				/* Setup the destination for events */
+    data->mmi_control.data		= data;
+    data->parent				= parent;
+    win_data					= ((T_MFW_HDR *)data->win)->data;
+    win_data->user				= (void *)data;
+
+ 	data->kbd					= kbd_create(data->win, KEY_ALL,(T_MFW_CB)AUI_pin_KbdCb);
+	data->kbd_long				= kbd_create(data->win, KEY_ALL|KEY_LONG,(T_MFW_CB)AUI_pin_KbdLongCb); 
+	data->editor				= ATB_edit_Create(&data->editor_data.editor_attr,0);
+TRACE_EVENT_P1("Memory left (editor): %d", mfwCheckMemoryLeft());
+	data->editor_data = *editor_data;
+	data->entry_data = AUI_entry_Create(data->win, data->editor, E_PIN_UPDATE);
+TRACE_EVENT_P1("Memory left (entry): %d", mfwCheckMemoryLeft());
+	SEND_EVENT(data->win, E_PIN_INIT, 0, 0);
+	
+    /* Return window handle */
+
+    return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_Destroy
+
+ $Description:	Destroy the PIN editor.
+
+ $Returns:		None.
+
+ $Arguments:	window	-	The editor window.
+
+*******************************************************************************/
+
+void AUI_pin_Destroy(T_MFW_HND win)
+{
+    T_MFW_WIN		*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_PIN_DATA	*data		= (T_AUI_PIN_DATA *)win_data->user;
+
+	TRACE_FUNCTION("AUI_pin_Destroy");
+	TRACE_EVENT_P1("Memory left at start: %d", mfwCheckMemoryLeft());
+    if (data)
+    {
+    	/* Free memory allocated for title */
+
+		if (data->haveTitle)
+		{
+			FREE_MEMORY(data->title.data, (data->title.len+1)*ATB_string_Size(&data->title));
+			TRACE_EVENT_P1("Memory left (title dest): %d", mfwCheckMemoryLeft());
+		}
+
+		/* Free text entry memory */
+		
+		AUI_entry_Destroy(data->entry_data);
+		TRACE_EVENT_P1("Memory left (entry dest): %d", mfwCheckMemoryLeft());
+		/* Delete window */
+		
+        win_delete (data->win);
+		TRACE_EVENT_P1("Memory left (win dest): %d", mfwCheckMemoryLeft());
+		/* Free editor memory */
+
+		ATB_edit_Destroy(data->editor);
+		TRACE_EVENT_P1("Memory left (editor dest): %d", mfwCheckMemoryLeft());	
+		/* Free Memory */
+
+		FREE_MEMORY ((void *)data, sizeof (T_AUI_PIN_DATA));
+		TRACE_EVENT_P1("Memory left (data dest): %d", mfwCheckMemoryLeft());
+    }
+    
+    return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_pin_ExecCb
+
+ $Description:	Dialog function for PIN editor.
+ 
+ $Returns:		None.
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+static void AUI_pin_ExecCb(T_MFW_HND win, USHORT event, SHORT value, void *parameter)
+{
+    T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+    T_AUI_PIN_DATA		*data		= (T_AUI_PIN_DATA *)win_data->user;
+    T_MFW_HND			parent_win	= data->parent;
+	T_ATB_TEXT			text;
+	/* Store these in case editor is destroyed on callback */
+    USHORT				Identifier	= data->editor_data.Identifier;
+    T_AUI_EDIT_CB		Callback	= data->editor_data.Callback;
+    UBYTE				destroyEditor = data->editor_data.destroyEditor;
+	T_AUI_PINS		*pin_unblock_data;
+	
+    TRACE_FUNCTION ("AUI_pin_ExecCb()");
+
+    switch (event)
+    {
+    	/* Initialise */
+    
+        case E_PIN_INIT:
+        	TRACE_EVENT("E_PIN_INIT");
+        	ATB_edit_Init(data->editor);
+
+        	data->haveTitle = FALSE;
+
+			/* If we require an output line, shrink editor to fit it at bottom
+			 * NB TitleString is assumed here to be a numeric string of ascii digits */
+
+			if (data->editor_data.TitleString)
+			{
+				data->haveTitle = TRUE;
+				text.data = data->editor_data.TitleString;
+			}
+
+			/* Set up title */
+
+			if (data->editor_data.TitleId!=NULL)
+			{
+				data->haveTitle = TRUE;
+				text.data = (UBYTE *)MmiRsrcGetText(data->editor_data.TitleId);
+			}
+
+			/* If title exists, get its dcs and length */
+			
+			if (data->haveTitle)
+			{
+				if (text.data[0]==0x80)
+				{
+					text.data += 2;		/* Skip over two unicode indicator bytes */
+					text.dcs = ATB_DCS_UNICODE;
+				}
+#ifdef EASY_TEXT_ENABLED
+				else if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+				{
+					text.dcs = ATB_DCS_UNICODE;
+				}
+#endif
+				else
+				{
+					text.dcs = ATB_DCS_ASCII;
+				}
+				
+				text.len = ATB_string_Length(&text);
+				/* Allocate memory for the title and copy the text there */
+				data->title.data = (UBYTE *)ALLOC_MEMORY((text.len+1)*ATB_string_Size(&text));
+				TRACE_EVENT_P1("Memory left (title): %d", mfwCheckMemoryLeft());
+				ATB_string_Copy(&data->title, &text);
+			}
+
+			/* Set flag if min_enter characters are in buffer */
+
+			if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
+				data->enteredMinChars = TRUE;
+			else
+				data->enteredMinChars = FALSE;
+				
+			/* Set flag if some characters are in the buffer */
+			if (data->editor_data.editor_attr.text.len > 0 )
+				data->enteredSomeChars = TRUE;
+			else
+				data->enteredSomeChars = FALSE;
+
+			/* Show the window */
+			win_show(data->win);
+			break;
+
+		case E_PIN_UPDATE:
+        	TRACE_EVENT("E_PIN_UPDATE");
+			win_show(data->win);
+			break;
+
+		case E_PIN_DEINIT:
+			TRACE_EVENT("E_PIN_DEINIT");
+
+			if (Callback)
+    	    	(Callback) (parent_win, Identifier, value);
+    	    	
+			if (destroyEditor)
+				AUI_pin_Destroy(data->win);
+				
+			break;
+
+		case E_PUK1_COMPLETE:
+			TRACE_EVENT("E_PIN_COMPLETE");
+
+			pin_unblock_data = (T_AUI_PINS *)parameter;
+			
+			sim_unblock_pin(pin_unblock_data->pin_id,
+							 pin_unblock_data->puk_code,
+							 pin_unblock_data->new_pin); /* unblock pin1 */
+
+			if (destroyEditor)
+				AUI_pin_Destroy(data->win);
+			
+			break;
+
+   	}
+
+    return;
+}
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_WinCb
+
+ $Description:	PIN editor window event handler.
+
+ $Returns:		None.
+
+ $Arguments:	event	- the event
+ 				win		- the editor window
+
+*******************************************************************************/
+
+static int AUI_pin_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data)
+{
+    T_AUI_PIN_DATA		*data			= (T_AUI_PIN_DATA *)win_data->user;
+    T_ED_DATA			*editor			= data->editor;
+    T_ATB_WIN_SIZE		*win_size		= &data->editor->attr->win_size;
+	T_ATB_TEXT			text;
+    T_DS_TEXTFORMAT		format;
+  //  USHORT				titleLen;  // RAVI
+
+       if (!data)
+		return MFW_EVENT_CONSUMED;
+  
+    switch(event)
+    {
+        case E_WIN_VISIBLE: 											/* window is visible */
+            if (win_data->flags & E_WIN_VISIBLE)
+			{
+				if (editor->update==ED_UPDATE_TRIVIAL)
+				{
+					TRACE_EVENT("Only updating editor.");
+					ATB_edit_Show(data->editor);
+				}
+				else
+				{
+					TRACE_EVENT("Updating whole screen.");
+
+					ATB_edit_Show(data->editor);
+
+					/* Set the colour for drawing title */
+
+					resources_setTitleColour(COLOUR_EDITOR);
+
+					/* TITLE - only display if update type is FULL or DEFAULT*/
+
+					if (editor->update!=ED_UPDATE_PARTIAL)
+					{
+						dspl_Clear(0,0, SCREEN_SIZE_X-1, win_size->py-1);
+						
+						if (data->haveTitle)
+						{
+							ATB_display_SetFormatAttr(&format, 0, FALSE);
+							
+							/* Display "Emergency?" prompt in title if emergency call */
+							if (data->emergency_call)
+							{
+								text.dcs = data->title.dcs;
+								text.data = (UBYTE *)MmiRsrcGetText(TxtEmergency);
+								text.len = ATB_string_Length(&text);
+								ATB_display_Text(0,0,&format, &text);
+							}
+							/* Otherwise, show title */
+							else
+							{
+								ATB_display_Text(0,0,&format, &data->title);
+							}
+						}
+					}
+					
+					/* Display Soft Keys */
+					
+					if (data->emergency_call)
+		            {
+		            	displaySoftKeys(TxtSoftCall, data->editor_data.RightSoftKey);
+		            }
+					else
+					{
+						if (data->editor_data.editor_attr.text.len < data->editor_data.min_enter)
+						{
+							/* entered less than the required number of chars: Alternate Softkey appears */
+							if (data->editor_data.editor_attr.text.len > 0)
+								displaySoftKeys(data->editor_data.AltLeftSoftKey,data->editor_data.RightSoftKey);
+							else
+								displaySoftKeys(data->editor_data.AltLeftSoftKey,TxtNull);
+						}
+						else
+						{
+							/* entered sufficient number of chars: Normal Softkey appears */
+						
+							if (data->editor_data.editor_attr.text.len > 0)
+								displaySoftKeys(data->editor_data.LeftSoftKey,data->editor_data.RightSoftKey);
+							else
+								displaySoftKeys(data->editor_data.LeftSoftKey, TxtNull);
+						}
+					}
+				}
+			}
+            break;
+    }
+
+	data->editor->update = ED_UPDATE_DEFAULT;
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_KbdCb
+
+ $Description:	PIN editor keyboard event handler
+
+ $Returns:		None.
+
+ $Arguments:	event		- the keyboard event
+ 				keyboard 
+
+*******************************************************************************/
+
+static int AUI_pin_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	T_MFW_HND			win			= mfw_parent (mfw_header());
+	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+	T_AUI_PIN_DATA		*data		= (T_AUI_PIN_DATA *)win_data->user;
+//	ED_RES				result;    // RAVI
+	UBYTE				*edit_data_buf;
+	BOOL				bRetVal;
+	T_AUI_PINS			pin_unblock_data;
+	T_DISPLAY_DATA 		display_info;
+  	
+	TRACE_FUNCTION("AUI_pin_KbdCb()");
+
+   /* Suppress unwanted long keypresses */
+
+	data->doNextLongPress = TRUE;         		/* next Key_long event is correct */
+	data->editor->update = ED_UPDATE_DEFAULT;	/* Default behaviour is just to update text */
+
+	switch (keyboard->code)
+	{
+		case KCD_STAR:
+			/* Only possible when the first digit is a '*' */
+			if ((data->editor_data.editor_attr.text.len==0) ||
+			     (data->ss_string))
+			{
+				if (data->editor_data.editor_attr.text.len==0)
+				{
+					data->hidden = FALSE;
+					data->ss_string = TRUE;
+					/* The string should now be visible on screen */
+					if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+					{
+						data->hidden = TRUE;
+						ATB_edit_ResetMode(data->editor, ED_MODE_HIDDEN);
+					}
+				}
+
+				AUI_entry_EventKey(data->entry_data, event, keyboard);
+				win_show(data->win);
+			}
+			break;
+
+		case KCD_HASH:
+			/* Send SS string if we're entering one */
+			if(data->ss_string)
+			{
+				AUI_entry_EventKey(data->entry_data, event, keyboard);
+
+				edit_data_buf = ALLOC_MEMORY(data->editor_data.editor_attr.size);
+
+				strcpy((char *)edit_data_buf, (char *)data->editor_data.editor_attr.text.data);
+
+				switch (AUI_pin_CheckSSString(data))
+				{
+					case MFW_SS_MMI:
+// 	May 02, 2005   REF : LOCOSTO-ENH-30818 - xpradipg
+//	replace the call to get_imei() with callNumber					
+#ifdef FF_MMI_ATC_MIGRATION					
+						mmi_imei_retrieve();
+#else
+						get_imei((char*)data->imei);
+						showIMEI(win,(char*)data->imei);
+#endif						
+						ATB_edit_ClearAll(data->editor);
+
+						/* Set back to the default */
+						data->ss_string = FALSE;
+
+						if (data->hidden == TRUE)
+						{
+							/* go back in the hide mode */
+							ATB_edit_SetMode(data->editor, ED_MODE_HIDDEN);
+						}
+
+						FREE_MEMORY((void *)edit_data_buf, data->editor_data.editor_attr.size);
+						win_show(data->win);
+						return MFW_EVENT_CONSUMED;
+//						break;   // RAVI
+
+					case MFW_SS_SIM_UNBLCK_PIN:
+						bRetVal = AUI_pin_StripSSUnblock((char *)edit_data_buf, &pin_unblock_data);
+
+						FREE_MEMORY((void *)edit_data_buf, data->editor_data.editor_attr.size);
+
+						if (bRetVal == FALSE)
+						{
+							/*
+							** Clear the entered string, reset the editor and display a "failed" dialog
+							*/
+							ATB_edit_ClearAll(data->editor);
+
+							/* Set back to the default */
+							data->ss_string = FALSE;
+
+							if (data->hidden == TRUE)
+							{
+								/* go back in the hide mode */
+								ATB_edit_SetMode(data->editor, ED_MODE_HIDDEN);
+							}
+
+							dlg_initDisplayData_TextId(&display_info, TxtNull, TxtNull, TxtFailed, TxtNull, COLOUR_POPUP);
+							dlg_initDisplayData_events(&display_info, NULL, THREE_SECS, 0);
+							info_dialog(0, &display_info);
+
+						}
+						else
+						{
+							SEND_EVENT (win, E_PUK1_COMPLETE, INFO_KCD_LEFT, &pin_unblock_data);
+						}
+						
+						return MFW_EVENT_CONSUMED;
+//						break;  // RAVI
+
+					default:
+						FREE_MEMORY((void *)edit_data_buf, data->editor_data.editor_attr.size);
+						break;
+				}
+				win_show(data->win);
+
+			}
+			else if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
+			{
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+				{
+					ATB_edit_HiddenExit(data->editor);
+				}
+				SEND_EVENT (win, E_PIN_DEINIT, INFO_KCD_LEFT, NULL);
+			}
+
+			break;
+
+#ifdef COLOURDISPLAY
+		/* Menu select has same effect as left soft key */
+		case KCD_MNUSELECT:
+#endif /* COLOURDISPLAY */
+
+		case KCD_LEFT:
+			/* Make an emergency call if an appropriate number entered */
+			if ( data->emergency_call )
+			{
+				/* Copy the actual typed text into the buffer */
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+				{
+					ATB_edit_HiddenExit(data->editor);
+				}
+				SEND_EVENT (win, E_PIN_DEINIT, INFO_EMERGENCY, NULL);
+			}
+			/* Submit PIN if sufficient characters entered */
+			else if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
+			{
+				// June 16, 2005  REF: CRR 31267  x0021334
+				// If PIN1/PUK1 =0, Show info dialog that SIM is blocked
+				if (pin1Flag EQ TRUE)
+				{
+					dlg_initDisplayData_TextId(&display_info,  NULL, NULL, TxtSimBlocked, TxtDealer, COLOUR_STATUS);
+					dlg_initDisplayData_events(&display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_LEFT | KEY_RIGHT);
+					info_dialog (NULL, &display_info);
+					break;
+				}
+				/* Left Softkey is enabled (and entered sufficient number of chars): execute it. */
+				/* Copy the actual typed text into the buffer */
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+				{
+					ATB_edit_HiddenExit(data->editor);
+				}
+				SEND_EVENT (win, E_PIN_DEINIT, INFO_KCD_LEFT, NULL);
+			}
+			break;
+
+		case KCD_HUP:
+		break;
+
+		case KCD_CALL:
+			/* Make an emergency call if an appropriate number entered */
+			if ( data->emergency_call )
+			{
+				/* Copy the actual typed text into the buffer */
+				if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+				{
+					ATB_edit_HiddenExit(data->editor);
+				}
+				SEND_EVENT (win, E_PIN_DEINIT, INFO_EMERGENCY, NULL);
+			}
+		break;                    
+
+		case KCD_RIGHT:
+			if(data->editor_data.editor_attr.text.len!=0)
+			{
+				ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */
+				
+				/* For a SS string */
+				if ( !ATB_edit_Mode(data->editor,ED_MODE_HIDDEN) )
+				{
+					if (data->editor_data.editor_attr.text.len==0 && data->ss_string)
+					{
+						data->ss_string = FALSE;
+						if (data->hidden == TRUE)
+						{
+							/* The string should not be visible on screen */
+							ATB_edit_SetMode(data->editor, ED_MODE_HIDDEN);
+						}
+					}
+				}
+
+				/* is it a  emergency call number ?!*/
+				AUI_pin_CheckEmergency(data);
+				win_show(data->win);
+			}
+			break;
+
+		case KCD_0:
+		case KCD_1:
+		case KCD_2:
+		case KCD_3:
+		case KCD_4:
+		case KCD_5:
+		case KCD_6:
+		case KCD_7:
+		case KCD_8:
+		case KCD_9:
+			AUI_entry_EventKey(data->entry_data, event, keyboard);
+			/* is it a  emergency call number ?!*/
+			AUI_pin_CheckEmergency(data);
+			win_show(data->win);
+			break;
+		}
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_KbdLongCb
+
+ $Description:	PIN editor long keypress keyboard event handler
+
+ $Returns:		None.
+
+ $Arguments:	event		- the keyboard event
+ 				keyboard 
+
+*******************************************************************************/
+
+static int AUI_pin_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	T_MFW_HND			win			= mfw_parent (mfw_header());
+	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)win)->data;
+	T_AUI_PIN_DATA		*data		= (T_AUI_PIN_DATA *)win_data->user;
+	ED_RES				result;
+	
+    /* Suppress unwanted long keypresses */
+
+	 if ( data->doNextLongPress )
+		data->doNextLongPress = FALSE;       			/* mark Key_long event as consumed but do current long press */
+	else
+		return MFW_EVENT_CONSUMED;      		/* don't do current long press */
+
+	switch (keyboard->code)
+	{        
+		case KCD_RIGHT:
+			/* Long press of RSK deletes buffer */
+			result = ATB_edit_ClearAll(data->editor);
+			
+			/* If we've deleted on an empty buffer, exit editor */
+			if (result==ED_DONE)
+			{
+				SEND_EVENT(data->win, E_PIN_DEINIT, INFO_KCD_RIGHT, 0);
+			}
+			else
+			{
+				win_show(data->win);
+			}
+			break;
+	}
+
+	return MFW_EVENT_CONSUMED;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_CheckEmergency
+
+ $Description:	Check number to see if it's an emergency number
+
+ $Returns:		None.
+
+ $Arguments:	data		- The editor data 
+
+*******************************************************************************/
+
+static UBYTE AUI_pin_CheckEmergency(T_AUI_PIN_DATA *data)
+{
+	UBYTE previous_emergency = data->emergency_call;
+	UBYTE previous_entered = data->enteredMinChars;
+	UBYTE previous_someentered = data->enteredSomeChars;
+	UBYTE emergency_call;
+
+	/*SPR#2235 - DS - If the edit mode is 'hidden' then pass
+	 *the 'hidden buffer' as the parameter to cm_check_emergency.
+	 *If the edit mode is not 'hidden' then pass the normal editor
+	 *text buffer as the parameter.
+	 */
+	if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
+	    emergency_call = cm_check_emergency(data->editor->hiddenText->data);
+	else
+	    emergency_call = cm_check_emergency(data->editor_data.editor_attr.text.data);
+
+	if(emergency_call == TRUE)
+	{
+		TRACE_EVENT(" it is a emergency number !");
+		data->emergency_call = TRUE;
+	}
+	else
+	{
+		data->emergency_call = FALSE;
+	}
+
+	/* Check if we've entered min_enter characters */
+
+	if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
+		data->enteredMinChars = TRUE;
+	else
+		data->enteredMinChars = FALSE;
+
+	if (data->editor_data.editor_attr.text.len > 0)
+		data->enteredSomeChars = TRUE;
+	else
+		data->enteredSomeChars = FALSE;
+		
+	/* Check if the softkeys have changed */
+
+	if (data->emergency_call!=previous_emergency)
+	{
+		data->editor->update = ED_UPDATE_FULL;		/* Update softkeys, title and editor */
+	}
+	else if (data->enteredMinChars!=previous_entered || data->enteredSomeChars!=previous_someentered)
+	{
+		data->editor->update = ED_UPDATE_PARTIAL;	/* Update softkeys and editor */
+	}
+	else
+	{
+		data->editor->update = ED_UPDATE_TRIVIAL;	/* Just update editor */
+	}
+
+	return data->emergency_call;
+}
+
+
+/*******************************************************************************
+
+ $Function:		AUI_pin_CheckSSString
+
+ $Description:	Check number to see if it's an ss string
+
+ $Returns:		None.
+
+ $Arguments:	event		- the keyboard event
+ 				keyboard 
+
+*******************************************************************************/
+
+T_MFW_SS_RETURN AUI_pin_CheckSSString(T_AUI_PIN_DATA *data)
+{
+	return ss_check_ss_string(data->editor_data.editor_attr.text.data);
+}
+
+
+static BOOL AUI_pin_StripSSUnblock(char *cmd_string, T_AUI_PINS *pin_data)
+{
+	T_MFW_SS_RETURN	retVal;
+	char	*rest;
+	T_KSD_SEQPARAM ss_params;
+
+	TRACE_EVENT_P2("AUI_pin_StripSSUnblock : &cmd_string = 0x%08lx, &pin_data = 0x%08lx", cmd_string, pin_data);
+	
+	/*
+	** The incoming parameters chould not be NULL
+	*/
+	if ((cmd_string == NULL) ||
+	     (pin_data == NULL))
+		return FALSE;
+
+	retVal = ss_decode((UBYTE *)cmd_string, &rest, &ss_params);
+
+	if (retVal == MFW_SS_SIM_UNBLCK_PIN)
+	{
+		if (ss_params.ublk.ssCd == KSD_SS_PIN1)
+		{
+			pin_data->pin_id = MFW_SIM_PUK1;
+			strcpy(pin_data->puk_code, (char *)ss_params.ublk.puk);
+			strcpy(pin_data->new_pin, (char *)ss_params.ublk.pin);
+			strcpy(pin_data->cnf_pin, (char *)ss_params.ublk.pin);
+
+			return TRUE;
+		}
+		else
+		{
+			TRACE_EVENT("AUI_pin_StripSSUnblock : Not unblocking PIN1");
+			return FALSE;
+		}
+	}
+	else
+	{
+		TRACE_EVENT_P1("AUI_pin_StripSSUnblock : ss_decode returned %d", retVal);
+		return FALSE;
+	}
+}
+