Merge "Exposed HeartRateSeries and SeriesRecord" into androidx-main
diff --git a/health/health-connect-client/api/current.txt b/health/health-connect-client/api/current.txt
index fa18e8b..2b75ef7 100644
--- a/health/health-connect-client/api/current.txt
+++ b/health/health-connect-client/api/current.txt
@@ -333,6 +333,30 @@
   public static final class ElevationGained.Companion {
   }
 
+  public final class HeartRate {
+    ctor public HeartRate(java.time.Instant time, long beatsPerMinute);
+    method public long getBeatsPerMinute();
+    method public java.time.Instant getTime();
+    property public final long beatsPerMinute;
+    property public final java.time.Instant time;
+  }
+
+  public final class HeartRateSeries implements androidx.health.connect.client.records.Record {
+    ctor public HeartRateSeries(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, java.util.List<androidx.health.connect.client.records.HeartRate> samples, optional androidx.health.connect.client.metadata.Metadata metadata);
+    method public java.time.Instant getEndTime();
+    method public java.time.ZoneOffset? getEndZoneOffset();
+    method public androidx.health.connect.client.metadata.Metadata getMetadata();
+    method public java.util.List<androidx.health.connect.client.records.HeartRate> getSamples();
+    method public java.time.Instant getStartTime();
+    method public java.time.ZoneOffset? getStartZoneOffset();
+    property public java.time.Instant endTime;
+    property public java.time.ZoneOffset? endZoneOffset;
+    property public androidx.health.connect.client.metadata.Metadata metadata;
+    property public java.util.List<androidx.health.connect.client.records.HeartRate> samples;
+    property public java.time.Instant startTime;
+    property public java.time.ZoneOffset? startZoneOffset;
+  }
+
   public final class Height implements androidx.health.connect.client.records.Record {
     ctor public Height(double heightMeters, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.metadata.Metadata metadata);
     method public double getHeightMeters();
diff --git a/health/health-connect-client/api/public_plus_experimental_current.txt b/health/health-connect-client/api/public_plus_experimental_current.txt
index fa18e8b..2b75ef7 100644
--- a/health/health-connect-client/api/public_plus_experimental_current.txt
+++ b/health/health-connect-client/api/public_plus_experimental_current.txt
@@ -333,6 +333,30 @@
   public static final class ElevationGained.Companion {
   }
 
+  public final class HeartRate {
+    ctor public HeartRate(java.time.Instant time, long beatsPerMinute);
+    method public long getBeatsPerMinute();
+    method public java.time.Instant getTime();
+    property public final long beatsPerMinute;
+    property public final java.time.Instant time;
+  }
+
+  public final class HeartRateSeries implements androidx.health.connect.client.records.Record {
+    ctor public HeartRateSeries(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, java.util.List<androidx.health.connect.client.records.HeartRate> samples, optional androidx.health.connect.client.metadata.Metadata metadata);
+    method public java.time.Instant getEndTime();
+    method public java.time.ZoneOffset? getEndZoneOffset();
+    method public androidx.health.connect.client.metadata.Metadata getMetadata();
+    method public java.util.List<androidx.health.connect.client.records.HeartRate> getSamples();
+    method public java.time.Instant getStartTime();
+    method public java.time.ZoneOffset? getStartZoneOffset();
+    property public java.time.Instant endTime;
+    property public java.time.ZoneOffset? endZoneOffset;
+    property public androidx.health.connect.client.metadata.Metadata metadata;
+    property public java.util.List<androidx.health.connect.client.records.HeartRate> samples;
+    property public java.time.Instant startTime;
+    property public java.time.ZoneOffset? startZoneOffset;
+  }
+
   public final class Height implements androidx.health.connect.client.records.Record {
     ctor public Height(double heightMeters, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.metadata.Metadata metadata);
     method public double getHeightMeters();
diff --git a/health/health-connect-client/api/restricted_current.txt b/health/health-connect-client/api/restricted_current.txt
index 0b35453..e07f699 100644
--- a/health/health-connect-client/api/restricted_current.txt
+++ b/health/health-connect-client/api/restricted_current.txt
@@ -333,6 +333,30 @@
   public static final class ElevationGained.Companion {
   }
 
+  public final class HeartRate {
+    ctor public HeartRate(java.time.Instant time, long beatsPerMinute);
+    method public long getBeatsPerMinute();
+    method public java.time.Instant getTime();
+    property public final long beatsPerMinute;
+    property public final java.time.Instant time;
+  }
+
+  public final class HeartRateSeries implements androidx.health.connect.client.records.SeriesRecord<androidx.health.connect.client.records.HeartRate> {
+    ctor public HeartRateSeries(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, java.util.List<androidx.health.connect.client.records.HeartRate> samples, optional androidx.health.connect.client.metadata.Metadata metadata);
+    method public java.time.Instant getEndTime();
+    method public java.time.ZoneOffset? getEndZoneOffset();
+    method public androidx.health.connect.client.metadata.Metadata getMetadata();
+    method public java.util.List<androidx.health.connect.client.records.HeartRate> getSamples();
+    method public java.time.Instant getStartTime();
+    method public java.time.ZoneOffset? getStartZoneOffset();
+    property public java.time.Instant endTime;
+    property public java.time.ZoneOffset? endZoneOffset;
+    property public androidx.health.connect.client.metadata.Metadata metadata;
+    property public java.util.List<androidx.health.connect.client.records.HeartRate> samples;
+    property public java.time.Instant startTime;
+    property public java.time.ZoneOffset? startZoneOffset;
+  }
+
   public final class Height implements androidx.health.connect.client.records.InstantaneousRecord {
     ctor public Height(double heightMeters, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.metadata.Metadata metadata);
     method public double getHeightMeters();
@@ -393,6 +417,11 @@
     property public abstract androidx.health.connect.client.metadata.Metadata metadata;
   }
 
+  @kotlin.PublishedApi internal interface SeriesRecord<T> extends androidx.health.connect.client.records.IntervalRecord {
+    method public java.util.List<T> getSamples();
+    property public abstract java.util.List<T> samples;
+  }
+
   public final class Steps implements androidx.health.connect.client.records.IntervalRecord {
     ctor public Steps(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.metadata.Metadata metadata);
     method public long getCount();
diff --git a/health/health-connect-client/src/main/java/androidx/health/connect/client/records/HeartRateSeries.kt b/health/health-connect-client/src/main/java/androidx/health/connect/client/records/HeartRateSeries.kt
index 981f549..95201d1 100644
--- a/health/health-connect-client/src/main/java/androidx/health/connect/client/records/HeartRateSeries.kt
+++ b/health/health-connect-client/src/main/java/androidx/health/connect/client/records/HeartRateSeries.kt
@@ -15,14 +15,12 @@
  */
 package androidx.health.connect.client.records
 
-import androidx.annotation.RestrictTo
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.metadata.Metadata
 import java.time.Instant
 import java.time.ZoneOffset
 
 /** Captures the user's heart rate. Each record represents a series of measurements. */
-@RestrictTo(RestrictTo.Scope.LIBRARY) // Will be made public after API reviews
 public class HeartRateSeries(
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
@@ -100,7 +98,6 @@
  *
  * @param beatsPerMinute Heart beats per minute. Validation range: 1-300.
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY) // Will be made public after API reviews
 public class HeartRate(
     val time: Instant,
     val beatsPerMinute: Long,
diff --git a/health/health-connect-client/src/main/java/androidx/health/connect/client/records/SeriesRecord.kt b/health/health-connect-client/src/main/java/androidx/health/connect/client/records/SeriesRecord.kt
index 9fb8ee6..b98d9e5 100644
--- a/health/health-connect-client/src/main/java/androidx/health/connect/client/records/SeriesRecord.kt
+++ b/health/health-connect-client/src/main/java/androidx/health/connect/client/records/SeriesRecord.kt
@@ -17,6 +17,7 @@
 
 /** A record that contains a series of measurements. */
 // Consider exposing this one and other similar interfaces!
+@PublishedApi
 internal interface SeriesRecord<out T : Any> : IntervalRecord {
 
     val samples: List<T>