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

📄 jam_call_back_handler.c

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