📄 idleapp.c
字号:
#endif
#ifdef __MMI_DUAL_SIM_MASTER__
#include "MTPNP_AD_master_header.h"
#include "MTPNP_PFAL_CC.h"
#include "MTPNP_PFAL_Master_CallHistory.h"
#include "mtpnp_pfal_cellbroadcast.h"
#endif /* __MMI_DUAL_SIM_MASTER__ */
#undef __NEWSIMULATOR
/*****************************************************************************
* Define
*****************************************************************************/
#if defined( __MMI_MAINLCD_240X320__) || defined( __MMI_MAINLCD_320X240__)
#define __MMI_IDLE_NO_NW_SEARCHING_SCREEN__
#endif
#ifdef __MMI_DUAL_SIM_MASTER__
extern void EntryDualModeSwitchProgressInIdle(void);
extern U8 DualModeIsSwitching(void);
#endif
/*****************************************************************************
* Typedef
*****************************************************************************/
/* diamond, 2005/10/12 idle revise */
typedef void (*FuncPtr) (void);
typedef U8(*FuncPtrRtn) (void);
typedef struct _idle_callback_info
{
FuncPtrRtn idle_callback_chk_f; /* callback to check if there is any pending event in idle screen */
FuncPtr idle_callback_exe_f; /* callback to execute the corresponding function in idle screen */
} IDLECALLBACKINFO;
/* end, diamond */
/****************************************************************************
* Global Function
*****************************************************************************/
extern void EmergencyCallCheck(S16 keyCode, S16 keyType);
extern void MMIProcessActionMsg(void);
extern U8 *GetDeliverdReportMessage(void);
extern kal_bool INT_USBBoot(void);
extern EMSData *GetClass0MessagePtr(void);
extern U8 *GetClass0MessageHeader(void);
extern BOOL IsMyTimerExist(U16 nTimerId);
#ifdef __SAT__
extern void SATEVDLIdleScreenAvaliable(void);
#endif
extern void mmiapi_enter_idle_screen_notify(void);
#ifdef WAP_SUPPORT
extern void wap_internet_key_hdlr(void);
#endif
#ifdef __MMI_AUDIO_PLAYER__
extern BOOL mmi_audply_is_playing(void);
extern void mmi_audply_set_subLCD_shown(BOOL is_shown);
#endif /* __MMI_AUDIO_PLAYER__ */
#ifdef __MMI_FM_RADIO__
extern BOOL mmi_fmrdo_is_power_on(void);
extern void mmi_fmrdo_set_subLCD_shown(BOOL is_shown);
void mmi_fmrdo_power_on(BOOL turn_on);
#endif /* __MMI_FM_RADIO__ */
#if defined(__MMI_VRSD__)
extern void mmi_vrsd_rcg_pre_entry(void);
#endif
#if defined(__MMI_VRSD_DIAL__)
extern BOOL mmi_vrsddial_check_sim_change(void);
#endif
#if defined(__MMI_VRSI__)
extern void mmi_vrsi_rcg_pre_entry(void);
#endif
/* Associate caller group in SIM card entry */
#if defined(__MMI_PHB_CALLERGROUP_IN_SIM__)
extern BOOL mmi_phb_init_check_sim_change(void);
#endif
#ifdef __MMI_WGUI_MINI_TAB_BAR__
extern void ClndrPreEntryApp(void);
extern void fmgr_launch(void);
#endif /* __MMI_WGUI_MINI_TAB_BAR__ */
/* diamond, 2005/07/05 Flight mode */
extern void EntryScrSimOptionMenu(void);
void EntryFlightModeIdleScreen(void);
void EntryFlightModeKeypadLockScreen(void);
void FlightModeDigitHandler(void);
/* end, diamond */
extern void InsertSimSetKeyPadLockFlag(void);
extern void UI_set_font(UI_font_type f);
#if defined(OBIGO_Q03C) && defined(WAP_SUPPORT)
extern int widget_MMI_check_and_display_new_msg_when_keypad_lock(
U16 KeyLockLSKStringID,
U16 KeyLockLSKIconID,
U16 KeyLockRSKStringID,
U16 KeyLockRSKIconID);
extern int widget_MMI_check_and_display_new_msg(void);
extern void widget_check_msg_in_idle_screen(void);
#endif
/*****************************************************************************
* Local Function
*****************************************************************************/
static U8 mmi_idle_missed_call_check(void);
#ifdef __MMI_NITZ__
static U8 mmi_idle_pending_nitz_check(void);
#endif
#if defined(OBIGO_Q03C) && defined(WAP_SUPPORT)
static U8 mmi_idle_widget_check_and_display_new_msg(void);
#endif
/****************************************************************************
* Global Variable
*****************************************************************************/
extern U16 gCurrLangIndex;
extern U16 gMaxDeployedLangs;
extern S32 MAIN_LCD_device_width;
extern sLanguageDetails *gLanguageArray;
#ifdef __HOMEZONE_SUPPORT__
extern U8 *gHomezoneText;
#endif
extern U16 simErrorDisplayString;
/*****************************************************************************
* Local Variable
*****************************************************************************/
idle_context_struct g_idle_context =
{
0, /* IsOnIdleScreen */
SUBLCD_NOT_ON_IDLE, /* IsSubLcdOnIdleScreen */
0, /* IsOnDialerScreen */
0, /* IsOnSimErrorScreen */
0, /* IsOnSimErrorDialerScreen */
0, /* IsScrSvrSleepIn */
0, /* IsRSKPressOnScreenSaver */
0, /* LongPressEnable */
0, /* ScreenSaverRunFlag */
0, /* ToNameScrFromIdleApp */
#ifdef __MMI_KEYPAD_LOCK_PATTERN_2__
0, /* ToMainMenuScrFromIdleApp */
#endif
0, /* RskPressedFromIdleApp */
#ifdef __MMI_UCM__
0,
#endif
-1, /* IdleScreenDigitKeyCode */
SET_CURRENT_PROFILE, /* ToggleProfile */
#ifdef __MMI_SIMAP_SUPPORT__
0,
#endif
0, /* AutoLockTimeOut */
{0} /* All dialled digits from idle screen */
};
idle_keylock_struct g_keylock_context =
{
0, /* gKeyPadLockFlag */
0,
0, /* KeyLockLSKStringID */
0, /* KeyLockRSKStringID */
0, /* KeyLockLSKIconID */
0, /* KeyLockRSKIconID */
NULL /* diamond, 2006/03/26 Generic exit function for keypad lock callback screens */
};
#ifdef __MMI_NITZ__
static idle_nitz_struct g_nitz_display =
{
0, /* opname_from_nitz */
0, /* country_init */
{0}, /* plmn[] */
{0} /* display_name[] */
};
#ifdef __MMI_DUAL_SIM_MASTER__
idle_nitz_struct g_nitz_display_2 =
{
0, /* opname_from_nitz */
0, /* country_init */
{0}, /* plmn[] */
{0} /* display_name[] */
};
#endif /* __MMI_DUAL_SIM_MASTER__ */
#endif /* __MMI_NITZ__ */
static const IDLECALLBACKINFO mmi_idle_callbacks[] =
{
/* How to add callbacks for idle screen/keypad lock ? */
/* 1. Fill the callbacks into this array */
/* Notice that the function type ! */
/* 1. Checking function should be U8 XXX(void) */
/* 2. Execution function should be void XXX(void) */
#ifdef __MMI_SAT_DISPLAY_TEXT_WITH_KEYPAD_LOCK__
{mmi_sat_is_pending_idle_sat_cmd, mmi_sat_execute_idle_sat_cmd},
#endif
#ifdef __J2ME__
{mmi_java_is_launch_from_idle, mmi_java_entry_mid_launch_from_idle}, /* new Java midlet */
#endif
{mmi_idle_missed_call_check, EntryCHISTNotifyMissedCall}, /* missed call */
{mmi_msg_need_class0_msg_ind, mmi_msg_entry_class0_msg_ind}, /* new class 0 message */
#ifdef __MMI_UNIFIED_MESSAGE__
{mmi_um_check_new_msg, mmi_um_pre_entry_new_msg_ind}, /* new unified message */
#ifdef __UNIFIED_MESSAGE_SIMBOX_SUPPORT__
{mmi_msg_need_new_sim_msg_ind, mmi_msg_entry_new_sim_msg_ind}, /* new unified message */
#endif
#else
{mmi_msg_need_new_msg_ind, mmi_msg_entry_new_msg_ind}, /* new short message */
#endif
{mmi_msg_need_mem_exceed_ind, mmi_msg_entry_mem_exceed_ind}, /* memory exceed notification */
{mmi_msg_need_delivery_report_ind, mmi_msg_entry_deliver_report_ind}, /* deliver report */
{mmi_msg_need_waiting_ind, mmi_msg_entry_msg_waiting_ind}, /* waiting message */
#ifdef __MMI_VOIP__
{mmi_voip_need_msg_waiting_ind, mmi_voip_entry_msg_waiting_ind},
#endif
#ifdef __MMI_IMPS__
{mmi_imps_check_invite_in_idle, NULL}, /* IMPS invitation */
#endif
#if defined(__MMI_VCARD__) || defined(__MMI_VCALENDAR__) || defined(__MMI_VBOOKMARK__)
{mmi_vobj_is_pending_object, mmi_vobj_entry_recv_object}, /* unread vObjects */
#endif
#if defined(__MMI_IRDA_SUPPORT__)
{mmi_irda_get_recv_files_cnt, mmi_irda_entry_idle_notify_scr}, /* files from IrDA */
#endif
#if (defined(__MMI_DOWNLOADABLE_THEMES_SUPPORT__) && defined(__MMI_IRDA_SUPPORT__))
{mmi_irda_is_any_theme_file_rcv, mmi_irda_theme_show_idle_notify_scr}, /* downloadable theme from IrDA */
#endif
#if defined(__MMI_NITZ__)
{mmi_idle_pending_nitz_check, EntryNitzScreen}, /* NITZ */
#endif
{mmi_msg_need_new_cb_ind, mmi_msg_entry_new_cb_ind}, /* new CB message */
#ifdef __MMI_DUAL_SIM_MASTER__
{mmi_card2_msg_need_new_cb_ind, mmi_msg_entry_card2_new_cb_ind}, /* new SIM 2 CB message */
#endif /* __MMI_DUAL_SIM_MASTER__ */
#if defined(OBIGO_Q03C) && defined(WAP_SUPPORT)
{mmi_idle_widget_check_and_display_new_msg, NULL}, /* new message from widget */
#endif
#if defined(__MMI_PHB_CALLERGROUP_IN_SIM__)
{mmi_phb_init_check_sim_change, NULL}, /* associate caller group in SIM card entry */
#endif
#if defined(__MMI_VRSD_DIAL__)
{mmi_vrsddial_check_sim_change, NULL}, /* VRSD dial */
#endif
#if defined(__MMI_OPP_SUPPORT__) || defined(__MMI_BIP_SUPPORT__)
{mmi_bt_get_recv_files_cnt, mmi_bt_entry_idle_notify_scr}, /* files from Bluetooth */
#endif
#if defined(__MMI_DOWNLOAD_AGENT__)
{mmi_da_launch_ring_buffer_check, mmi_da_entry_new_push_ind}, /* download agent */
#endif
#if (defined (JATAAYU_SUPPORT) && defined(MMS_SUPPORT))
{mmi_jmms_need_mms_ind, mmi_jmms_entry_new_mms_ind}, /* new mms message */
#endif
#if !defined (__MMI_UNIFIED_MESSAGE__) && defined (JATAAYU_SUPPORT) && defined (WAP_SUPPORT)
{mmi_brw_new_push_msg_ind, mmi_brw_entry_new_push_msg_ind}, /* new wap push message */
#endif
#if !defined (__MMI_CCA_SUPPORT__) && defined (JATAAYU_SUPPORT) && (defined (WAP_SUPPORT) || (defined (MMS_SUPPORT)))
{mmi_prov_check_and_install_new_settings, mmi_prov_show_install_settings_dialog},
#endif
#if defined (__MMI_BROWSER_2__)
{mmi_brw_push_new_push_msg_ind, mmi_brw_push_entry_new_push_msg_ind},
{mmi_brw_push_service_dlg_idle_scr_cb, mmi_brw_push_fetch_dlg_from_queue},
#endif
#if (defined(__SYNCML_SUPPORT__) && !defined(__MMI_OP01_SYNCML_SETTING__))
{mmi_syncml_is_sync_alarm_expired, mmi_syncml_sync_alarm_hdlr}, /* sync */
#endif
#ifdef __MMI_USER_CTRL_PLMN_SUPPORT__
{mmi_netset_unknown_operator_check, mmi_netset_unknown_operator_query}, /* user control plmn */
#endif
#if defined(__FOTA_ENABLE__)
{mmi_dm_fwu_check_download_finish, mmi_dm_fwu_entry_download_finish_ind}, /* firmware upgrade finished */
#endif
#ifdef __MMI_CCA_SUPPORT__
{mmi_cca_idle_check, mmi_cca_ui_entry_idle_screen},
#endif
{NULL, NULL} /* dummy one, please add callbacks before this entity */
};
static U16 idleLRStringtID = 0; /* __MANUAL_MODE_NW_SEL__ */
extern S8 *idle_screen_wallpaper_name;
/*****************************************************************************
* FUNCTION
* mmi_idle_exe_callback
* DESCRIPTION
* Execute callbacks before entry idle screen
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static pBOOL mmi_idle_exe_callback(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U8 i;
pBOOL rtn = MMI_FALSE;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
for (i = 0; mmi_idle_callbacks[i].idle_callback_chk_f != NULL; i++)
{
if ((*mmi_idle_callbacks[i].idle_callback_chk_f) ())
{
rtn = MMI_TRUE;
if (mmi_idle_callbacks[i].idle_callback_exe_f != NULL)
{
(*mmi_idle_callbacks[i].idle_callback_exe_f) ();
}
break;
}
}
g_keylock_context.IsOnKeyLockCallbackScreen = (rtn == MMI_TRUE) ? 1 : 0;
return rtn;
}
/*****************************************************************************
* FUNCTION
* mmi_idle_missed_call_check
* DESCRIPTION
* Wrapper for idle screen callback
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static U8 mmi_idle_missed_call_check(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __MMI_DUAL_SIM_MASTER__
if (GetMissedCallFlag() &&
(((MTPNP_AD_Get_UsableSide() == MTPNP_AD_SIMCARD1_USABLE || MTPNP_AD_Get_UsableSide() == MTPNP_AD_DUALSIM_USABLE) && CHISTGetMissedCallCountBeforeView() != 0) ||
((MTPNP_AD_Get_UsableSide() == MTPNP_AD_SIMCARD2_USABLE || MTPNP_AD_Get_UsableSide() == MTPNP_AD_DUALSIM_USABLE) && MTPNP_AD_Get_MissedCallCount_BeforeView() != 0)))
#else
if (GetMissedCallFlag() && CHISTGetMissedCallCountBeforeView())
#endif
{
return MMI_TRUE;
}
else
{
SetMissedCallFlag(FALSE);
return MMI_FALSE;
}
}
#ifdef __MMI_NITZ__
/*****************************************************************************
* FUNCTION
* mmi_idle_pending_nitz_check
* DESCRIPTION
* Wrapper for idle screen callback
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
static U8 mmi_idle_pending_nitz_check(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return (U8) g_nitz_cntx.IsNITZPending;
}
/*****************************************************************************
* FUNCTION
* mmi_idle_update_opname_from_nitz
* DESCRIPTION
* Update NITZ network name if a new message is received
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_idle_update_opname_from_nitz(void)
{
if (mmi_idle_is_on_idle_screen())
{
EntryIdleScreen(); /* IdleRefreshServiceIndicationArea(); */
}
}
/*****************************************************************************
* FUNCTION
* mmi_idle_update_nitz_content
* DESCRIPTION
* Update NITZ network name from NVRAM
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_idle_update_nitz_content(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U8 max_display_length = MAX_LENGTH_DISPLAY_NAME;
U8 mcc_tmp_unicode[4 * ENCODING_LENGTH];
U8 tmp_plmn[MAX_PLMN_LEN_MMI + 1];
U8 tmp_display_name[MAX_LENGTH_DISPLAY_NAME * ENCODING_LENGTH];
U8 iCnt = 0;
S32 StringWidth, StringHeight;
stFontAttribute prev_f;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memset(tmp_plmn, 0 , MAX_PLMN_LEN_MMI + 1);
memset(tmp_display_name, 0, MAX_LENGTH_DISPLAY_NAME);
mmi_nitz_get_nitz_nw_name(tmp_plmn, tmp_display_name, (U8) MAX_LENGTH_DISPLAY_NAME - 1, &g_nitz_display.country_init);
if (strlen((S8*)tmp_plmn) != 0 && strlen((S8*)tmp_display_name) != 0)
{
strcpy((S8*)g_nitz_display.plmn, (S8*)tmp_plmn);
if (g_nitz_display.country_init)
{
max_display_length -= 4; /* 1 space char and 3 mcc digits */
}
if (mmi_ucs2strlen((S8*) tmp_display_name) >= max_display_length)
{
mmi_ucs2ncpy((S8*) g_nitz_display.display_name, (S8*) tmp_display_name, max_display_length);
}
else
{
mmi_ucs2cpy((S8*) g_nitz_display.display_name, (S8*) tmp_display_name);
}
/* add check if the NITZ display name exceeds the LCD width */
memcpy(&prev_f, UI_font, sizeof(stFontAttribute));
UI_set_font(&UI_DEFAULT_FONT);
for (iCnt = (U8) mmi_ucs2strlen((PS8) g_nitz_display.display_name); iCnt > 0; iCnt--)
{
Get_StringWidthHeight((U8*) g_nitz_display.display_name, &StringWidth, &StringHeight);
if ((StringWidth + 1) >= MAIN_LCD_device_width - (MMI_IDLE_STRING_MARGIN_GAP << 1))
{
g_nitz_display.display_name[iCnt * ENCODING_LENGTH] = 0x0;
g_nitz_display.display_name[iCnt * ENCODING_LENGTH + 1] = 0x0;
}
else
{
break;
}
}
UI_set_font(&prev_f);
if (g_nitz_display.country_init)
{
mmi_asc_n_to_ucs2((S8*) mcc_tmp_unicode, (S8*) g_nitz_display.plmn, 3);
mmi_ucs2cat((S8*) g_nitz_display.display_name, " ");
mmi_ucs2cat((S8*) g_nitz_display.display_name, (S8*) mcc_tmp_unicode);
}
g_nitz_display.opname_from_nitz = 1;
}
else
{
g_nitz_display.opname_from_nitz = 0;
}
}
/*****************************************************************************
* FUNCTION
* mmi_idle_check_nitz_display_validation
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
pBOOL mmi_idle_check_nitz_display_validation(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (memcmp(g_nitz_display.plmn, gPLMN, MAX_PLMN_LEN_MMI) != 0)
{
g_nitz_display.opname_from_nitz = 0;
return MMI_FALSE;
}
else
{
return MMI_TRUE;
}
}
#ifdef __MMI_DUAL_SIM_MASTER__
/*****************************************************************************
* FUNCTION
* mmi_idle_update_sim2_nitz_content
* DESCRIPTION
* Update NITZ network name from NVRAM
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_idle_update_sim2_nitz_content(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U8 max_display_length = MAX_LENGTH_DISPLAY_NAME;
U8 mcc_tmp_unicode[4 * ENCODING_LENGTH];
U8 tmp_plmn[MAX_PLMN_LEN_MMI + 1];
U8 tmp_display_name[MAX_LENGTH_DISPLAY_NAME * ENCODING_LENGTH];
U8 iCnt = 0;
S32 StringWidth, StringHeight;
stFontAttribute prev_f;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memset(tmp_plmn, 0 , MAX_PLMN_LEN_MMI + 1);
memset(tmp_display_name, 0, MAX_LENGTH_DISPLAY_NAME);
mmi_nitz_get_nitz_nw_name_sim2(tmp_plmn, tmp_display_name, (U8) MAX_LENGTH_DISPLAY_NAME - 1, &g_nitz_display_2.country_init);
if (strlen((S8*)tmp_plmn) != 0 && strlen((S8*)tmp_display_name) != 0)
{
strcpy((S8*)g_nitz_display_2.plmn, (S8*)tmp_plmn);
if (g_nitz_display_2.country_init)
{
max_display_length -= 4; /* 1 space char and 3 mcc digits */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -