Add Desugar Support for android/os/SystemClock#currentGnssTimeClock
PiperOrigin-RevId: 294468659
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/ClockWrapper.java b/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/ClockWrapper.java
new file mode 100644
index 0000000..e99d55a4b
--- /dev/null
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/runtime/ClockWrapper.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2019 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.devtools.build.android.desugar.runtime;
+
+import android.os.SystemClock;
+import j$.time.ZoneId;
+
+/**
+ * Conversion from JDK-type-compatible {@link java.time.Clock} returned from Android APIs to core
+ * library desugared {@link j$.time.Clock}.
+ */
+@SuppressWarnings("AndroidApiChecker") // Non-API code: Only compiled bytecode for type conversion.
+public final class ClockWrapper extends j$.time.Clock {
+
+ private final java.time.Clock clock;
+ private final j$.time.ZoneId overridingZoneId;
+
+ private ClockWrapper(java.time.Clock clock) {
+ this(clock, null);
+ }
+
+ private ClockWrapper(java.time.Clock clock, j$.time.ZoneId overridingZoneId) {
+ this.clock = clock;
+ this.overridingZoneId = overridingZoneId;
+ }
+
+ @Override
+ public j$.time.ZoneId getZone() {
+ return overridingZoneId == null ? fromZoneId(clock.getZone()) : overridingZoneId;
+ }
+
+ @Override
+ public j$.time.Clock withZone(j$.time.ZoneId zoneId) {
+ return new ClockWrapper(clock, zoneId);
+ }
+
+ @Override
+ public long millis() {
+ return clock.millis();
+ }
+
+ @Override
+ public j$.time.Instant instant() {
+ return fromInstant(clock.instant());
+ }
+
+ public static j$.time.Clock currentGnssTimeClock() {
+ return ClockWrapper.fromClock(SystemClock.currentGnssTimeClock());
+ }
+
+ static j$.time.Clock fromClock(java.time.Clock clock) {
+ return new ClockWrapper(clock);
+ }
+
+ static ZoneId fromZoneId(java.time.ZoneId zoneId) {
+ return ZoneId.of(zoneId.getId());
+ }
+
+ static j$.time.Instant fromInstant(java.time.Instant instant) {
+ return j$.time.Instant.ofEpochSecond(instant.getEpochSecond(), instant.getNano());
+ }
+}