#include "AEEModGen.h" // Module interface definitions
#include "AEEAppGen.h" // Applet interface definitions
#include "AEEShell.h" // Shell interface definitions
#include "sys_res.h"
#include "IWidget.h"
#include "callapp_main.h"
/*===============================================================================
ORIG ATTEMPT EVENT HANDLER DEFINITIONS
=============================================================================== */
DECLARE_HANDLE_EV_PRESSED( __COriginatedMode_KeyPressed );
BEGIN_EVENT_MAP( gOriginatedModeEH, 1 )
HANDLE_EV_PRESSED(__COriginatedMode_KeyPressed)
END_EVENT_MAP()
DECLARE_HANDLE_EV_DRAW( __COriginatedMode_SimpleDraw );
BEGIN_EVENT_MAP( gOriginatedMode_SimpleDrawEH, 1 )
HANDLE_EV_DRAW(__COriginatedMode_SimpleDraw)
END_EVENT_MAP()
DECLARE_HANDLE_EV_DRAW( __COriginatedMode_LabelDraw );
BEGIN_EVENT_MAP( gOriginatedMode_LabelDrawEH, 1 )
HANDLE_EV_DRAW(__COriginatedMode_LabelDraw)
END_EVENT_MAP()
#ifdef FEATURE_CALLAPP_COVERLCD
DECLARE_HANDLE_EV_DRAW( __COriginatedMode_SimpleDrawCover );
BEGIN_EVENT_MAP( gOriginatedMode_SimpleCoverDrawEH, 1 )
HANDLE_EV_DRAW(__COriginatedMode_SimpleDrawCover)
END_EVENT_MAP()
DECLARE_HANDLE_EV_DRAW( __COriginatedMode_CoverRealDraw );
BEGIN_EVENT_MAP( gAlertedMode_CoverRealDrawEH, 1 )
HANDLE_EV_DRAW(__COriginatedMode_CoverRealDraw)
END_EVENT_MAP()
#endif
/*===============================================================================
Function Prototypes
=============================================================================== */
static void COriginatedMode_CallExitTimerCB(void * po);
static void COriginatedMode_WaitRetryTimerCB(void * po);
/*===============================================================================
DRAW EVENT HANDLER FUNCTION
=============================================================================== */
BOOL
__COriginatedMode_SimpleDraw( WmState *pState, WmEvent *pEvent )
{
CCallApp *pMe = (CCallApp *)pState;
IWsSimple *pISimple = pEvent->draw.pDestIWin;
IWMCORE_CallNextDrawHandler(gpIWmCore, pState, pEvent);
CallApp_CommonSimpleDraw (pMe, pISimple);
return TRUE;
}
BOOL
__COriginatedMode_LabelDraw( WmState *pState, WmEvent *pEvent )
{
CCallApp *pMe = (CCallApp *)pState;
//IWsLabel *pILabel = pEvent->draw.pDestIWin;
IWmGC *pIGC = NULL, *pISubGC = NULL;
MCHAR *pMText = NULL;
WmRect rectClt;
WmBitmap *pbmReduce = NULL;
uint16 i = 0;
int TextW = 0, TextH = 0;
int NameX = 0, NameY = 0, PhoneNoStY=0, PhoneNoX = 0, PhoneNoY = 0;
int PhoneNoLine = 0, MaxPhoneNoLine=0, PhoneNoCnt=0;
HFNT hFont;
GET_CLIENTRECT((IWsBase*)pMe->m_pIOriginatedLable,&rectClt);
/* Create GC */
pIGC = IWMCORE_CreateClientGC(gpIWmCore, (IWsBase*)pMe->m_pIOriginatedLable );
SysRequireEx ( pIGC != NULL, FALSE );
if(pMe->m_nRetryCount != 0) //재통화시도상태 들어가면 재통화 문구 표시해줘야 하므로...GC Clear 후 다시 쓴다.
{
IWMGC_Clear(pIGC);
}
else
{
IWMGC_Monotonize(pIGC, 3);
}
IWMCORE_DeleteGC(gpIWmCore, pIGC );
pISubGC = IWMCORE_CreateClientSubGC(gpIWmCore, (IWsBase*)pMe->m_pIOriginatedLable,NvGetInt(NV_SI_SHAPE_CALL_OUT_PHONENO_MARGIN), 0,
rectClt.w-NvGetInt(NV_SI_SHAPE_CALL_OUT_PHONENO_MARGIN)*2, (rectClt.h - 20)); //[QVGA]VD_khn_ya17 (rectClt.h - 20)
SysRequireEx ( pISubGC != NULL, FALSE );
IWMGC_GetRect(pISubGC,&rectClt);
// IWMGC_SetFgColor(pISubGC, NvGetInt(NV_SI_COLOR_TABLE_02)); //[QVGA]VD_khn_ya13 지정한 색상 적용되어지도록.
IWMGC_SetFontEdgeBlending(pISubGC, FALSE);
IWMGC_SetFontOutline(pISubGC, TRUE); //[QVGA]VD_khn_ya13 outline 생성 //기본이 FALSE이므로 TRUE로 해주는 부분이 있으면 주석으로 변경!
PhoneNoCnt = STRLEN((char *)pMe->m_sDisplayDialStr.buf);
PhoneNoLine = (PhoneNoCnt-1)/NvGetInt(NV_SI_SHAPE_CALL_OUT_PHONENO_FONT_W)+1;
// Name Center Align
if((NULL != pMe->m_pszNameStr[0]) || pMe->m_nRetryCount)
{
hFont = NvGetInt(NV_SI_FONT_CALL_OUT_NAME);
IWMGC_SetFont( pISubGC, hFont );
if(pMe->m_nRetryCount)
{
pMText = IRSRC_GetString(gpIRsrc, IDS_WATING_RETRY); //"-재다이얼중-"
}
else
{
pMText = IRSRC_LoadStrings(gpIRsrc, (char *)pMe->m_pszNameStr);
}
IWMGC_GetTextExtent(pISubGC, pMText, &TextW, &TextH);
if(TextW > rectClt.w) //Font Downsizing
{
hFont = FONT_SMALL_SIZE;
IWMGC_SetFont( pIGC, hFont);
IWMGC_GetTextExtent( pIGC, pMText, &TextW, &TextH );
}
if( pMe->m_sDisplayDialStr.buf != NULL && pMe->m_sDisplayDialStr.buf[0] != NULL )
{
NameY = CENTERPOS(0, NvGetInt(NV_SI_SHAPE_CALL_OUT_NAME_HEIGHT), TextH);
PhoneNoStY = NvGetInt(NV_SI_SHAPE_CALL_OUT_NAME_HEIGHT);
MaxPhoneNoLine = 2;
PhoneNoLine = (PhoneNoLine>MaxPhoneNoLine)? MaxPhoneNoLine : PhoneNoLine;
}
else
{
NameY = CENTERPOS(0, rectClt.h, TextH);
}
for( i=0; i < IWMLNG_Strlen(gpIWmLng, pMText) && pMText[i] != MB_NEWLINE; i++ );
if( pMText[i] == MB_NEWLINE ) // Name이 2Line경우임 (음성쪽지 전송시)
{
IWMGC_GetTextExtentN( pISubGC, &pMText[0], i+1, &TextW, &TextH );
NameX = (CENTERPOS(0, rectClt.w, TextW) < 0 )? 0: CENTERPOS(0, rectClt.w, TextW);
IWMGC_DrawTextN( pISubGC, NameX, NameY, pMText, i+1);
IWMGC_GetTextExtent( pISubGC, &pMText[i+1], &TextW, &TextH );
NameX = (CENTERPOS(0, rectClt.w, TextW) < 0 )? 0: CENTERPOS(0, rectClt.w, TextW);
IWMGC_DrawText( pISubGC, NameX, NameY+TextH, &pMText[i+1] );
}
else
{
NameX = (CENTERPOS(0, rectClt.w, TextW) < 0 )? 0: CENTERPOS(0, rectClt.w, TextW);
IWMGC_DrawTextRange( pISubGC, NameX, NameY, pMText, rectClt.w, FALSE);
}
if(NULL != pMe->m_pszNameStr[0])
{
// XK_XL03
if(pMe->m_nRetryCount == 0)
{
IRSRC_FreeStrings(gpIRsrc, pMText);
}
}
}
else
{
PhoneNoStY = 0;
MaxPhoneNoLine = 3;
PhoneNoLine = (PhoneNoLine>MaxPhoneNoLine)? MaxPhoneNoLine : PhoneNoLine;
}
// PhoneNo
if( pMe->m_sDisplayDialStr.buf != NULL )
{
PhoneNoY = CENTERPOS(PhoneNoStY, rectClt.h-PhoneNoStY, NvGetInt(NV_SI_SHAPE_CALL_OUT_PHONENO_FONT_H)*PhoneNoLine);
hFont = FONT_SEN13x26; //[QVGA]VD_khn_ya13 <- FONT_MEDIUM_SIZE// [QVGA] vd_agent99_xj05 1라인에 표시하기 위해서 작게함 <-- hFont = FONT_SEN13x26;
IWMGC_SetFont( pISubGC, hFont );
pMText = IRSRC_LoadStrings(gpIRsrc, (char *)pMe->m_sDisplayDialStr.buf);
IWMGC_GetTextExtent(pISubGC, pMText, &TextW, &TextH);
if( PhoneNoLine == 1 )
PhoneNoX = CENTERPOS(0, rectClt.w, TextW);
else if( PhoneNoCnt < (NvGetInt(NV_SI_SHAPE_CALL_OUT_PHONENO_FONT_W)*MaxPhoneNoLine) )
PhoneNoX = rectClt.w-(TextW-((PhoneNoLine-1)*rectClt.w));
else
PhoneNoX = 0;
MSG_HIGH("[[ PhoneNoLine = %d, PhoneNoStY = %d ]]",PhoneNoLine,PhoneNoStY,0);
MSG_HIGH("[[ PhoneNoX = %d, PhoneNoY = %d ]]",PhoneNoX,PhoneNoY,0);
// IWMGC_DrawText( pISubGC, PhoneNoX, PhoneNoY, pMText );
IWMGC_DrawTextMultiRange(pISubGC, PhoneNoX, PhoneNoY, pMText);
IRSRC_FreeStrings(gpIRsrc, pMText);
#if 0
if ( ( (MaxPhoneNoLine == 2) && (PhoneNoCnt > NvGetInt(NV_SI_SHAPE_CALL_OUT_13x26_CNT_2LINE)) )
|| ( (MaxPhoneNoLine == 3) && (PhoneNoCnt > NvGetInt(NV_SI_SHAPE_CALL_OUT_13x26_CNT_3LINE)) ) )
{
TextW = IWMGC_GetFontMaxWidth(pISubGC);
TextH = IWMGC_GetFontMaxHeight(pISubGC);
IWMGC_ClearRectArea( pISubGC, rectClt.w-TextW+10, PhoneNoY+(PhoneNoLine-1)*TextH, TextW, TextH ); // vd_agent99_xj07 <-- IWMGC_ClearRectArea( pISubGC, rectClt.w-TextW, PhoneNoY+(PhoneNoLine-1)*TextH, TextW, TextH );
IWMGC_MonotonizeRectArea(pISubGC, rectClt.w-TextW+10, PhoneNoY+(PhoneNoLine-1)*TextH, TextW, TextH, MONOTON_MAX_LEVEL);
pbmReduce = IRSRCIMG_LoadBitmap(gpISysImg, GRP__WIDGET_DIALING_REDUCE_SMALL );
IWMGC_DrawBitmap( pISubGC, rectClt.w-TextW+11, PhoneNoY+(PhoneNoLine-1)*TextH, pbmReduce); // vd_agent99_xj07 <-- IWMGC_DrawBitmap( pISubGC, rectClt.w-TextW, PhoneNoY+(PhoneNoLine-1)*TextH, pbmReduce);
IRSRCIMG_FreeBitmap(gpISysImg, pbmReduce );
}
#endif
}
IWMCORE_DeleteGC(gpIWmCore, pISubGC );
return TRUE;
}
/*===============================================================================
KEY EVENT HANDLER FUNCTION
=============================================================================== */
BOOL
__COriginatedMode_KeyPressed( WmState* pState, WmEvent* pEvent )
{
CCallApp *pMe = (CCallApp *)pState;
if( pEvent->key.type != EV_KEY_PRESSED)
{
return FALSE;
}
switch( pEvent->key.keyCode )
{
case AVK_END:
#if defined(BREW_STATIC_APP)
case VK_HP_REMOTE:
#endif
{
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
ISECCALLLOG_AddCallRecord(pMe->m_pSECCallLog,&pMe->m_sCallRecord);
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#if defined(BREW_STATIC_APP)
DBGPRINTF("[OriginatedMode] END_K : ITAPI_EndCall보냄..");
ITAPI_EndCall(pMe->m_pTapi);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_END_K);
}
break;
#if ! defined(BREW_STATIC_APP) //smkang_wh05 for simulator
case AVK_POUND:
{
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
ISHELL_PostEvent(pMe->a.m_pIShell, AEECLSID_SECCALLAPP, EVT_SEC_MO_CALL_CONNECTED, 0, 0);
}
break;
case AVK_SOFT1:
{
ISHELL_SetTimer(pMe->a.m_pIShell, 100, (PFNNOTIFY)COriginatedMode_WaitRetryTimerCB, (void *)pMe);
}
break;
#endif
default:
{
#ifdef FEATURE_CALL_DEBUGSCREEN
if(CHECK_DEBUGSCRN(pMe->m_pSECDebugScr))
{
ISECDEBUGSCR_Stop(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
ISECDEBUGSCR_Start(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
}
#endif
}
break;
}
return TRUE;
}
/*===============================================================================
GENERAL FUNCTION
=============================================================================== */
boolean
COriginatedMode_CreateFrame(CCallApp * pMe)
{
IWsSimple *pISimple = NULL;
//IWsLabel *pILabel = NULL;
WmRect rectClt;
GET_CLIENTRECT((IWsBase*)pMe->m_pIMain,&rectClt);
IWMCORE_CreateIWindow(gpIWmCore,
WINDOW_SIMPLE,
(void *)pMe->m_pIMain,
NULL,
0, 0,
rectClt.w, rectClt.h,
NULL,
WmGetEventMap(gOriginatedModeEH),
(void**)&pMe->m_pISimple);
IWSSIMPLE_SetbgColor( pMe->m_pISimple, NvGetInt(NV_SI_COLOR_TABLE_01) );
IWSBASE_SetFocusWindow (pMe->m_pISimple);
IWMCORE_CreateIWindow(gpIWmCore,
WINDOW_SIMPLE,
(void *)pMe->m_pISimple,
NULL,
0, NvGetInt(NV_SI_SHAPE_MAIN_INDICATOR_HEIGHT),
rectClt.w,NvGetInt(NV_SI_SHAPE_CALL_ICON_HEIGHT),
NULL,
WmGetEventMap(gOriginatedMode_SimpleDrawEH),
(void**)&pISimple);
SysRequireEx( (const int )pISimple != NULL, NULL );
IWSSIMPLE_SetbgColor( pISimple, NvGetInt(NV_SI_COLOR_TABLE_01) );
IWMCORE_CreateIWindow(gpIWmCore,
WINDOW_LABEL,
(void *)pMe->m_pISimple,
LABEL_STYLE_NONE,
0,NvGetInt(NV_SI_SHAPE_MAIN_INDICATOR_HEIGHT) + NvGetInt(NV_SI_SHAPE_CALL_ICON_HEIGHT),
rectClt.w,rectClt.h-NvGetInt(NV_SI_SHAPE_CALL_ICON_HEIGHT) - NvGetInt(NV_SI_SHAPE_MAIN_INDICATOR_HEIGHT),
NULL,
WmGetEventMap(gOriginatedMode_LabelDrawEH),
(void**)&pMe->m_pIOriginatedLable);
SysRequireEx( (const int )pMe->m_pIOriginatedLable != NULL, NULL );
// IWSLABEL_SetfgColor(pMe->m_pIOriginatedLable, NvGetInt(NV_SI_COLOR_TABLE_02)); //[QVGA]VD_khn_ya13 지정된 색상으로 출력되게 수정.
CallApp_DrawCurrScreen (pMe, (IWsBase*)NULL);
return TRUE;
}
#ifdef FEATURE_CALLAPP_COVERLCD
BOOL
__COriginatedMode_SimpleDrawCover( WmState *pState, WmEvent *pEvent )
{
CCallApp *pMe = (CCallApp *)pState;
IWmGC *pIGC = NULL;
IWMCORE_CallNextDrawHandler(gpIWmCore, pState, pEvent);
pIGC = IWMCORE_CreateClientGC(gpIWmCore, (IWsBase*)pMe->m_pICoverSimple);
IWMGC_SetBgColor(pIGC, NvGetInt(NV_SI_COLOR_TABLE_01));
IWMGC_Clear(pIGC);
IWMCORE_DeleteGC(gpIWmCore, pIGC);
return TRUE;
}
BOOL
__COriginatedMode_CoverRealDraw( WmState *pState, WmEvent *pEvent )
{
CCallApp *pMe = (CCallApp *)pState;
IWMCORE_CallNextDrawHandler(gpIWmCore, pState, pEvent);
CallApp_CoverSimpleDrawCB ((void*)pMe);
return TRUE;
}
boolean
COriginatedMode_CreateFrameCover(CCallApp *pMe)
{
WmRect rectClt;
GET_CLIENTRECT((IWsBase*)pMe->m_pICoverMain,&rectClt);
IWMCORE_CreateIWindow(gpIWmCore,
WINDOW_SIMPLE,
(void *)pMe->m_pICoverMain,
NULL,
0, 0,
rectClt.w, rectClt.h,
NULL,
WmGetEventMap(gOriginatedMode_SimpleCoverDrawEH),
(void**)&pMe->m_pICoverSimple);
SysRequireEx( (const int )pMe->m_pICoverSimple != NULL, NULL );
IWSSIMPLE_SetbgColor( pMe->m_pICoverSimple, NvGetInt(NV_SI_COLOR_TABLE_01) );
IWMCORE_CreateIWindow(gpIWmCore,
WINDOW_SIMPLE,
(void *)pMe->m_pICoverSimple,
NULL,
0, NvGetInt(NV_SI_SHAPE_MAIN_INDICATOR_HEIGHT),
rectClt.w, rectClt.h - NvGetInt(NV_SI_SHAPE_MAIN_INDICATOR_HEIGHT),
NULL,
WmGetEventMap(gAlertedMode_CoverRealDrawEH),
(void**)&pMe->m_pICoverRealSimple);
SysRequireEx( (const int )pMe->m_pICoverRealSimple != NULL, NULL );
IWSSIMPLE_SetbgColor( pMe->m_pICoverRealSimple, NvGetInt(NV_SI_COLOR_TABLE_01) );
if(IWSBASE_GetShowState(pMe->m_pICoverMain ) == WINDOW_STATE_HIDE)
IWSBASE_SetShowState(pMe->m_pICoverMain, WINDOW_STATE_SHOW);
CallApp_DrawCurrScreen( pMe, (IWsBase*)pMe->m_pICoverMain );
return TRUE;
}
#endif
void OrigAttemptModeEntryFunc(void * pi, void * pData)
{
CCallApp * pMe = (CCallApp *) pi;
if (NULL != pMe->m_pISimple)
{
IWSBASE_DestroyWindow (pMe->m_pISimple);
pMe->m_pISimple = NULL;
}
#ifdef FEATURE_CALLAPP_COVERLCD
if (NULL != pMe->m_pICoverSimple)
{
IWSBASE_DestroyWindow (pMe->m_pICoverSimple);
pMe->m_pICoverSimple = NULL;
}
#endif
#ifdef FEATURE_CALL_DEBUGSCREEN
if(CHECK_DEBUGSCRN(pMe->m_pSECDebugScr))
{
ISECDEBUGSCR_Stop(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
ISECDEBUGSCR_Start(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
}
#endif
}
boolean OrigAttemptModeEventHandlerFunc(void * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CCallApp * pMe = (CCallApp *) pi;
switch(eCode)
{
case EVT_APP_SUSPEND:
{
DBGPRINTF("EVT_APP_SUSPENDRxed !!!!");
}
return TRUE;
case EVT_APP_RESUME:
{
DBGPRINTF("EVT_APP_RESUME Rxed !!!!");
}
return TRUE;
case EVT_APP_STOP:
{
DBGPRINTF("EVT_APP_STOP Rxed !!!!");
}
return TRUE;
case EVT_FLIP:
{
if(!wParam
&& !ISNDMANAGER_GetEarpieceStatus(pMe->m_pSndMgr) //이어폰 연결 상태에서는 콜 종료 되지 않아야 함.
) //Flip Close
{
DBGPRINTF("[OrigAttemptMode] Flip Close => Endcall");
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
#if defined(BREW_STATIC_APP)
DBGPRINTF("[OrigAttemptMode] Flip Close : ITAPI_EndCall보냄..");
ITAPI_EndCall(pMe->m_pTapi);
#endif
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_FLIP_CLOSE_K);
}
else
{
DBGPRINTF("[OrigAttempt] Flip Open ??? Naver Mind");
}
}
break;
case EVT_KEY:
case EVT_KEY_RELEASE:
{
switch(wParam)
{
case AVK_END:
{
//TODO: Clean up call
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
#if defined(BREW_STATIC_APP)
DBGPRINTF("[OrigAttemptMode] END_K : ITAPI_EndCall보냄..");
ITAPI_EndCall(pMe->m_pTapi);
#endif
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_END_K);
}
break;
#if ! defined(BREW_STATIC_APP) //smkang_wh05 for simulator
case AVK_SOFT1:
{
DBGPRINTF("UI_CALL_ORIGINATED_E [OrigAttemptMode]..");
CallApp_ExitCurrentCallMode(pMe);
CallApp_SetState(pMe, CALLAPP_ORIGINATED_S);
}
break;
#endif
default:
{
DBGPRINTF("Not Consideration EVT_KEY[OrigAttemptMode] : [%x]",wParam);
#ifdef FEATURE_CALL_DEBUGSCREEN
if(CHECK_DEBUGSCRN(pMe->m_pSECDebugScr))
{
ISECDEBUGSCR_Stop(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
ISECDEBUGSCR_Start(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
}
#endif
}
break;
}
}
return TRUE;
#if defined(BREW_STATIC_APP)
case EVT_USER:
{
switch(wParam)
{
case UI_CALL_INCOMING_E:
case UI_CALL_CALLER_ID_E:
#ifdef FEATURE_IS95B_EXT_DISP
case UI_CALL_EXT_DISPLAY_E:
#endif
{
DBGPRINTF("UI_CALL_INCOMING_E [OrigAttemptMode]..");
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_SetState(pMe, CALLAPP_INCOMING_S);
}
break;
case UI_CALL_ORIGINATED_E:
{
DBGPRINTF("UI_CALL_ORIGINATED_E [OrigAttemptMode]..");
CallApp_ExitCurrentCallMode(pMe);
CallApp_SetState(pMe, CALLAPP_ORIGINATED_S);
}
break;
case UI_CALL_CMD_ERR_E:
{
// exit call state, display taken care in idle state
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_FLIP_CLOSE_K);
}
break;
default:
{
DBGPRINTF("Not Consideration EVT_USER[OrigAttemptMode] : [%x]",wParam);
return FALSE;
}
break;
}
}
return TRUE;
#endif
default:
{
//DefaultEventHandlerFunc(pMe, eCode, wParam, dwParam);
}
break;
}
return FALSE;
}
void OrigAttemptModeExitFunc(void * pi, void * pData)
{
}
void OriginatedModeEntryFunc(void * pi, void * pData)
{
CCallApp * pMe = (CCallApp *) pi;
if (NULL != pMe->m_pISimple)
{
IWSBASE_DestroyWindow (pMe->m_pISimple);
pMe->m_pISimple = NULL;
}
pMe->m_nConnectedTime = 0;
COriginatedMode_CreateFrame(pMe);
#ifdef FEATURE_CALLAPP_COVERLCD
if (NULL != pMe->m_pICoverSimple)
{
IWSBASE_DestroyWindow (pMe->m_pICoverSimple);
pMe->m_pICoverSimple = NULL;
}
COriginatedMode_CreateFrameCover(pMe);
#endif
#ifdef FEATURE_CALL_DEBUGSCREEN
if(CHECK_DEBUGSCRN(pMe->m_pSECDebugScr))
{
ISECDEBUGSCR_Stop(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
ISECDEBUGSCR_Start(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
}
#endif
}
boolean OriginatedModeEventHandlerFunc(void * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CCallApp * pMe = (CCallApp *) pi;
switch(eCode)
{
case EVT_APP_SUSPEND:
{
DBGPRINTF("EVT_APP_SUSPENDRxed !!!!");
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
}
return TRUE;
case EVT_APP_RESUME:
{
DBGPRINTF("EVT_APP_RESUME Rxed !!!!");
}
return TRUE;
case EVT_APP_STOP:
{
DBGPRINTF("EVT_APP_STOP Rxed !!!!");
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
}
return TRUE;
case EVT_FLIP:
{
if(!wParam
&& !ISNDMANAGER_GetEarpieceStatus(pMe->m_pSndMgr) //이어폰 연결 상태에서는 콜 종료 되지 않아야 함.
) //Flip Close
{
DBGPRINTF("[OriginatedMode] FlipClose => End Call");
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
#if defined(BREW_STATIC_APP)
DBGPRINTF("[OriginatedMode] END_K : ITAPI_EndCall보냄..");
ITAPI_EndCall(pMe->m_pTapi);
#endif
ISECCALLLOG_AddCallRecord(pMe->m_pSECCallLog,&pMe->m_sCallRecord);
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_FLIP_CLOSE_K);
}
else
{
DBGPRINTF("[Originated] Flip Open ??? Never Mind");
}
}
break;
case EVT_KEY:
case EVT_KEY_RELEASE:
{
#ifdef FEATURE_CALL_DEBUGSCREEN
if(pMe->m_pSECDebugScr && ISECDEBUGSCR_IsActive(pMe->m_pSECDebugScr) && eCode == EVT_KEY)
{
ISECDEBUGSCR_Stop(pMe->m_pSECDebugScr, AEECLSID_SECCALLAPP);
}
#endif
if( !IWMCORE_WinEventProc( gpIWmCore, eCode, wParam, dwParam ) )
{
return FALSE;
}
}
return TRUE;
#if defined(BREW_STATIC_APP)
case EVT_USER:
{
switch(wParam)
{
case UI_CALL_INCOMING_E:
case UI_CALL_CALLER_ID_E:
{
MSG_HIGH("---------",0,0,0);
ISHELL_SendEvent(pMe->a.m_pIShell, AEECLSID_HWCTLAPP, EVT_SEC_HWCTL_BACKLIGHT,
TRUE, MAKE_BL_PARAM( BL_TIME_IMMEDIATE, CALLAPP_INPROG_DIMMING_SEC ));
//전화 걸기
DBGPRINTF("UI_CALL_INCOMING_F [OriginatedMode]..");
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
OEMCallEnd(pMe);
CallApp_ExitCurrentCallMode(pMe);
CallApp_SetState(pMe, CALLAPP_INCOMING_S);
}
break;
#ifdef FEATURE_IS95B_PACA_UI
case UI_PH_PACA_Q_POS_E:
{
CallApp_Paca_Suspend(pMe);
}
break;
case UI_PH_PACA_REORIG_E:
{
ui_paca_type sTempPacaVar;
ISECUIVAR_GetItem( MSI_PACA, &sTempPacaVar, sizeof(ui_paca_type));
if(sTempPacaVar.act)
{
CallApp_Paca_Cancel(pMe, FALSE, FALSE);
}
}
break;
case UI_PH_PACA_CANCEL_E:
{
CallApp_Paca_Cancel(pMe, FALSE, FALSE);
}
break;
#endif
case UI_CALL_CONNECT_E:
{
DBGPRINTF("UI_CALL_CONNECT_E [OriginatedMode]..");
CallApp_ExitCurrentCallMode(pMe);
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
// 통화연결음
#ifdef CALL_FEATURE_SNDMANAGER
// 1) 통화연결음 설정시
// 삭제 - 2) 기능음량 0아닌 경우
// 삭제 - 매너모드 이어폰 상태 발생하여야함 : 3) 매너모드 비설정시 - 매너모드시 통화연결음 발생금지
if( ( ISNDMANAGER_GetSndDB(pMe->m_pSndMgr, SM_DB_FUNCSND_CALLCONNECTSND) != SM_THEME_NONE )
//&& ( ISNDMANAGER_GetVolume( pMe->m_pSndMgr, ISNDMANAGER_Get_KeySnd_Device(pMe->m_pSndMgr), SM_VOLUMECLASS_FUNCSND ) != SM_VOL_0 )
//&& (ISNDMANAGER_GetMannermodeStatus(pMe->m_pSndMgr) == FALSE )
|| ( ISNDMANAGER_GetEarpieceStatus(pMe->m_pSndMgr) == TRUE) // [QVGA] VD_hdlee_XL17
)
{
sm_sndid_type snd_redial_id = { SND_CRYSTAL_FUNCSND_CALLCONNECT, NULL };
byte callconnect_snd = 0;
callconnect_snd = ISNDMANAGER_GetSndDB(pMe->m_pSndMgr, SM_DB_FUNCSND_CALLCONNECTSND);
if( callconnect_snd == SM_THEME_CRYSTAL )
{
snd_redial_id.sndid = SND_CRYSTAL_FUNCSND_CALLCONNECT;
}
else if( callconnect_snd == SM_THEME_EXCITING )
{
snd_redial_id.sndid = SND_EXCITING_FUNCSND_CALLCONNECT;
}
else //if( callconnect_snd == SM_THEME_MYSTERY )
{
snd_redial_id.sndid = SND_MYSTERY_FUNCSND_CALLCONNECT;
}
//ISNDMANAGER_RingMA5( pMe->m_pSndMgr, 1, 1, SM_MMD_SDB_INDEX, SM_FUNC_SND, snd_redial_id, NULL, SM_DEVICE_DEFAULT );
ISNDMANAGER_FuncSnd( pMe->m_pSndMgr, 1, SM_FUNC_SND, snd_redial_id, SM_DEVICE_DEFAULT );
}
#endif
CallApp_ExitCurrentCallMode(pMe);
CallApp_SetState(pMe, CALLAPP_IN_PROG_S);
}
break;
case UI_CALL_ENDED_E:
{
#if defined(BREW_STATIC_APP)
const cm_mm_call_info_s_type *pci = NULL;
#endif
DBGPRINTF("UI_CALL_ENDED_E [OriginatedMode]..");
#if 1
pci = (cm_mm_call_info_s_type *)ITAPI_GetCallInfo(pMe->m_pTapi);
if(CallApp_Retry_Is_Allowed(pMe,pci))
{
/////////////////////////( 10초후에 재발신 동작 하게 수정
// COriginatedMode_WaitRetryTimerCB((void *)pMe);
ISHELL_SetTimer(pMe->a.m_pIShell, 10000, (PFNNOTIFY)COriginatedMode_WaitRetryTimerCB, (void *)pMe);
//////////////////////////)
}
else
{
pMe->m_nRetryCount=0;
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
OEMCallEnd(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_OTHER);
}
#else
ISHELL_SetTimer(pMe->a.m_pIShell, 1000, (PFNNOTIFY)COriginatedMode_CallExitTimerCB, (void *)pMe);
#endif
}
break;
default:
{
DBGPRINTF("Not Consideration EVT_USER[OriginatedMode] : [%x]",wParam);
}
break;
}
}
return TRUE;
#endif
default:
{
//DefaultEventHandlerFunc(pMe, eCode, wParam, dwParam);
}
break;
}
return FALSE;
}
void OriginatedModeExitFunc(void * pi, void * pData)
{
CCallApp *pMe = (CCallApp*)pi;
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)COriginatedMode_CallExitTimerCB, (void *)pMe);
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)COriginatedMode_WaitRetryTimerCB, (void *)pMe);
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
pMe->m_nRetryCount=0;
}
static void COriginatedMode_CallExitTimerCB(void * po)
{
CCallApp * pMe = (CCallApp *) po;
DBGPRINTF("젠장...시간초과로 나간다...");
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
OEMCallEnd(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_OTHER);
}
static void COriginatedMode_WaitRetryTimerCB(void * po)
{
CCallApp * pMe = (CCallApp *) po;
int nErr=0;
if(pMe->m_nRetryCount <= CALLAPP_MAX_RETRY_COUNT)
{
pMe->m_nRetryCount++;
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, TRUE, TRUE );
#if 1 //smkang_xl09
CallApp_MakeVoiceCall(pMe, (char *)&pMe->m_sDialStr.buf);
#else
#if defined(BREW_STATIC_APP)
DBGPRINTF("<<<<<<<<<<< ITAPI_MakeVoiceCall >>>>>>>>>>>>>>>");
ITAPI_MakeVoiceCall(pMe->m_pTapi, pMe->m_sDialStr.buf, AEECLSID_SECCALLAPP);
#endif
#endif
ISHELL_SetTimer(pMe->a.m_pIShell, 10000, (PFNNOTIFY)COriginatedMode_WaitRetryTimerCB, (void *)pMe);
CallApp_DrawCurrScreen( pMe, (IWsBase*)pMe->m_pIOriginatedLable);
}
else
{
DBGPRINTF("젠장...시간초과로 나간다...");
pMe->m_nRetryCount=0;
#ifdef IMAGE_VIEW
ISECIMAGEVIEW_Stop(pMe->m_pImageView);
ISECIMAGEVIEW_Reset(pMe->m_pImageView);
#endif
#ifdef FEATURE_CALLAPP_COVERLCD
ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY)CallApp_CoverSimpleDrawCB, (void *)pMe);
#endif
CONTROL_INDICATOR( ANNUNCIATOR_SRV_IN, FALSE, FALSE );
OEMCallEnd(pMe);
CallApp_CloseApplet(pMe, TRUE, CALLAPP_CLOSE_BY_OTHER);
}
}
카페 게시글
검색이 허용된 게시물입니다.
답글
수정
삭제
스팸처리
운영자회의실
Callapp_origin.c
희상
추천 0
조회 6
05.03.02 10:50
댓글 0
북마크
번역하기
공유하기
기능 더보기
다음검색