一、问题现象
1.开机进入设置向导-》时间和日期界面
2.查看默认时区为"GMT+01:00,GMT+00:00",与VDF的需求不一致-》KO
EXPECTED BEHAVIOUR:
OK:"(GMT) Greenwich Mean Time: Dublin, Lisbon, London"
如果定制Dublin,应该显示"Dublin"的时区,如Dublin GMT+01:00
二、问题分析
FWK分析如下,
String zoneNameString = getZoneLongName(locale, tz, now); 这里的 zoneNameString即是后面显示的timezoneName,在getZoneLongName方法有注释说明,
private static String getZoneLongName(Locale locale, TimeZone tz, Date now){
boolean daylight = tz.inDaylightTime(now);
// This returns a name if it can, or will fall back to GMT+0X:00 format. return
tz.getDisplayName(daylight, TimeZone.LONG, locale);
}
此处调用了TimeZone.java中的getDisplayName方法,在此方法之前同样有相关注释:
* If the name is not available, the result is in the format
* {@code GMT[+-]hh:mm}.
另外在SetupWizard界面dumpsys activity,
Hist #4: ActivityRecord{d95a9cd u0 com.android.settings/.DateTimeSettingsSetupWizard t3}
Intent { act=com.android.setupwizard.DATE_TIME flg=0x4000000
cmp=com.android.settings/.DateTimeSettingsSetupWizard (has extras) }
ProcessRecord{5bb5e1f 8887:com.android.settings/1000}
发现并非Google官方的SetupWizard,而在flash3等官方的SetupWizard界面中,
Hist #3: ActivityRecord{ecb98d9 u0
com.google.android.setupwizard/.DateTimeSetupActivity t3}
Intent { act=com.android.setupwizard.DATE_TIME flg=0x4000000
cmp=com.google.android.setupwizard/.DateTimeSetupActivity (has extras) }
ProcessRecord{e01a17e 3254:com.google.android.setupwizard/u0a96}
选择时区的地方也不是包含所有城市,Google在处理的时候已经说明result可为 null,为null的时候则显示GMT[+ -][hh:mm]格式,
三、解决方案
如果需要解决描述中的问题,建议com.android.settings/.DateTimeSettingsSetupWizard在选择时区 zongName为 空的时候做一些改动,请知悉。