📄 jam_call_back_handler.c
字号:
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/*************************************************************************
* Include Statements
*************************************************************************/
#include "kal_release.h"
#include "stack_common.h"
#include "stack_msgs.h"
#include "task_main_func.h"
#include "app_ltlcom.h"
#include "lcd_ip_cqueue.h"
#include "stack_types.h"
#include "task_config.h"
#include "syscomp_config.h"
#include "custom_config.h"
#include "custom_util.h"
#include "stack_init.h"
#include "stack_ltlcom.h"
#include "stack_msgs.h"
#include "app_buff_alloc.h"
#include "kvmLog.h"
#include "jam_msg_handler.h"
#include "jam_internal.h"
#include "jvm_adaptor.h"
#include "j2me_trace.h"
#include "midpMalloc.h"
#include "storage.h"
#include "javaAgencyDef.h"
#include "wgui_categories.h"
#include "MMI_features.h"
#include "gdi_include.h"
#include "kni.h"
#include "machine_md.h"
#include "defaultLCDUI.h"
#include <imageDecode.h>
#include <images.h>
#include "jam_msg_util.h"
#include "pushregistry.h"
#include "jvm_internal.h"
#include "wap_ps_struct.h"
#include "configuration.h"
#ifdef __DRM_SUPPORT__
#include "drm_gprot.h"
#include "drm_def.h"
#include "GlobalDefs.h"
#endif /* __DRM_SUPPORT__ */
#ifdef __SUPPORT_NATIVE_INSTALLER__
#include "installer.h"
#endif /* __SUPPORT_NATIVE_INSTALLER__ */
static kal_uint32 saved_state = JAVA_IDLE_STATE;
/* we have to set the variable to indicate */
/* if the screen has to be initialized */
extern kal_uint32 Java_State;
extern int enterAMS;
extern kal_bool is_alert;
extern mmi_java_timealarm_push_res_struct pending_pushalarm_action;
extern kal_bool is_jvm_launch_mids_session;
extern int midp_main(game_type_enum type, int argc, char* argv[]);
extern kal_bool pending_pushalarm;
extern int jpush_alarm_del(alarmentry_struct *alarmp);
extern void mmi_java_set_mode_cnf_handler(kal_uint32 error_code, kal_int32 tck_result);
extern kal_char* getStorageNameFromNumber(kal_char* numberString);
extern kal_wchar* jam_get_jar_storage_name(void* (*malloc)(int size), kal_int32 MIDS_id);
extern kal_char* _jvm_get_dir_path(game_type_enum type);
#ifdef __SUPPORT_INFUSIO__
extern void infusio_finalize_memory(void);
#endif /* __SUPPORT_INFUSIO__ */
#ifdef SUPPORT_JSR_184
kal_int32 jm3g_initialize(void);
void jm3g_finalize(void);
#endif /* SUPPORT_JSR_184 */
/* we have to set the variable to indicate */
/* if the screen has to be initialized */
extern int enterAMS;
extern kal_bool commit_removal;
extern kal_char* pause_mids_work_dir_path;
kal_bool j2me_in_tck_mode = KAL_FALSE;
kal_bool j2me_quit_tck_mode = KAL_FALSE;
#ifdef __SUPPORT_NATIVE_INSTALLER__
int current_running_mid_id = -1;
#endif
#ifdef __SUPPORT_INFUSIO__
extern bool_t ege_launch_next_ap_flag;
extern int infusio_mids_type;
extern int nextLaunchMidletID;
extern kal_wchar* nextLaunchMidletName;
extern bool_t isESM2AP(void);
extern bool_t isInFusioAP(void);
extern void infusio_finalize_memory(void);
extern void set_work_sys_dir_path_for_EGE(void);
#endif /* __SUPPORT_NATIVE_INSTALLER__ */
extern void j2me_deactivate_socket(void);
extern void finalizeHttp(void);
extern void finalizeSms(void);
extern void finalizeMms(void);
extern void finalizeStream(void);
extern kal_int32 jm3g_initialize(void);
extern void jm3g_finalize(void);
extern void finialize_file_handler(void);
extern kal_int32 permission_dialog_selected_item;
extern kal_char yes_Index;
extern kal_wchar *permission_resource;
kal_char *currently_running_storage_name=NULL;
kal_char *saved_work_dir_path = NULL;
kal_char *saved_work_sys_dir_path = NULL;
void jam_backup_work_dir(void);
void jam_restore_work_dir(void);
/*************************************************************************
* Function Definition
*************************************************************************/
kal_int32
jam_start_up(game_type_enum type, kal_int32 mids_id, kal_wchar* mid_name_str)
{
kal_char* argv[4];
kal_bool process_pushalarm = KAL_FALSE;
kal_char* mids_id_str;
kal_int32 returnCode = 0;
kal_char* tempPath;
kal_bool clean_name_str = KAL_FALSE;
kal_char* tmp=NULL;
#ifdef __SUPPORT_INFUSIO__
kal_wchar* save_ESM_mid_name_str = NULL;
do
{
permission_dialog_selected_item = 0;
yes_Index = 0;
permission_resource = NULL;
if(ege_launch_next_ap_flag)
{
kal_wchar *midlet_name = NULL;
ege_launch_next_ap_flag = FALSE;
process_pushalarm = KAL_FALSE;
clean_name_str = KAL_FALSE;
tmp=NULL;
jui_widget_unregister_lcd();
j2me_deactivate_socket();
finalizeHttp();
finalizeSms();
finalizeMms();
finalizeStream();
jui_widget_reset_connect_icon();
if(isInFusioAP()) /* return to ESM */
{
type = infusio_mids_type;
mids_id = 1;
mid_name_str = save_ESM_mid_name_str;
jui_widget_set_softkey(0, NULL, 0, KAL_TRUE);
jui_widget_set_softkey(1, NULL, 0, KAL_TRUE);
}
else if(isESM2AP()) /* launch next AP */
{
ege_launch_next_ap_flag = TRUE;
type = infusio_mids_type;
mids_id = nextLaunchMidletID;
save_ESM_mid_name_str = mid_name_str;
mid_name_str = nextLaunchMidletName;
}
midlet_name = jam_get_jar_storage_name(jam_listmem_malloc, mids_id);
if (jam_drm_midlet_start_consume(midlet_name) != J2ME_NO_ERROR )
{
jam_listmem_free(midlet_name);
goto exitlable;
}
jam_listmem_free(midlet_name);
}
#else
permission_dialog_selected_item = 0;
yes_Index = 0;
permission_resource = NULL;
#endif /* __SUPPORT_INFUSIO__ */
mids_id_str = (kal_char*)get_ctrl_buffer(get_dec_len(mids_id) + 1);
trans_dec_to_ascii(mids_id_str, mids_id);
tempPath = get_dir_path_from_midsid(mids_id);
pause_mids_work_dir_path = NULL;
/* if have installed drive path, use that, else use default system drive path */
if (tempPath != NULL) work_dir_path = tempPath;
else work_dir_path = work_sys_dir_path;
sprintf(_kvmLogStr,"jam_start_up: work_dir_path = %s\n", work_dir_path);
Kprintf();
do
{
is_alert = KAL_FALSE;
process_pushalarm = KAL_FALSE;
/* indicate JVM active for launching mids */
is_jvm_launch_mids_session = KAL_TRUE;
set_running_mid_name(mid_name_str);
argv[0] = "midp";
argv[1] = "-run";
argv[2] = mids_id_str;
argv[3] = (kal_char*)mid_name_str;
enterAMS = 1;
jm3g_initialize();
#ifdef __SUPPORT_NATIVE_INSTALLER__
current_running_mid_id = mids_id;
tmp=getStorageNameFromNumber(mids_id_str);
currently_running_storage_name=jam_listmem_malloc(strlen(tmp)+1);
memset(currently_running_storage_name,0,strlen(tmp)+1);
memcpy(currently_running_storage_name,tmp,strlen(tmp));
midpFree(tmp);
#endif /* __SUPPORT_NATIVE_INSTALLER__ */
Java_State = JAVA_ACTIVATED_STATE;
returnCode = midp_main(type, 4, argv);
Java_State = JAVA_IDLE_STATE;
#ifdef __SUPPORT_INFUSIO__
if(ege_launch_next_ap_flag)
{
jam_drm_midlet_stop_consume();
}
#endif
#ifdef __SUPPORT_NATIVE_INSTALLER__
current_running_mid_id = -1;
jam_listmem_free(currently_running_storage_name);
currently_running_storage_name=NULL;
#endif /* __SUPPORT_NATIVE_INSTALLER__ */
jm3g_finalize();
set_running_mid_name(NULL);
if (tempPath != NULL)
{
jam_listmem_free(tempPath);
work_dir_path = work_sys_dir_path;
}
/* indicate JVM end launching mids */
is_jvm_launch_mids_session = KAL_FALSE;
free_ctrl_buffer(mids_id_str);
/* process pending pushalarm launch */
if (pending_pushalarm == KAL_TRUE)
{
clean_name_str = KAL_TRUE;
pending_pushalarm = KAL_FALSE;
process_pushalarm = KAL_TRUE;
/* Force to change msg id to free mid_name_str */
clean_name_str = KAL_TRUE;
/* Fix to change start session id */
//*start_session_id = pending_pushalarm_action.session_id;
mid_name_str = (kal_wchar*)get_ctrl_buffer(strlen(pending_pushalarm_action.mid_class_name) + 1);
strcpy((kal_char*)mid_name_str, pending_pushalarm_action.mid_class_name);
/* Update working internal system directory path */
work_sys_dir_path = _jvm_get_dir_path(pending_pushalarm_action.game_type);
work_info_ptr = _jvm_get_builtin_file_info(pending_pushalarm_action.game_type);
mids_id = getStorageNumberFromName(pending_pushalarm_action.mids_storage_name);
if (work_dir_path != work_sys_dir_path)
{
jam_listmem_free(work_dir_path);
work_dir_path = work_sys_dir_path;
}
tempPath = get_dir_path_from_midsid(mids_id);
if (tempPath != NULL)
work_dir_path = tempPath;
if (pending_pushalarm_action.pushalarm_type == PUSHTYPE_ALARM_PUSH) {
jpush_alarm_del((alarmentry_struct *)pending_pushalarm_action.callback_entry);
}
mids_id_str = (kal_char*)get_ctrl_buffer(get_dec_len(mids_id) + 1);
trans_dec_to_ascii(mids_id_str, mids_id);
// j2me_timealarm_push_restore_screen();
}
} while (process_pushalarm);
#ifdef __SUPPORT_INFUSIO__
exitlable:
#endif
if (work_dir_path != work_sys_dir_path)
{
jam_listmem_free(work_dir_path);
work_dir_path = work_sys_dir_path;
}
finialize_file_handler();
#ifdef __SUPPORT_INFUSIO__
} while (ege_launch_next_ap_flag);
infusio_finalize_memory();
#endif
return returnCode;
}
void
jam_tck_start_up(kal_int32 tck_mode, kal_bool to_execute)
{
char* argv[1] = {NULL};
if (to_execute == KAL_TRUE)
{
Java_mode = tck_mode;
j2me_quit_tck_mode = KAL_FALSE;
} else
{
j2me_quit_tck_mode = KAL_TRUE;
}
ASSERT(Java_mode <= JAVA_MAX_MODE);
work_sys_dir_path = j2me_sys_dir_path;
if ((to_execute == KAL_TRUE) &&
(Java_State == JAVA_IDLE_STATE))
{
if ((Java_mode != JAVA_NORMAL_MODE) && j2me_in_tck_mode == (KAL_FALSE))
{
j2me_in_tck_mode = KAL_TRUE;
jm3g_initialize();
midp_main(GAMETYPE_JAVA_GAME, 1, argv);
jm3g_finalize();
j2me_in_tck_mode = KAL_FALSE;
} else
{
/* Restore authorization file here */
if (KfileExists("_tck.ks") == 0)
{
Krename("_main.ks", "_tck.ks");
Krename("main.ks_org", "_main.ks");
}
/* send back confirm directly */
mmi_java_set_mode_cnf_handler(0, 0);
}
}
if (j2me_quit_tck_mode)
{
jvm_keypad_insert(KEY_END,KEY_EVENT_DOWN);
jvm_keypad_insert(KEY_END,KEY_EVENT_UP);
}
finialize_file_handler();
}
kal_bool
_check_permission_level(char permission_level)
{
int i;
unsigned char bit_mask = 1;
if (permission_level == 0)
return KAL_TRUE;
for (i = 0; i < 8; i++)
{
if (bit_mask == (unsigned char)permission_level)
return KAL_TRUE;
bit_mask <<= 1;
}
return KAL_FALSE;
}
/*************************************************************************
* FUNCTION
* jam_get_new_permission_level
* DESCRIPTION
* transfer J2ME_CHOICE_LEVEL to PERMISSION_LEVEL
* PARAMETERS
* choiceLevel IN level of J2ME_CHOICE_LEVEL
* maxLevel IN max level of PERMISSION_LEVEL
* current IN the orighinal level of PERMISSION_LEVEL
* RETURNS
* level of PERMISSION_LEVEL
*************************************************************************/
char
jam_get_new_permission_level (char choiceLevel, char maxLevel, char current, kal_bool* isOK)
{
char selected = (char)PERMISSION_USER_DENIED;
if (!_check_permission_level(choiceLevel))
{
*isOK = KAL_FALSE;
return selected;
}
if (!_check_permission_level(maxLevel))
{
*isOK = KAL_FALSE;
return selected;
}
if (!_check_permission_level(current))
{
*isOK = KAL_FALSE;
return selected;
}
if (maxLevel==PERMISSION_NEVER)
selected = current;
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -