📄 jvm_screen_switch.c
字号:
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_EXIT_SCREEN);
jui_widget_reset_screen();
jvm_execute_rpc((func_void) jvm_exit_screen_callback, KAL_FALSE); /* this goback history should run in MMI task. */
}
/*****************************************************************************
* FUNCTION
* jvm_exit_dummy_screen
* DESCRIPTION
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_exit_dummy_screen(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
jvm_refresh_screen_after_resume = KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* jvm_pause_dummy_screen
* DESCRIPTION
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_pause_dummy_screen(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (jvm_is_own_screen())
{
EntryNewScreen(GLOBAL_SCR_DUMMY, jvm_exit_dummy_screen, NULL, NULL);
jvm_refresh_screen_after_resume = KAL_FALSE;
}
}
/*****************************************************************************
* FUNCTION
* jvm_resume_dummy_screen
* DESCRIPTION
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_resume_dummy_screen(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (!jvm_is_own_screen() && jvm_state != JVM_TERMINATE_STATE)
{
if (GetActiveScreenId() == GLOBAL_SCR_DUMMY)
{
GoBackHistory();
}
}
}
/*****************************************************************************
* FUNCTION
* jvm_resume_screen
* DESCRIPTION
* jvm resume screen handler
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_resume_screen(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_RESUME_SCREEN, jvm_state + 100 * is_jvm_force_terminated);
if (!jvm_is_own_screen() && jvm_state != JVM_TERMINATE_STATE)
{
EntryNewScreen(SCR_JAVA_APP, jvm_pause_screen, NULL, NULL);
SetDelScrnIDCallbackHandler(SCR_JAVA_APP, mmi_java_screen_delete_hdlr);
jvm_resmgr_state_transition(JVM_FG_RUNNING_STATE);
/*
* If JVM is waiting for message to wakeup, send the message
* * This is for JSR-75. The mounted drive may be unmounted after resumed.
* * We have to inform the VM in each case.
*/
if (g_jvm_keypad_need_notify)
{
g_jvm_keypad_need_notify = KAL_FALSE;
jvm_send_keypad_notify_ind();
}
}
else
{
if (is_jvm_force_terminated)
{
mmi_java_entry_terminating(MMI_TRUE);
}
}
}
/*****************************************************************************
* FUNCTION
* jvm_add_history
* DESCRIPTION
* PARAMETERS
* scrnID [IN]
* func [IN]
* RETURNS
* void
*****************************************************************************/
void jvm_add_history(U16 scrnID, FuncPtr func)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
history currHistory;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
currHistory.scrnID = scrnID;
currHistory.entryFuncPtr = func;
app_ucs2_strcpy((kal_int8*) currHistory.inputBuffer, (kal_int8*) L"");
GetCategoryHistory(currHistory.guiBuffer);
AddHistory(currHistory);
}
/*****************************************************************************
* FUNCTION
* jvm_pause_screen
* DESCRIPTION
* only called when use want to resume VM, but cancel
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_pause_screen(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U16 screen_id = GetActiveScreenId();
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_PAUSE_SCREEN, jvm_state, screen_id);
if (jvm_is_own_screen())
{
if (jvm_is_lock_mmi())
{
kal_uint32 event_group;
kal_retrieve_eg_events(J2ME_MMI_lock_group, 1, KAL_OR_CONSUME, &event_group, KAL_SUSPEND);
}
jma_media_player_check_critical_section();
if (screen_id == POPUP_SCREENID)
{
jvm_resmgr_state_transition(JVM_SHORT_EVENT_STATE);
}
else
{
jvm_resmgr_state_transition(JVM_LONG_EVENT_STATE);
}
/* too important here !! , goback history will execute this to resume vm */
jvm_add_history(SCR_JAVA_APP, jvm_resume_screen);
/*
* If JVM is waiting for message to wakeup, send the message
* * This is for JSR-75. The mounted drive may be unmounted after resumed.
* * We have to inform the VM in each case.
*/
if (g_jvm_keypad_need_notify)
{
g_jvm_keypad_need_notify = KAL_FALSE;
jvm_send_keypad_notify_ind();
}
}
else
{
/*
* jvm_pause_screen is JAVA_SCR 's exit screen
* when we execute jvm_exit_screen, will execute jvm_pause_screen again
* therefore, we do nothing here
*/
}
}
/*****************************************************************************
* FUNCTION
* jvm_enter_screen
* DESCRIPTION
* jvm enter screen handler
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_enter_screen(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_ENTER_SCREEN, jvm_state);
ASSERT(jvm_state == 0) /* currently java should not be re-entry */
ASSERT(!mmi_java_is_in_voice_call());
if (!jvm_is_own_screen())
{
EntryNewScreen(SCR_JAVA_APP, jvm_pause_screen, NULL, NULL);
SetDelScrnIDCallbackHandler(SCR_JAVA_APP, mmi_java_screen_delete_hdlr);
is_jvm_force_terminated = KAL_FALSE;
jvm_resmgr_state_transition(JVM_FG_RUNNING_STATE);
}
else
{
ASSERT(0);
}
}
/*****************************************************************************
* FUNCTION
* jvm_enter_terminate_mode
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_enter_terminate_mode(void) /* this function is call by MMI */
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_ENTER_TERMINATE_MODE);
/* when no support pause mode, we may invoke this function when jvm_is_own_screen */
// ASSERT(jvm_is_own_screen() == KAL_FALSE);
jvm_resmgr_state_transition(JVM_TERMINATE_STATE);
jvm_send_vm_abort_req(0);
jvm_send_keypad_notify_ind();
ClearDelScrnIDCallbackHandler(SCR_JAVA_APP, NULL);
DeleteScreenIfPresent(SCR_JAVA_APP);
}
/*****************************************************************************
* FUNCTION
* jvm_enter_pause_mode
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jvm_enter_pause_mode(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_ENTER_PAUSE_MODE);
jvm_resmgr_state_transition(JVM_PAUSED_STATE);
ClearDelScrnIDCallbackHandler(SCR_JAVA_APP, NULL);
DeleteScreenIfPresent(SCR_JAVA_APP);
}
/*****************************************************************************
* FUNCTION
* jvm_enter_minimize_mode
* DESCRIPTION
*
* PARAMETERS
* pauseapp [IN]
* RETURNS
* void
*****************************************************************************/
void jvm_enter_minimize_mode(kal_bool pauseapp)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_STATE, FUNC_JVM_ENTER_MINIMIZE_MODE);
if (jvm_state != JVM_BG_RUNNING_STATE)
{
is_force_pauseapp = pauseapp;
jvm_resmgr_state_transition(JVM_BG_RUNNING_STATE);
ClearDelScrnIDCallbackHandler(SCR_JAVA_APP, NULL);
DeleteScreenIfPresent(SCR_JAVA_APP);
}
else if (pauseapp) /* jvm_state = JVM_BG_RUNNING_STATE */
{
/* notify vm directly */
is_force_pauseapp = KAL_TRUE;
jvm_pauseVMExternal(JVM_BG_RUNNING_STATE, JVM_BG_RUNNING_STATE);
}
}
/*************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -