diff options
10 files changed, 69 insertions, 66 deletions
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index 647f63025cf7..febb293921cd 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -35,7 +35,7 @@ import android.util.ArrayMap; import android.util.Log; import android.util.proto.ProtoOutputStream; -import libcore.timezone.ZoneInfoDb; +import com.android.i18n.timezone.ZoneInfoDb; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index 8e8409d15143..e7339380df69 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -18,8 +18,8 @@ package android.text.format; import android.util.TimeFormatException; -import libcore.timezone.ZoneInfoDb; -import libcore.util.ZoneInfo; +import com.android.i18n.timezone.ZoneInfoData; +import com.android.i18n.timezone.ZoneInfoDb; import java.util.Locale; import java.util.TimeZone; @@ -1059,15 +1059,15 @@ public class Time { * to the enclosing object, but others do not: thus separate state is retained. */ private static class TimeCalculator { - public final ZoneInfo.WallTime wallTime; + public final ZoneInfoData.WallTime wallTime; public String timezone; // Information about the current timezone. - private ZoneInfo zoneInfo; + private ZoneInfoData mZoneInfoData; public TimeCalculator(String timezoneId) { - this.zoneInfo = lookupZoneInfo(timezoneId); - this.wallTime = new ZoneInfo.WallTime(); + this.mZoneInfoData = lookupZoneInfoData(timezoneId); + this.wallTime = new ZoneInfoData.WallTime(); } public long toMillis(boolean ignoreDst) { @@ -1075,7 +1075,7 @@ public class Time { wallTime.setIsDst(-1); } - int r = wallTime.mktime(zoneInfo); + int r = wallTime.mktime(mZoneInfoData); if (r == -1) { return -1; } @@ -1087,7 +1087,7 @@ public class Time { int intSeconds = (int) (millis / 1000); updateZoneInfoFromTimeZone(); - wallTime.localtime(intSeconds, zoneInfo); + wallTime.localtime(intSeconds, mZoneInfoData); } public String format(String format) { @@ -1095,31 +1095,31 @@ public class Time { format = "%c"; } TimeFormatter formatter = new TimeFormatter(); - return formatter.format(format, wallTime, zoneInfo); + return formatter.format(format, wallTime, mZoneInfoData); } private void updateZoneInfoFromTimeZone() { - if (!zoneInfo.getID().equals(timezone)) { - this.zoneInfo = lookupZoneInfo(timezone); + if (!mZoneInfoData.getID().equals(timezone)) { + this.mZoneInfoData = lookupZoneInfoData(timezone); } } - private static ZoneInfo lookupZoneInfo(String timezoneId) { - ZoneInfo zoneInfo = ZoneInfoDb.getInstance().makeTimeZone(timezoneId); - if (zoneInfo == null) { - zoneInfo = ZoneInfoDb.getInstance().makeTimeZone("GMT"); + private static ZoneInfoData lookupZoneInfoData(String timezoneId) { + ZoneInfoData zoneInfoData = ZoneInfoDb.getInstance().makeZoneInfoData(timezoneId); + if (zoneInfoData == null) { + zoneInfoData = ZoneInfoDb.getInstance().makeZoneInfoData("GMT"); } - if (zoneInfo == null) { + if (zoneInfoData == null) { throw new AssertionError("GMT not found: \"" + timezoneId + "\""); } - return zoneInfo; + return zoneInfoData; } public void switchTimeZone(String timezone) { - int seconds = wallTime.mktime(zoneInfo); + int seconds = wallTime.mktime(mZoneInfoData); this.timezone = timezone; updateZoneInfoFromTimeZone(); - wallTime.localtime(seconds, zoneInfo); + wallTime.localtime(seconds, mZoneInfoData); } public String format2445(boolean hasTime) { diff --git a/core/java/android/text/format/TimeFormatter.java b/core/java/android/text/format/TimeFormatter.java index f7fd89d7d819..cd541f2b829f 100644 --- a/core/java/android/text/format/TimeFormatter.java +++ b/core/java/android/text/format/TimeFormatter.java @@ -22,8 +22,9 @@ package android.text.format; import android.content.res.Resources; +import com.android.i18n.timezone.ZoneInfoData; + import libcore.icu.LocaleData; -import libcore.util.ZoneInfo; import java.nio.CharBuffer; import java.time.Instant; @@ -94,8 +95,8 @@ class TimeFormatter { * incorrect digit localization behavior. */ String formatMillisWithFixedFormat(long timeMillis) { - // This method is deliberately not a general purpose replacement for - // format(String, ZoneInfo.WallTime, ZoneInfo): It hard-codes the pattern used; many of the + // This method is deliberately not a general purpose replacement for format(String, + // ZoneInfoData.WallTime, ZoneInfoData): It hard-codes the pattern used; many of the // pattern characters supported by Time.format() have unusual behavior which would make // using java.time.format or similar packages difficult. It would be a lot of work to share // behavior and many internal Android usecases can be covered by this common pattern @@ -144,7 +145,8 @@ class TimeFormatter { /** * Format the specified {@code wallTime} using {@code pattern}. The output is returned. */ - public String format(String pattern, ZoneInfo.WallTime wallTime, ZoneInfo zoneInfo) { + public String format(String pattern, ZoneInfoData.WallTime wallTime, + ZoneInfoData zoneInfoData) { try { StringBuilder stringBuilder = new StringBuilder(); @@ -153,7 +155,7 @@ class TimeFormatter { // and locale sensitive strings are output directly using outputBuilder. numberFormatter = new Formatter(stringBuilder, Locale.US); - formatInternal(pattern, wallTime, zoneInfo); + formatInternal(pattern, wallTime, zoneInfoData); String result = stringBuilder.toString(); // The localizeDigits() behavior is the source of a bug since some formats are defined // as being in ASCII and not localized. @@ -186,13 +188,14 @@ class TimeFormatter { * Format the specified {@code wallTime} using {@code pattern}. The output is written to * {@link #outputBuilder}. */ - private void formatInternal(String pattern, ZoneInfo.WallTime wallTime, ZoneInfo zoneInfo) { + private void formatInternal(String pattern, ZoneInfoData.WallTime wallTime, + ZoneInfoData zoneInfoData) { CharBuffer formatBuffer = CharBuffer.wrap(pattern); while (formatBuffer.remaining() > 0) { boolean outputCurrentChar = true; char currentChar = formatBuffer.get(formatBuffer.position()); if (currentChar == '%') { - outputCurrentChar = handleToken(formatBuffer, wallTime, zoneInfo); + outputCurrentChar = handleToken(formatBuffer, wallTime, zoneInfoData); } if (outputCurrentChar) { outputBuilder.append(formatBuffer.get(formatBuffer.position())); @@ -201,8 +204,8 @@ class TimeFormatter { } } - private boolean handleToken(CharBuffer formatBuffer, ZoneInfo.WallTime wallTime, - ZoneInfo zoneInfo) { + private boolean handleToken(CharBuffer formatBuffer, ZoneInfoData.WallTime wallTime, + ZoneInfoData zoneInfoData) { // The char at formatBuffer.position() is expected to be '%' at this point. int modifier = 0; @@ -247,10 +250,10 @@ class TimeFormatter { outputYear(wallTime.getYear(), true, false, modifier); return false; case 'c': - formatInternal(dateTimeFormat, wallTime, zoneInfo); + formatInternal(dateTimeFormat, wallTime, zoneInfoData); return false; case 'D': - formatInternal("%m/%d/%y", wallTime, zoneInfo); + formatInternal("%m/%d/%y", wallTime, zoneInfoData); return false; case 'd': numberFormatter.format(getFormat(modifier, "%02d", "%2d", "%d", "%02d"), @@ -272,7 +275,7 @@ class TimeFormatter { wallTime.getMonthDay()); return false; case 'F': - formatInternal("%Y-%m-%d", wallTime, zoneInfo); + formatInternal("%Y-%m-%d", wallTime, zoneInfoData); return false; case 'H': numberFormatter.format(getFormat(modifier, "%02d", "%2d", "%d", "%02d"), @@ -315,21 +318,21 @@ class TimeFormatter { : localeData.amPm[0], FORCE_LOWER_CASE); return false; case 'R': - formatInternal("%H:%M", wallTime, zoneInfo); + formatInternal("%H:%M", wallTime, zoneInfoData); return false; case 'r': - formatInternal("%I:%M:%S %p", wallTime, zoneInfo); + formatInternal("%I:%M:%S %p", wallTime, zoneInfoData); return false; case 'S': numberFormatter.format(getFormat(modifier, "%02d", "%2d", "%d", "%02d"), wallTime.getSecond()); return false; case 's': - int timeInSeconds = wallTime.mktime(zoneInfo); + int timeInSeconds = wallTime.mktime(zoneInfoData); outputBuilder.append(Integer.toString(timeInSeconds)); return false; case 'T': - formatInternal("%H:%M:%S", wallTime, zoneInfo); + formatInternal("%H:%M:%S", wallTime, zoneInfoData); return false; case 't': outputBuilder.append('\t'); @@ -383,7 +386,7 @@ class TimeFormatter { return false; } case 'v': - formatInternal("%e-%b-%Y", wallTime, zoneInfo); + formatInternal("%e-%b-%Y", wallTime, zoneInfoData); return false; case 'W': int n = (wallTime.getYearDay() + DAYSPERWEEK - ( @@ -395,10 +398,10 @@ class TimeFormatter { numberFormatter.format("%d", wallTime.getWeekDay()); return false; case 'X': - formatInternal(timeOnlyFormat, wallTime, zoneInfo); + formatInternal(timeOnlyFormat, wallTime, zoneInfoData); return false; case 'x': - formatInternal(dateOnlyFormat, wallTime, zoneInfo); + formatInternal(dateOnlyFormat, wallTime, zoneInfoData); return false; case 'y': outputYear(wallTime.getYear(), false, true, modifier); @@ -411,7 +414,8 @@ class TimeFormatter { return false; } boolean isDst = wallTime.getIsDst() != 0; - modifyAndAppend(zoneInfo.getDisplayName(isDst, TimeZone.SHORT), modifier); + modifyAndAppend(TimeZone.getTimeZone(zoneInfoData.getID()) + .getDisplayName(isDst, TimeZone.SHORT), modifier); return false; case 'z': { if (wallTime.getIsDst() < 0) { @@ -432,7 +436,7 @@ class TimeFormatter { return false; } case '+': - formatInternal("%a %b %e %H:%M:%S %Z %Y", wallTime, zoneInfo); + formatInternal("%a %b %e %H:%M:%S %Z %Y", wallTime, zoneInfoData); return false; case '%': // If conversion char is undefined, behavior is undefined. Print out the diff --git a/core/java/android/timezone/TzDataSetVersion.java b/core/java/android/timezone/TzDataSetVersion.java index f993012aeb1c..e1fb932b977d 100644 --- a/core/java/android/timezone/TzDataSetVersion.java +++ b/core/java/android/timezone/TzDataSetVersion.java @@ -50,14 +50,14 @@ public final class TzDataSetVersion { * Returns the major tz data format version supported by this device. */ public static int currentFormatMajorVersion() { - return libcore.timezone.TzDataSetVersion.currentFormatMajorVersion(); + return com.android.i18n.timezone.TzDataSetVersion.currentFormatMajorVersion(); } /** * Returns the minor tz data format version supported by this device. */ public static int currentFormatMinorVersion() { - return libcore.timezone.TzDataSetVersion.currentFormatMinorVersion(); + return com.android.i18n.timezone.TzDataSetVersion.currentFormatMinorVersion(); } /** @@ -65,7 +65,7 @@ public final class TzDataSetVersion { * with the current system image, and set of active modules. */ public static boolean isCompatibleWithThisDevice(TzDataSetVersion tzDataSetVersion) { - return libcore.timezone.TzDataSetVersion.isCompatibleWithThisDevice( + return com.android.i18n.timezone.TzDataSetVersion.isCompatibleWithThisDevice( tzDataSetVersion.mDelegate); } @@ -76,8 +76,8 @@ public final class TzDataSetVersion { public static TzDataSetVersion read() throws IOException, TzDataSetException { try { return new TzDataSetVersion( - libcore.timezone.TzDataSetVersion.readTimeZoneModuleVersion()); - } catch (libcore.timezone.TzDataSetVersion.TzDataSetException e) { + com.android.i18n.timezone.TzDataSetVersion.readTimeZoneModuleVersion()); + } catch (com.android.i18n.timezone.TzDataSetVersion.TzDataSetException e) { throw new TzDataSetException(e.getMessage(), e); } } @@ -100,9 +100,9 @@ public final class TzDataSetVersion { } @NonNull - private final libcore.timezone.TzDataSetVersion mDelegate; + private final com.android.i18n.timezone.TzDataSetVersion mDelegate; - private TzDataSetVersion(@NonNull libcore.timezone.TzDataSetVersion delegate) { + private TzDataSetVersion(@NonNull com.android.i18n.timezone.TzDataSetVersion delegate) { mDelegate = Objects.requireNonNull(delegate); } diff --git a/core/java/android/timezone/ZoneInfoDb.java b/core/java/android/timezone/ZoneInfoDb.java index 9354a695812d..65d6eaddf824 100644 --- a/core/java/android/timezone/ZoneInfoDb.java +++ b/core/java/android/timezone/ZoneInfoDb.java @@ -41,16 +41,16 @@ public final class ZoneInfoDb { public static ZoneInfoDb getInstance() { synchronized (sLock) { if (sInstance == null) { - sInstance = new ZoneInfoDb(libcore.timezone.ZoneInfoDb.getInstance()); + sInstance = new ZoneInfoDb(com.android.i18n.timezone.ZoneInfoDb.getInstance()); } } return sInstance; } @NonNull - private final libcore.timezone.ZoneInfoDb mDelegate; + private final com.android.i18n.timezone.ZoneInfoDb mDelegate; - private ZoneInfoDb(libcore.timezone.ZoneInfoDb delegate) { + private ZoneInfoDb(com.android.i18n.timezone.ZoneInfoDb delegate) { mDelegate = Objects.requireNonNull(delegate); } diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java index 6e41fc8017c1..b2766a44e036 100644 --- a/core/java/android/util/TimeUtils.java +++ b/core/java/android/util/TimeUtils.java @@ -23,10 +23,11 @@ import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; import android.os.SystemClock; +import com.android.i18n.timezone.ZoneInfoDb; + import libcore.timezone.CountryTimeZones; import libcore.timezone.CountryTimeZones.TimeZoneMapping; import libcore.timezone.TimeZoneFinder; -import libcore.timezone.ZoneInfoDb; import java.io.PrintWriter; import java.text.SimpleDateFormat; diff --git a/services/core/java/com/android/server/RuntimeService.java b/services/core/java/com/android/server/RuntimeService.java index bb39ccc52af2..f4249f844873 100644 --- a/services/core/java/com/android/server/RuntimeService.java +++ b/services/core/java/com/android/server/RuntimeService.java @@ -23,10 +23,9 @@ import android.service.runtime.RuntimeServiceInfoProto; import android.util.Slog; import android.util.proto.ProtoOutputStream; -import libcore.timezone.TimeZoneDataFiles; -import libcore.util.CoreLibraryDebug; -import libcore.util.DebugInfo; - +import com.android.i18n.timezone.DebugInfo; +import com.android.i18n.timezone.I18nModuleDebug; +import com.android.i18n.timezone.TimeZoneDataFiles; import com.android.internal.util.DumpUtils; import com.android.timezone.distro.DistroException; import com.android.timezone.distro.DistroVersion; @@ -61,14 +60,14 @@ public class RuntimeService extends Binder { boolean protoFormat = hasOption(args, "--proto"); ProtoOutputStream proto = null; - DebugInfo coreLibraryDebugInfo = CoreLibraryDebug.getDebugInfo(); - addTimeZoneApkDebugInfo(coreLibraryDebugInfo); + DebugInfo i18nLibraryDebugInfo = I18nModuleDebug.getDebugInfo(); + addTimeZoneApkDebugInfo(i18nLibraryDebugInfo); if (protoFormat) { proto = new ProtoOutputStream(fd); - reportTimeZoneInfoProto(coreLibraryDebugInfo, proto); + reportTimeZoneInfoProto(i18nLibraryDebugInfo, proto); } else { - reportTimeZoneInfo(coreLibraryDebugInfo, pw); + reportTimeZoneInfo(i18nLibraryDebugInfo, pw); } if (protoFormat) { diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index bbd1ae60cb62..d4a71ed27549 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerService.java +++ b/services/core/java/com/android/server/timezone/RulesManagerService.java @@ -37,6 +37,9 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.util.Slog; +import com.android.i18n.timezone.TimeZoneDataFiles; +import com.android.i18n.timezone.TzDataSetVersion; +import com.android.i18n.timezone.ZoneInfoDb; import com.android.internal.annotations.VisibleForTesting; import com.android.server.EventLogTags; import com.android.server.SystemService; @@ -46,10 +49,7 @@ import com.android.timezone.distro.StagedDistroOperation; import com.android.timezone.distro.TimeZoneDistro; import com.android.timezone.distro.installer.TimeZoneDistroInstaller; -import libcore.timezone.TimeZoneDataFiles; import libcore.timezone.TimeZoneFinder; -import libcore.timezone.TzDataSetVersion; -import libcore.timezone.ZoneInfoDb; import java.io.File; import java.io.FileDescriptor; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 23b1512081da..c48ee11237e9 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -74,6 +74,7 @@ import android.view.WindowManager; import android.view.contentcapture.ContentCaptureManager; import android.view.inputmethod.InputMethodSystemProperty; +import com.android.i18n.timezone.ZoneInfoDb; import com.android.internal.R; import com.android.internal.logging.MetricsLogger; import com.android.internal.notification.SystemNotificationChannels; @@ -165,8 +166,6 @@ import com.android.server.wm.ActivityTaskManagerService; import com.android.server.wm.WindowManagerGlobalLock; import com.android.server.wm.WindowManagerService; -import libcore.timezone.ZoneInfoDb; - import dalvik.system.VMRuntime; import java.io.File; diff --git a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java index 5c6fe0fc4cad..2c4c4d0ee91f 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java @@ -43,13 +43,13 @@ import android.app.timezone.RulesManager; import android.app.timezone.RulesState; import android.os.ParcelFileDescriptor; +import com.android.i18n.timezone.TzDataSetVersion; import com.android.timezone.distro.DistroVersion; import com.android.timezone.distro.StagedDistroOperation; import com.android.timezone.distro.TimeZoneDistro; import com.android.timezone.distro.installer.TimeZoneDistroInstaller; import libcore.io.IoUtils; -import libcore.timezone.TzDataSetVersion; import org.junit.Before; import org.junit.Test; |