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

📄 jvm_screen_switch.c

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