📄 jvm_screen_switch.c
字号:
*
*****************************************************************************/
kal_bool jvm_is_lock_mmi(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_bool result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
JVM_RES_LOCK;
result = jvm_lock_mmi_count > 0 ? KAL_TRUE : KAL_FALSE;
JVM_RES_UNLOCK;
return result;
}
/*****************************************************************************
* FUNCTION
* jvm_exit_screen_callback_for_asm
* DESCRIPTION
* This function will be invoked when asm requests Java to free memory.
* This function will only be invoked in MMI context.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_exit_screen_callback_for_asm(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
exit_by_asm = KAL_TRUE;
jvm_enter_terminate_mode();
}
/*****************************************************************************
* FUNCTION
* applib_mem_ap_notify_stop_finished_call_back
* DESCRIPTION
* This function will be invoked right after Java free ASM memory.
* This function will be invoked in Java context.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static void applib_mem_ap_notify_stop_finished_call_back(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
applib_mem_ap_notify_stop_finished(APPLIB_MEM_AP_ID_JAVA, KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* asm_free_mem_notification
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void asm_free_mem_notification(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (exit_by_asm)
{
exit_by_asm = KAL_FALSE;
jvm_execute_rpc((func_void) applib_mem_ap_notify_stop_finished_call_back, KAL_FALSE);
}
}
/*****************************************************************************
* FUNCTION
* jvm_draw_sublcd_icon
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static void jvm_draw_sublcd_icon(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S32 image_width;
S32 image_height;
S32 lcd_width;
S32 lcd_height;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
gdi_lcd_set_active(GDI_LCD_SUB_LCD_HANDLE);
gdi_lcd_get_dimension(&lcd_width, &lcd_height);
gdi_layer_reset_clip();
gdi_layer_clear_background(GDI_COLOR_WHITE);
gdi_image_get_dimension_id(IMG_JAVA_POWERED, &image_width, &image_height);
gdi_image_draw_id((lcd_width - image_width) >> 1, (lcd_height - image_height) >> 1, IMG_JAVA_POWERED);
gdi_layer_blt_base_layer(0, 0, lcd_width - 1, lcd_height - 1);
gdi_lcd_set_active(GDI_LCD_MAIN_LCD_HANDLE);
}
/*****************************************************************************
* FUNCTION
* jvm_entry_sublcd_screen
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static void jvm_entry_sublcd_screen(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
ExecSubLCDCurrExitHandler();
ShowCategory331Screen();
SetSubLCDExitHandler(jvm_exit_sublcd_screen);
/* draw a icon on sub */
jvm_draw_sublcd_icon();
}
/*****************************************************************************
* FUNCTION
* jvm_exit_sublcd_screen
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static void jvm_exit_sublcd_screen(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
SubLCDHistoryNode SubLCDHistory;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
SubLCDHistory.entryFuncPtr = jvm_entry_sublcd_screen;
AddSubLCDHistory(&SubLCDHistory);
}
/*****************************************************************************
* FUNCTION
* jvm_execute_rpc
* DESCRIPTION
*
* PARAMETERS
* func [IN]
* is_blocking [IN]
* RETURNS
* void
*****************************************************************************/
static void jvm_execute_rpc(func_void func, kal_bool is_blocking)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
struct ilm_struct *ilm_ptr;
mmiapi_remote_proc_call_struct *rpc;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
rpc = (mmiapi_remote_proc_call_struct*) construct_local_para(sizeof(mmiapi_remote_proc_call_struct), TD_CTRL);
rpc->type = MMIAPI_RPC_VOID;
rpc->func_ptr = (void*)func;
rpc->finish_callback = NULL;
rpc->validate_callback = NULL;
if (is_blocking)
{
rpc->blocking_data = mmiapi_get_blocking_data(MOD_J2ME);
}
else
{
rpc->blocking_data = NULL;
}
ilm_ptr = allocate_ilm(MOD_J2ME);
ilm_ptr->msg_id = MSG_ID_MMIAPI_REMOTE_PROC_CALL_REQ;
ilm_ptr->peer_buff_ptr = NULL;
ilm_ptr->local_para_ptr = (local_para_struct*) rpc;
SEND_ILM(MOD_J2ME, MOD_MMI, J2ME_MMI_SAP, ilm_ptr);
if (is_blocking)
{
mmiapi_lock(MOD_J2ME);
}
}
/*****************************************************************************
* FUNCTION
* jvm_goto_idle_screen_callback
* DESCRIPTION
* jvm exit screen handler
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_goto_idle_screen_callback(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_GOTO_IDLE_SCREEN_CALLBACK);
jvm_resmgr_state_transition(JVM_TERMINATE_STATE);
ClearDelScrnIDCallbackHandler(SCR_JAVA_APP, NULL);
if (IsScreenPresent(SCR_JAVA_APP)) /* java is in history */
{
DeleteScreenIfPresent(SCR_JAVA_APP); /* /TODO: maybe we should clear all the historys below the SCR_JAVA_APP */
}
else
{
DisplayIdleScreen();
}
}
/*****************************************************************************
* FUNCTION
* jvm_goto_idle_screen
* DESCRIPTION
* Vm is terminated by End key => pause or Terminate
* (g_jvm_goto_idle_screen_as_exit_screen almose no use now, always call jvm_goto_idle_screen)
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_goto_idle_screen(void) /* this function is call by JAVA */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_GOTO_IDLE_SCREEN);
#if GOTO_IDLE_SCREEN_AS_EXIT_SCREEN
jvm_execute_rpc((func_void) jvm_exit_screen_callback, KAL_FALSE); /* this goback history should run in MMI task. */
#else
jvm_execute_rpc((func_void) jvm_goto_idle_screen_callback, KAL_FALSE); /* this goback history should run in MMI task. */
#endif
}
/*****************************************************************************
* FUNCTION
* jvm_exit_screen_callback
* DESCRIPTION
* (1) Vm is terminated normally (not press end key)
* (2) Launch Midlet fail
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_exit_screen_callback(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_EXIT_SCREEN_CALLBACK, jvm_state);
jvm_resmgr_state_transition(JVM_TERMINATE_STATE);
ClearDelScrnIDCallbackHandler(SCR_JAVA_APP, NULL);
if (GetActiveScreenId() == SCR_JAVA_APP)
{
GoBackHistory();
}
else
{
DeleteScreenIfPresent(SCR_JAVA_APP);
}
if (GetActiveScreenId() == SCR_JAVA_TERMINATE_DIALOG)
{
GoBackHistory();
}
else if (IsScreenPresent(SCR_JAVA_TERMINATE_DIALOG))
{
DeleteScreenIfPresent(SCR_JAVA_TERMINATE_DIALOG);
}
if (GetActiveScreenId() == SCR_JAVA_RESUME_DIALOG)
{
GoBackHistory();
}
else if (IsScreenPresent(SCR_JAVA_RESUME_DIALOG))
{
DeleteScreenIfPresent(SCR_JAVA_RESUME_DIALOG);
}
if (GetActiveScreenId() == SCR_JAVA_FORCE_TERMINATE_DIALOG)
{
GoBackHistory();
}
else if (IsScreenPresent(SCR_JAVA_FORCE_TERMINATE_DIALOG))
{
DeleteScreenIfPresent(SCR_JAVA_FORCE_TERMINATE_DIALOG);
}
}
/*****************************************************************************
* FUNCTION
* jvm_exit_screen
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_exit_screen(void) /* this function is call by JAVA */
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -