AMPM设置菜单的添加.docx
《AMPM设置菜单的添加.docx》由会员分享,可在线阅读,更多相关《AMPM设置菜单的添加.docx(26页珍藏版)》请在冰点文库上搜索。
![AMPM设置菜单的添加.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/2d52ea9c-c89e-4618-9138-0a75fdd55ac4/2d52ea9c-c89e-4618-9138-0a75fdd55ac41.gif)
AMPM设置菜单的添加
12小时制下AM/PM设置菜单的添加
一、开发背景
在karbonn项目zp180b002和zl590d002上,客户强烈要求在所有可进行时间设置的界面在12小时制下都要添加AM/PM的设置菜单,并能进行正确的时间设置。
二、涉及界面
1、phonesettings下的Settime/date界面
2、Alarm下的edit界面
3、calendar下的Add、Edit界面
4、Todolist下的Add、Edit界面
5、phonesettings下的schedulepoweron/off的edit界面
三、原理介绍
该功能主要只做上层显示的变化,而不修改底层原有数据,降低未知风险。
要点有以下几点:
1、在12小时下进入上述界面,在add、edit等操作时改变原有界面布局,增加AM/PM设置的caption和selectitem。
2、显示:
从底层获取原有数据转换成12小时显示。
3、存储:
将设置的数据转换成24小时存储。
4、selectitem的值(当前是AM还是PM):
定义全局变量,由该全局变量来决定,当前处于AM还是PM。
其中需要特别指出的是:
calendar和todolist的add、edit界面较为复杂,因为calendar界面包括了stat_time、end_time都需要添加AM/PM设置,此外calendar和todolist下add、edit以及view界面都包括了alarm_time,虽然此项不能对时间进行设置不需要添加AM/PM设置菜单,但是其时间显示在12小时制下仍然显示为24小时制的格式。
所以在12小时制下需要对其作出里,这里采取了后缀显示AM/PM的方案(后缀显示AM/PM的方案实现过程详见于项目zl590d002相关代码)。
效果示例图如下(以todolist为例):
图3.1todolist下的无AM/PM图3.2todolist下的有AM/PM设置
设置add界面的add界面
图3.3todolist下的无AM/PM图3.4todolist下的有AM/PM设置
设置view界面的view界面
图3.3todolist下的无AM/PM图3.4todolist下的有AM/PM设置
设置edit界面的edit界面
四、12小时制下AM/PM设置界面展示
以phonesettings下的Settime/date界面为例:
图4.1:
无AM/PM设置功能图4.2:
有AM/PM设置功能
五:
代码实现过程示例:
(以phonesettings下的Settime/date界面为例,其他界面原理相同,只需增加或修改细节,例如后缀显示AM/PM)
1。
增加一个宏__MMI_TIME_FORMAT_AMPM_SUPPORT__,用于控制修改的所有内容。
2。
在DateAndTime.c文件中,修改如下:
1)增加inline显示相关的id的定义
/*Setdateandtime*/
#defineSET_DATE_AND_TIME_SET_TIME_CAPTION(CUI_INLINE_ITEM_ID_BASE+1)
#defineSET_DATE_AND_TIME_SET_TIME(CUI_INLINE_ITEM_ID_BASE+2)
#defineSET_DATE_AND_TIME_SET_DATE_CAPTION(CUI_INLINE_ITEM_ID_BASE+3)
#defineSET_DATE_AND_TIME_SET_DATE(CUI_INLINE_ITEM_ID_BASE+4)
#defineSET_DATE_AND_TIME_DAYLIGHT_SAVING_CAPTION(CUI_INLINE_ITEM_ID_BASE+5)
#defineSET_DATE_AND_TIME_DAYLIGHT_SAVING_SELECT(CUI_INLINE_ITEM_ID_BASE+6)
#ifdefined(__MMI_TIME_FORMAT_AMPM_SUPPORT__)
#defineSET_DATE_AND_TIME_SET_AMPM_CAPTION(CUI_INLINE_ITEM_ID_BASE+7)
#defineSET_DATE_AND_TIME_SET_AMPM_SELECT(CUI_INLINE_ITEM_ID_BASE+8)
#endif
2)增加存在ampm的inline界面相关的全局变量:
#ifdefined(__MMI_TIME_FORMAT_AMPM_SUPPORT__)
staticU16g_phnset_dt_am_pm_str_id[]={STR_AM,STR_PM};//字串资源需要自行添加
staticconstcui_inline_item_caption_structg_phnset_set_date_time_ampm_caption={STR_ID_AMPM};//字串资源需要自行添加
staticcui_inline_item_select_structg_phnset_set_date_time_ampm_select=
{
2,/*amandpm*/
0,
g_phnset_dt_am_pm_str_id
};
staticcui_inline_set_item_structg_phnset_set_date_time_with_ampm_data[]=
{
{SET_DATE_AND_TIME_SET_TIME_CAPTION,CUI_INLINE_ITEM_TYPE_CAPTION,IMG_TIME,&g_phnset_set_date_time_caption1},
{SET_DATE_AND_TIME_SET_TIME,CUI_INLINE_ITEM_TYPE_TIME|CUI_INLINE_ITEM_DISABLE_LIST_HIGHLIGHT,0,&g_phnset_date_and_time_common_inline_time},
{SET_DATE_AND_TIME_SET_AMPM_CAPTION,CUI_INLINE_ITEM_TYPE_CAPTION,IMG_TIME,&g_phnset_set_date_time_ampm_caption},
{SET_DATE_AND_TIME_SET_AMPM_SELECT,CUI_INLINE_ITEM_TYPE_SELECT,0,&g_phnset_set_date_time_ampm_select},
{SET_DATE_AND_TIME_SET_DATE_CAPTION,CUI_INLINE_ITEM_TYPE_CAPTION,IMG_CAL,&g_phnset_set_date_time_caption2},
{SET_DATE_AND_TIME_SET_DATE,CUI_INLINE_ITEM_TYPE_DATE|CUI_INLINE_ITEM_DISABLE_LIST_HIGHLIGHT,0,&(g_phnset_date_and_time_common_inline_time.date_time)},
{SET_DATE_AND_TIME_DAYLIGHT_SAVING_CAPTION,CUI_INLINE_ITEM_TYPE_CAPTION,SUN_ICON,&g_phnset_set_date_time_caption3},
{SET_DATE_AND_TIME_DAYLIGHT_SAVING_SELECT,CUI_INLINE_ITEM_TYPE_SELECT,0,&g_phnset_set_date_time_select1}
};
staticconstcui_inline_structg_phnset_set_date_time_with_ampm_inline=
{
sizeof(g_phnset_set_date_time_with_ampm_data)/sizeof(cui_inline_set_item_struct),
STR_ID_PHNSET_SET_DT,
IMG_SCR_SETTING_CAPTION,
CUI_INLINE_SCREEN_DEFAULT_TEXT|CUI_INLINE_SCREEN_DISABLE_DONE,
NULL,
g_phnset_set_date_time_with_ampm_data
};
staticU8g_phnset_set_date_time_curr_ampm_flag=0x00;//0x00-->AM,0x01-->PM
#endif
3)增加时间转换的两个函数:
#ifdefined(__MMI_TIME_FORMAT_AMPM_SUPPORT__)
/*****************************************************************************
*FUNCTION
*mmi_phnset_date_and_time_convert_to_12_format
*DESCRIPTION
*convert24timeformatto12formattime
*PARAMETERS
*hour_24timeformat[IN]
*RETURNS
*12formattime
*****************************************************************************/
U16mmi_phnset_date_and_time_convert_to_12_format(U16hour_24timeformat)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U16hour_12timeformat=hour_24timeformat;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(hour_24timeformat>12)
{
g_phnset_set_date_time_curr_ampm_flag=0x01;//PM
hour_12timeformat-=12;
}
elseif(hour_24timeformat==0)
{
hour_12timeformat=12;
g_phnset_set_date_time_curr_ampm_flag=0x00;//AM
}
elseif(hour_24timeformat==12)
{
g_phnset_set_date_time_curr_ampm_flag=0x01;//PM
}
else
{
g_phnset_set_date_time_curr_ampm_flag=0x00;//AM
}
returnhour_12timeformat;
}
/*****************************************************************************
*FUNCTION
*mmi_phnset_date_and_time_convert_to_24_format
*DESCRIPTION
*convert12timeformatto24formattime
*PARAMETERS
*hour_12timeformat[IN]
*RETURNS
*24formattime
*****************************************************************************/
U16mmi_phnset_date_and_time_convert_to_24_format(U16hour_12timeformat)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
U16hour_24timeformat=hour_12timeformat;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(hour_12timeformat>12)
{
hour_24timeformat=12;
}
if((g_phnset_set_date_time_curr_ampm_flag==0x01)&&hour_12timeformat<12)//PM
{
hour_24timeformat=hour_12timeformat+12;
}
elseif((g_phnset_set_date_time_curr_ampm_flag==0x00)&&hour_12timeformat==12)//12:
xxAM
{
hour_24timeformat=0;
}
returnhour_24timeformat;
}
#endif
4)修改mmi_phnset_date_and_time_mytime_to_inline_time如下:
/*****************************************************************************
*FUNCTION
*mmi_phnset_date_and_time_mytime_to_inline_time
*DESCRIPTION
*Transferg_time_buffertoinlinetimestruct
*PARAMETERS
*
*RETURNS
*staticvoid
*****************************************************************************/
staticvoidmmi_phnset_date_and_time_mytime_to_inline_time(cui_inline_item_time_struct*inline_time)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
inline_time->date_time.year=g_time_buffer.nYear;
inline_time->date_time.month=g_time_buffer.nMonth;
inline_time->date_time.day=g_time_buffer.nDay;
inline_time->date_time.hour=g_time_buffer.nHour;
inline_time->date_time.minute=g_time_buffer.nMin;
inline_time->date_time.second=g_time_buffer.nSec;
inline_time->date_format=0;
#ifdefined(__MMI_TIME_FORMAT_AMPM_SUPPORT__)
if(!
PhnsetGetTimeFormat())
{
inline_time->date_time.hour=mmi_phnset_date_and_time_convert_to_12_format(inline_time->date_time.hour);
}
#endif
}
5)修改mmi_phnset_date_and_time_inline_time_to_mytime函数如下:
/*****************************************************************************
*FUNCTION
*mmi_phnset_date_and_time_inline_time_to_mytime
*DESCRIPTION
*Transferinlinetimestructdatatog_time_buffer
*PARAMETERS
*
*RETURNS
*staticvoid
*****************************************************************************/
staticvoidmmi_phnset_date_and_time_inline_time_to_mytime(cui_inline_item_time_struct*inline_time)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
#ifdefined(__MMI_TIME_FORMAT_AMPM_SUPPORT__)
if(!
PhnsetGetTimeFormat())
{
inline_time->date_time.hour=mmi_phnset_date_and_time_convert_to_24_format(inline_time->date_time.hour);
}
#endif
g_time_buffer.nYear=(kal_uint16)inline_time->date_time.year;
g_time_buffer.nMonth=(kal_uint8)inline_time->date_time.month;
g_time_buffer.nDay=(kal_uint8)inline_time->date_time.day;
g_time_buffer.nHour=(kal_uint8)inline_time->date_time.hour;
g_time_buffer.nMin=(kal_uint8)inline_time->date_time.minute;
/*Inlinecuiwillnotreturnsecond*/
g_time_buffer.nSec=0;
}
6)修改函数mmi_phnset_entry_set_date_and_time如下:
/*****************************************************************************
*FUNCTION
*mmi_phnset_entry_set_date_and_time
*DESCRIPTION
*Internalentryfunction
*PARAMETERS
*
*RETURNS
*staticvoid
*****************************************************************************/
staticvoidmmi_phnset_entry_set_date_and_time(MMI_IDparent_gid)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
MMI_ID*inlinecui_gid;
cui_inline_item_time_structinline_time;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*---------------------