⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jvm_screen_switch.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
    /*----------------------------------------------------------------*/
    /* 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 + -