summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvichang <vichang@google.com>2021-09-21 10:52:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-09-21 10:52:53 +0000
commite6bf1a83d82952a8e035e6e641858e3d4746d0c2 (patch)
tree2ff1da81e8d857a00346f093ef05610da955659b
parentd2eca211d4ff8e0971dc0025bbfc87dce1f26a41 (diff)
parent3166166bdda3a8cbdb9655eb375bd67c4bec69ce (diff)
downloadpackages_apps_Settings-e6bf1a83d82952a8e035e6e641858e3d4746d0c2.tar.gz
packages_apps_Settings-e6bf1a83d82952a8e035e6e641858e3d4746d0c2.tar.bz2
packages_apps_Settings-e6bf1a83d82952a8e035e6e641858e3d4746d0c2.zip
Merge "Replace @CorePlatformApi APIs usages in TimeZoneInfoPreferenceControllerTest" am: 3166166bdd
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/1831314 Change-Id: I458bf767bbea8b5921f00afae884d309d270f7b0
-rw-r--r--src/com/android/settings/datetime/timezone/TimeZoneInfo.java25
-rw-r--r--src/com/android/settings/datetime/timezone/TimeZoneInfoPreferenceController.java51
2 files changed, 48 insertions, 28 deletions
diff --git a/src/com/android/settings/datetime/timezone/TimeZoneInfo.java b/src/com/android/settings/datetime/timezone/TimeZoneInfo.java
index f74614d7c7..f9e819c417 100644
--- a/src/com/android/settings/datetime/timezone/TimeZoneInfo.java
+++ b/src/com/android/settings/datetime/timezone/TimeZoneInfo.java
@@ -151,7 +151,7 @@ public class TimeZoneInfo {
public TimeZoneInfo format(TimeZone timeZone) {
String canonicalZoneId = getCanonicalZoneId(timeZone);
final TimeZoneNames timeZoneNames = mTimeZoneFormat.getTimeZoneNames();
- final java.util.TimeZone javaTimeZone = java.util.TimeZone.getTimeZone(canonicalZoneId);
+ final java.util.TimeZone javaTimeZone = toJavaTimeZone(canonicalZoneId);
final CharSequence gmtOffset = ZoneGetter.getGmtOffsetText(mTimeZoneFormat, mLocale,
javaTimeZone, mNow);
return new TimeZoneInfo.Builder(timeZone)
@@ -165,15 +165,24 @@ public class TimeZoneInfo {
.setGmtOffset(gmtOffset)
.build();
}
+ }
- private static String getCanonicalZoneId(TimeZone timeZone) {
- final String id = timeZone.getID();
- final String canonicalId = TimeZone.getCanonicalID(id);
- if (canonicalId != null) {
- return canonicalId;
- }
- return id;
+ /* package-private */ java.util.TimeZone getJavaTimeZone() {
+ String canonicalZoneId = getCanonicalZoneId(mTimeZone);
+ return toJavaTimeZone(canonicalZoneId);
+ }
+
+ private static java.util.TimeZone toJavaTimeZone(String canonicalZoneId) {
+ return java.util.TimeZone.getTimeZone(canonicalZoneId);
+ }
+
+ private static String getCanonicalZoneId(TimeZone timeZone) {
+ final String id = timeZone.getID();
+ final String canonicalId = TimeZone.getCanonicalID(id);
+ if (canonicalId != null) {
+ return canonicalId;
}
+ return id;
}
}
diff --git a/src/com/android/settings/datetime/timezone/TimeZoneInfoPreferenceController.java b/src/com/android/settings/datetime/timezone/TimeZoneInfoPreferenceController.java
index 80cefb68ff..c6ac3287b7 100644
--- a/src/com/android/settings/datetime/timezone/TimeZoneInfoPreferenceController.java
+++ b/src/com/android/settings/datetime/timezone/TimeZoneInfoPreferenceController.java
@@ -20,17 +20,17 @@ import android.content.Context;
import android.icu.text.DateFormat;
import android.icu.text.DisplayContext;
import android.icu.text.SimpleDateFormat;
-import android.icu.util.BasicTimeZone;
import android.icu.util.Calendar;
import android.icu.util.TimeZone;
-import android.icu.util.TimeZoneTransition;
import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import java.time.Instant;
+import java.time.zone.ZoneOffsetTransition;
+import java.time.zone.ZoneRules;
import java.util.Date;
public class TimeZoneInfoPreferenceController extends BasePreferenceController {
@@ -86,11 +86,11 @@ public class TimeZoneInfoPreferenceController extends BasePreferenceController {
return mContext.getString(R.string.zone_info_footer_no_dst, offsetAndName);
}
- final TimeZoneTransition nextDstTransition = findNextDstTransition(timeZone);
- if (nextDstTransition == null) {
- return null;
+ final ZoneOffsetTransition nextDstTransition = findNextDstTransition(item);
+ if (nextDstTransition == null) { // No future transition
+ return mContext.getString(R.string.zone_info_footer_no_dst, offsetAndName);
}
- final boolean toDst = nextDstTransition.getTo().getDSTSavings() != 0;
+ final boolean toDst = getDSTSavings(timeZone, nextDstTransition.getInstant()) != 0;
String timeType = toDst ? item.getDaylightName() : item.getStandardName();
if (timeType == null) {
// Fall back to generic "summer time" and "standard time" if the time zone has no
@@ -101,26 +101,37 @@ public class TimeZoneInfoPreferenceController extends BasePreferenceController {
}
final Calendar transitionTime = Calendar.getInstance(timeZone);
- transitionTime.setTimeInMillis(nextDstTransition.getTime());
+ transitionTime.setTimeInMillis(nextDstTransition.getInstant().toEpochMilli());
final String date = mDateFormat.format(transitionTime);
return SpannableUtil.getResourcesText(mContext.getResources(),
R.string.zone_info_footer, offsetAndName, timeType, date);
}
- private TimeZoneTransition findNextDstTransition(TimeZone timeZone) {
- if (!(timeZone instanceof BasicTimeZone)) {
- return null;
- }
- final BasicTimeZone basicTimeZone = (BasicTimeZone) timeZone;
- TimeZoneTransition transition = basicTimeZone.getNextTransition(
- mDate.getTime(), /* inclusive */ false);
- do {
- if (transition.getTo().getDSTSavings() != transition.getFrom().getDSTSavings()) {
+ private ZoneOffsetTransition findNextDstTransition(TimeZoneInfo timeZoneInfo) {
+ TimeZone timeZone = timeZoneInfo.getTimeZone();
+ ZoneRules zoneRules = timeZoneInfo.getJavaTimeZone().toZoneId().getRules();
+
+ Instant from = mDate.toInstant();
+
+ ZoneOffsetTransition transition;
+ while (true) { // Find next transition with different DST offsets
+ transition = zoneRules.nextTransition(from);
+ if (transition == null) {
+ break;
+ }
+ Instant to = transition.getInstant();
+ if (getDSTSavings(timeZone, from) != getDSTSavings(timeZone, to)) {
break;
}
- transition = basicTimeZone.getNextTransition(
- transition.getTime(), /*inclusive */ false);
- } while (transition != null);
+ from = to;
+ }
+
return transition;
}
+
+ private static int getDSTSavings(TimeZone timeZone, Instant instant) {
+ int[] offsets = new int[2];
+ timeZone.getOffset(instant.toEpochMilli(), false /* local time */, offsets);
+ return offsets[1];
+ }
}