开机进入idle的时候:
//重置历史堆栈
DinitHistory();
///开始屏幕变暗计时
TurnOffBacklight();
///准备闹钟
PendingAlarmReminder
///点亮手机屏幕?
StartLEDPatternBackGround();
//如果充电,则显示充电图标
if (g_charbat_context.isChargerConnected)
{
StartTimer(BOOTUP_CHARGER_DETECT_TIMER, 3000, ChargerDetectTimeoutHdlr);
}
///告诉底层,已经到idle界面,开机完成
mmi_idle_notify_bootup_ready_to_l4c(); /* to L4C */
mmi_idle_notify_bootup_ready_to_wap(); /* to WAP */
mmi_idle_notify_bootup_ready_to_certman(); /* to CertMan */
///如果是其他屏幕进入idle,开始屏保和锁键盘
gIsIdleScreenReentry = (GetActiveScreenId() == IDLE_SCREEN_ID ? MMI_TRUE : MMI_FALSE);
if (!gIsIdleScreenReentry)
{
mmi_idle_start_screensaver();
mmi_idle_start_keypad_lock();
}
gIsIdleScreenReentry = MMI_FALSE;
idle界面ui情况比较多:
大的情况分为三中
1。网络搜索完成
if (mmi_bootup_is_network_searching_complete() || mmi_bootup_is_sim2_network_searching_complete())
mmi_idle_entry_idle_screen
ShowCategory33Screen
2。sim1卡注册失败,(为什么没sim2卡呢)?
else if (!mmi_bootup_is_nw_registration_ok() && !g_pwr_context.InvalidSimShowed)
3.搜网状态 Displays network seaching animation
mmi_idle_entry_searching_screen(); ///进入搜网界面
ShowCategory33Screen
SearchingSrceenTimeOutHandler //timer 到时
mmi_bootup_exit_network_searching
EntryIdleScreen //再回到idle界面
小的情况又分为两种:
键盘未锁情况: if (g_keylock_context.gKeyPadLockFlag == 0) /* keypad is not locked */
{
这个不知道是做什么的 ?
/* if g_msg_cntx.msg_status is not in idle state, need to help SMS to clear action queue */
if (mmi_msg_need_clear_action_queue())
{
mmi_frm_sms_delete_action_pending();
}
}
///如果有idle的中断回调(如未读短信),则执行,否则进入idle界面
if (mmi_idle_exe_callback() == MMI_FALSE) /* no pending message */
{
{
mmi_idle_entry_idle_screen();
}
}
}
//注册键盘被锁时的按键
mmi_idle_generic_keypad_lock_key_hdlr()
键盘被锁 :
//键盘锁定的字符以及状态栏图标的更换
mmi_idle_set_keypad_lock_string();
这个不知道是做什么的 ?
/* if g_msg_cntx.msg_status is not in idle state, need to help SMS to clear action queue */
if (mmi_msg_need_clear_action_queue())
{
mmi_frm_sms_delete_action_pending();
}
///如果有idle的中断回调(如未读短信),则执行,否则就画idle界面
if (mmi_idle_exe_callback() == MMI_FALSE) /* no pending message */
{
//新版的idle界面
mmi_vhs_show_homescreen()
}
//注册键盘被锁时的按键
mmi_idle_generic_keypad_lock_key_hdlr()
//注册优先按键响应函数,比如用于锁键盘时紧急电话的拨打
mmi_frm_kbd_reg_pre_key_hdlr(IdleScreenEmergencyCallCheckNKeypadLock);
所以可以看出负责idle界面绘画的函数是 ShowCategory33Screen
所以如果要改idle界面,先对ShowCategory33Screen做修改,
同时还要注意到其他的情况也会来触发idle界面的重绘:
idle_screen_show_network_details ///network
wgui_clock_update_main_lcd //time
show_main_LCD_date_time
hide_main_LCD_date_time
wgui_status_icon_hide_status_icon_bars ///隐藏status bar,即画透明
wgui_status_icon_refresh_status_icon_display //刷新status bar,即显示
wgui_status_icon_show_status_icons
wgui_status_icon_change_status_icon_level //某个status icon 状态发生了改变