From 77f97af8eb79e4ed43c601648492cd66992a216c Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Wed, 28 Mar 2018 19:50:06 +0100 Subject: [PATCH] Fix incorrect GMT offset in display - android.icu.impl.TimeZoneAdapter doesn't fully implement java.util.TimeZone, e.g. does not override getOffset(long date). TimeZoneAdapter isn't a public API in ICU/Android. It shouldn't be used in the first place Bug: 77223510 Test: m RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.datetime.timezone Change-Id: Ic0d7794326948796dcc5cc0b268ef634a74803c4 --- .../android/settings/datetime/timezone/TimeZoneInfo.java | 2 +- .../settings/datetime/timezone/TimeZoneInfoTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/datetime/timezone/TimeZoneInfo.java b/src/com/android/settings/datetime/timezone/TimeZoneInfo.java index 8cb1d4e2bed..03663903121 100644 --- a/src/com/android/settings/datetime/timezone/TimeZoneInfo.java +++ b/src/com/android/settings/datetime/timezone/TimeZoneInfo.java @@ -167,7 +167,7 @@ public class TimeZoneInfo { public TimeZoneInfo format(TimeZone timeZone) { final String id = timeZone.getID(); final TimeZoneNames timeZoneNames = mTimeZoneFormat.getTimeZoneNames(); - final java.util.TimeZone javaTimeZone = android.icu.impl.TimeZoneAdapter.wrap(timeZone); + final java.util.TimeZone javaTimeZone = java.util.TimeZone.getTimeZone(id); final CharSequence gmtOffset = ZoneGetter.getGmtOffsetText(mTimeZoneFormat, mLocale, javaTimeZone, mNow); return new TimeZoneInfo.Builder(timeZone) diff --git a/tests/robotests/src/com/android/settings/datetime/timezone/TimeZoneInfoTest.java b/tests/robotests/src/com/android/settings/datetime/timezone/TimeZoneInfoTest.java index c6f5fe6ba83..32975bc1f05 100644 --- a/tests/robotests/src/com/android/settings/datetime/timezone/TimeZoneInfoTest.java +++ b/tests/robotests/src/com/android/settings/datetime/timezone/TimeZoneInfoTest.java @@ -43,4 +43,13 @@ public class TimeZoneInfoTest { assertThat(timeZoneInfo.getStandardName()).isEqualTo("Pacific Standard Time"); assertThat(timeZoneInfo.getDaylightName()).isEqualTo("Pacific Daylight Time"); } + + @Test + public void getGmtOffset_zoneLordHowe_correctGmtOffset() { + Date date = new Date(1514764800000L); // 00:00 1/1/2018 GMT + Formatter formatter = new Formatter(Locale.US, date); + + TimeZoneInfo timeZoneInfo = formatter.format("Australia/Lord_Howe"); + assertThat(timeZoneInfo.getGmtOffset().toString()).isEqualTo("GMT+11:00"); + } }